From 1e7daf179b61976f8e5037bd4a5899f733f51377 Mon Sep 17 00:00:00 2001 From: Enno Rehling <enno@eressea.de> Date: Sat, 3 Feb 2001 13:45:35 +0000 Subject: [PATCH] =?UTF-8?q?-=20Patch=20von=20pre-split-2=20nach=20pre-spli?= =?UTF-8?q?t-3=20-=20Target=20'Conversion'=20f=C3=BCr=20Visual=20C++=206.0?= =?UTF-8?q?=20gebaut.=20-=20Einige=20Rassenabh=C3=A4ngigkeiten=20aus=20dem?= =?UTF-8?q?=20Kernel=20entfernt=20(Trolle,=20Tr=C3=A4nke)=20-=20messages?= =?UTF-8?q?=20lokalisiert=20-=20resourcen-verzeichnis=20umgestellt.=20-=20?= =?UTF-8?q?einheitlicher=20Prefix=20f=C3=BCr=20Rassen-Flags=20-=20coding.t?= =?UTF-8?q?xt=20um=20ein=20paar=20abs=C3=A4tze=20erweitert=20-=20resourcen?= =?UTF-8?q?verzeichnis=20kann=20mit=20-r=20angegeben=20werden=20(default?= =?UTF-8?q?=20ist=20weiterhin=20"./res")=20-=20eigenschaft,=20ohne=20waffe?= =?UTF-8?q?n=20zu=20attackieren=20als=20rassenflag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bei der nächsten Auswertung beachten: - funktionieren Schmiede und Bergwerk? - haben Trolle auf den Pferdebonus ein -1? - Echeck aus dem alten source in den neuen source kopieren. --- src/askalon/askalon-6.dsp | 46 +- src/askalon/main.c | 26 +- src/common/attributes/attributes-6.dsp | 4 +- src/common/attributes/giveitem.c | 14 +- src/common/gamecode/creation.c | 103 +-- src/common/gamecode/creation.h | 4 +- src/common/gamecode/creport.c | 22 +- src/common/gamecode/economy.c | 45 +- src/common/gamecode/gamecode-6.dsp | 35 +- src/common/gamecode/laws.c | 90 ++- src/common/gamecode/monster.c | 14 +- src/common/gamecode/randenc.c | 4 +- src/common/gamecode/report.c | 20 +- src/common/gamecode/study.c | 23 +- src/common/items/items-6.dsp | 4 +- src/common/items/weapons.c | 23 +- src/common/kernel/alchemy.c | 27 +- src/common/kernel/battle.c | 127 ++-- src/common/kernel/build.c | 44 +- src/common/kernel/building.c | 16 +- src/common/kernel/combatspells.c | 2 +- src/common/kernel/curse.c | 49 +- src/common/kernel/curse.h | 15 +- src/common/kernel/eressea.c | 34 +- src/common/kernel/eressea.h | 4 +- src/common/kernel/item.c | 48 +- src/common/kernel/item.h | 5 +- src/common/kernel/kernel-6.dsp | 58 +- src/common/kernel/magic.c | 122 ++-- src/common/kernel/movement.c | 24 +- src/common/kernel/race.c | 152 ++--- src/common/kernel/race.h | 46 +- src/common/kernel/region.c | 81 ++- src/common/kernel/region.h | 4 +- src/common/kernel/save.c | 74 ++- src/common/kernel/skill.c | 20 +- src/common/kernel/skill.h | 11 +- src/common/kernel/spell.c | 21 +- src/common/kernel/unit.c | 14 +- src/common/kernel/unit.h | 4 +- src/common/modules/modules-6.dsp | 4 +- src/common/modules/oceannames.c | 4 +- src/common/races/races-6.dsp | 4 +- src/common/spells/spells-6.dsp | 4 +- src/common/spells/spells.c | 12 +- src/common/triggers/triggers-6.dsp | 4 +- src/common/triggers/triggers.c | 4 +- src/common/triggers/triggers.h | 4 +- src/common/util/event.c | 5 +- src/common/util/util-6.dsp | 58 +- src/config.h | 26 +- src/doc/coding.txt | 18 +- src/doc/triggers.txt | 111 ++++ src/eressea-6.opt | Bin 0 -> 138240 bytes src/eressea/attributes.c | 4 +- src/eressea/eressea-6.dsp | 593 +++++++++++++++++- src/eressea/items.c | 11 + src/eressea/korrektur.c | 66 +- src/eressea/korrektur.h | 14 + src/eressea/main.c | 177 +++--- src/eressea/old/trigger.c | 3 +- src/eressea/old/trigger.h | 3 +- src/eressea/spells.c | 25 + src/eressea/triggers.c | 4 +- src/header.txt | 21 +- src/mapper/map_modify.c | 36 +- src/mapper/map_partei.c | 4 +- src/mapper/map_region.c | 4 +- src/mapper/map_tools.c | 12 +- src/mapper/mapper-6.dsp | 9 +- src/mapper/mapper.c | 4 +- src/mapper/mapper.h | 6 +- src/res/de/items/Adler | 1 + src/res/de/items/Amulett der Heilung | 1 + src/res/de/items/Amulett des Todes | 1 + src/res/de/items/Amulett des wahren Sehens | 1 + src/res/de/items/Antimagiekristall | 1 + src/res/de/items/Apfel | 1 + src/res/de/items/Auge des Drachen | 1 + src/res/de/items/Auge des Dämon | 1 + src/res/de/items/Einhorn | 1 + src/res/de/items/Elfenpferd | 1 + src/res/de/items/Feenstiefel | 1 + src/res/de/items/Flammenschwert | 1 + src/res/de/items/Keks | 1 + src/res/de/items/Kröte | 1 + src/res/de/items/Luchs | 1 + src/res/de/items/Mandelkern | 1 + src/res/de/items/Mantel der Unverletzlichkeit | 1 + src/res/de/items/Nuß | 1 + src/res/de/items/Ring der Macht | 1 + src/res/de/items/Ring der Unsichtbarkeit | 1 + src/res/de/items/Runenschwert | 1 + src/res/de/items/Schildstein | 1 + src/res/de/items/Schwinge des Greifen | 1 + src/res/de/items/Szepter der Tränen | 1 + src/res/de/items/Traumauge | 1 + src/res/de/items/Tunnelwurm | 1 + src/res/de/items/Warg | 1 + src/res/de/items/Zauberbeutel | 7 + src/res/de/items/Zauberstab der Blitze | 1 + src/res/de/items/Zauberstab der Teleportation | 1 + src/res/de/items/Zauberstab des Feuers | 1 + src/res/de/messages.txt | 522 +++++++++++++++ src/res/de/newbie.txt | 26 + src/res/de/strings.txt | 352 +++++++++++ src/res/en/messages.txt | 364 +++++++++++ src/res/en/strings.txt | 157 +++++ 108 files changed, 3276 insertions(+), 915 deletions(-) create mode 100644 src/doc/triggers.txt create mode 100644 src/eressea-6.opt create mode 100644 src/eressea/items.c create mode 100644 src/eressea/korrektur.h create mode 100644 src/eressea/spells.c create mode 100644 src/res/de/items/Adler create mode 100644 src/res/de/items/Amulett der Heilung create mode 100644 src/res/de/items/Amulett des Todes create mode 100644 src/res/de/items/Amulett des wahren Sehens create mode 100644 src/res/de/items/Antimagiekristall create mode 100644 src/res/de/items/Apfel create mode 100644 src/res/de/items/Auge des Drachen create mode 100644 src/res/de/items/Auge des Dämon create mode 100644 src/res/de/items/Einhorn create mode 100644 src/res/de/items/Elfenpferd create mode 100644 src/res/de/items/Feenstiefel create mode 100644 src/res/de/items/Flammenschwert create mode 100644 src/res/de/items/Keks create mode 100644 src/res/de/items/Kröte create mode 100644 src/res/de/items/Luchs create mode 100644 src/res/de/items/Mandelkern create mode 100644 src/res/de/items/Mantel der Unverletzlichkeit create mode 100644 src/res/de/items/Nuß create mode 100644 src/res/de/items/Ring der Macht create mode 100644 src/res/de/items/Ring der Unsichtbarkeit create mode 100644 src/res/de/items/Runenschwert create mode 100644 src/res/de/items/Schildstein create mode 100644 src/res/de/items/Schwinge des Greifen create mode 100644 src/res/de/items/Szepter der Tränen create mode 100644 src/res/de/items/Traumauge create mode 100644 src/res/de/items/Tunnelwurm create mode 100644 src/res/de/items/Warg create mode 100644 src/res/de/items/Zauberbeutel create mode 100644 src/res/de/items/Zauberstab der Blitze create mode 100644 src/res/de/items/Zauberstab der Teleportation create mode 100644 src/res/de/items/Zauberstab des Feuers create mode 100644 src/res/de/messages.txt create mode 100644 src/res/de/newbie.txt create mode 100644 src/res/de/strings.txt create mode 100644 src/res/en/messages.txt create mode 100644 src/res/en/strings.txt diff --git a/src/askalon/askalon-6.dsp b/src/askalon/askalon-6.dsp index 3b0c94d2d..d19c02e27 100644 --- a/src/askalon/askalon-6.dsp +++ b/src/askalon/askalon-6.dsp @@ -4,7 +4,7 @@ # TARGTYPE "Win32 (x86) Console Application" 0x0103 -CFG=askalon - Win32 Conversion +CFG=askalon - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE @@ -13,13 +13,12 @@ CFG=askalon - Win32 Conversion !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE -!MESSAGE NMAKE /f "askalon-6.mak" CFG="askalon - Win32 Conversion" +!MESSAGE NMAKE /f "askalon-6.mak" CFG="askalon - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "askalon - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "askalon - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "askalon - Win32 Conversion" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project @@ -40,9 +39,10 @@ RSC=rc.exe # 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 "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX /Z7 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE RSC /l 0x407 /d "NDEBUG" # ADD RSC /l 0x407 /d "NDEBUG" BSC32=bscmake.exe @@ -50,7 +50,7 @@ BSC32=bscmake.exe # 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 /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 !ELSEIF "$(CFG)" == "askalon - Win32 Debug" @@ -66,34 +66,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /Za /W4 /Gm /ZI /Od /I ".." /I "../util" /I "../common" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX"stdafx.h" /FD /c -# 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 /nologo /subsystem:console /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 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ELSEIF "$(CFG)" == "askalon - Win32 Conversion" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "askalon_" -# PROP BASE Intermediate_Dir "askalon_" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "askalon_" -# PROP Intermediate_Dir "askalon_" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MDd /Za /W4 /Gm /Zi /Od /I ".." /I "../util" /I "../common" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /c -# SUBTRACT BASE CPP /YX -# ADD CPP /nologo /MDd /Za /W4 /Gm /ZI /Od /I ".." /I "../util" /I "../common" /D "_CONSOLE" /D "_MBCS" /D "WIN32" /D "_DEBUG" /D "CONVERT_TRIGGER" /FR /FD /c -# SUBTRACT CPP /YX +# ADD CPP /nologo /Za /W4 /Gm /ZI /Od /I ".." /I "../util" /I "../common" /D "_CONSOLE" /D "_MBCS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /YX"stdafx.h" /FD /c # ADD BASE RSC /l 0x407 /d "_DEBUG" # ADD RSC /l 0x407 /d "_DEBUG" BSC32=bscmake.exe @@ -109,7 +82,6 @@ LINK32=link.exe # Name "askalon - Win32 Release" # Name "askalon - Win32 Debug" -# Name "askalon - Win32 Conversion" # Begin Group "Header" # PROP Default_Filter "*.h" @@ -147,8 +119,6 @@ SOURCE=..\old\pointertags.c # PROP Exclude_From_Build 1 -!ELSEIF "$(CFG)" == "askalon - Win32 Conversion" - !ENDIF # End Source File @@ -162,8 +132,6 @@ SOURCE=..\old\relation.c # PROP Exclude_From_Build 1 -!ELSEIF "$(CFG)" == "askalon - Win32 Conversion" - !ENDIF # End Source File @@ -177,8 +145,6 @@ SOURCE=..\old\trigger.c # PROP Exclude_From_Build 1 -!ELSEIF "$(CFG)" == "askalon - Win32 Conversion" - !ENDIF # End Source File diff --git a/src/askalon/main.c b/src/askalon/main.c index 0f9cfb752..94bfbbd67 100644 --- a/src/askalon/main.c +++ b/src/askalon/main.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: main.c,v 1.2 2001/01/26 16:19:39 enno Exp $ + * $Id: main.c,v 1.3 2001/02/03 13:45:27 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -106,10 +106,11 @@ create_game(void) void map(void) { + char zText[16]; FILE * f; region * r; - sprintf(buf, "map-%d.cr", turn); - f = fopen(buf, "wt"); + sprintf(zText, "map-%d.cr", turn); + f = fopen(zText, "wt"); fputs("VERSION 42\n", f); fputs("\"Standard\";konfiguration\n", f); fprintf(f, "%d;runde\n", turn); @@ -161,8 +162,11 @@ int quickleave = 0; void writepasswd(void) { + FILE * F; faction *f; - FILE * F = cfopen("passwd", "w"); + char zText[128]; + sprintf(zText, "%s/%s", datapath(), "/passwd"); + F = cfopen(zText, "w"); if (!F) return; puts("Schreibe Passw�rter..."); @@ -456,7 +460,11 @@ main(int argc, char *argv[]) break; } - read_datenames("res/timestrings"); + { + char zText[MAX_PATH]; + strcat(strcpy(zText, resourcepath()), "/timestrings"); + read_datenames(zText); + } init_game(); initgame(); readgame(false); @@ -666,14 +674,6 @@ main(int argc, char *argv[]) } break; - case 'T': - changeblockterrain(); - break; - - case 'C': - changeblockchaos(); - break; - case 'q': #if ENNO_CLEANUP cleanup(); diff --git a/src/common/attributes/attributes-6.dsp b/src/common/attributes/attributes-6.dsp index 16d8f71d0..a188867aa 100644 --- a/src/common/attributes/attributes-6.dsp +++ b/src/common/attributes/attributes-6.dsp @@ -41,7 +41,7 @@ RSC=rc.exe # PROP Intermediate_Dir "Release" # 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" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX /Z7 /O2 /I "../util" /I "../kernel" /I "../.." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe @@ -64,7 +64,7 @@ LIB32=link.exe -lib # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX"stdafx.h" /FD /c +# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /YX"stdafx.h" /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe diff --git a/src/common/attributes/giveitem.c b/src/common/attributes/giveitem.c index 7e7bf2ae3..9621e77fa 100644 --- a/src/common/attributes/giveitem.c +++ b/src/common/attributes/giveitem.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: giveitem.c,v 1.2 2001/01/26 16:19:39 enno Exp $ + * $Id: giveitem.c,v 1.3 2001/02/03 13:45:27 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -54,18 +54,19 @@ a_readgive(attrib * a, FILE * F) { give_data * gdata = (give_data*)a->data.v; int i; + char zText[32]; if (global.data_version<ITEMTYPE_VERSION) return a_readdefault(a, F); - fscanf(F, "%s ", buf); - i = atoi36(buf); + fscanf(F, "%s ", zText); + i = atoi36(zText); gdata->building = findbuilding(i); if (gdata->building==NULL) ur_add((void*)i, (void**)&gdata->building, resolve_building); for (;;) { - fscanf(F, "%s", buf); - if (!strcmp("end", buf)) break; + fscanf(F, "%s", zText); + if (!strcmp("end", zText)) break; fscanf(F, "%d", &i); - if (i==0) i_add(&gdata->items, i_new(it_find(buf)))->number = i; + if (i==0) i_add(&gdata->items, i_new(it_find(zText)))->number = i; } return 1; } @@ -95,7 +96,6 @@ give_item(attrib * a) while (gdata->items) { item * itm = gdata->items; i_change(&u->items, itm->type, itm->number); -/* sprintf(buf, "%s findet in %s %d %s", unitname(u), regionid(r), itm->number, locale_string(u->faction->locale, resourcename(itm->type->rtype, (itm->number==1)?0:GR_PLURAL))); */ i_free(i_remove(&gdata->items, itm)); } return 0; diff --git a/src/common/gamecode/creation.c b/src/common/gamecode/creation.c index 71dcb8d3e..86f7c8013 100644 --- a/src/common/gamecode/creation.c +++ b/src/common/gamecode/creation.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: creation.c,v 1.3 2001/01/30 23:16:16 enno Exp $ + * $Id: creation.c,v 1.4 2001/02/03 13:45:28 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -52,6 +52,7 @@ #include <stdlib.h> #include <string.h> +static int g_maxluxuries; /* eine insel pro 9x9 feld. das erste feld von (0,0) bis (8,8) */ @@ -265,103 +266,3 @@ writemap(FILE * F, int mode) /* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */ - -void -changeblockterrain(void) -{ - int x1, x2, y1, y2; - int x, y; - int i; - char t; - region *r; - - printf("X1? "); - fgets(buf, 6, stdin); - if (buf[0] == 0) - return; - x1 = atoi(buf); - - printf("Y1? "); - fgets(buf, 6, stdin); - if (buf[0] == 0) - return; - y1 = atoi(buf); - - printf("X2? "); - fgets(buf, 6, stdin); - if (buf[0] == 0) - return; - x2 = atoi(buf); - - printf("Y2? "); - fgets(buf, 6, stdin); - if (buf[0] == 0) - return; - y2 = atoi(buf); - - puts("Terrain?"); - for (i = 0; i != MAXTERRAINS; i++) { - printf("%d - %s\n", i, terrain[i].name); - } - fgets(buf, 6, stdin); - if (buf[0] == 0) - return; - t = (char) atoi(buf); - - for (x = x1; x <= x2; x++) { - for (y = y1; y <= y2; y++) { - if (0 != (r = findregion(x, y))) { - terraform(r, t); - } - } - } -} - -void -changeblockchaos(void) -{ - int x1, x2, y1, y2; - int x, y; - char chaotisch; - region *r; - - printf("X1? "); - fgets(buf, 6, stdin); - if (buf[0] == 0) - return; - x1 = atoi(buf); - - printf("Y1? "); - fgets(buf, 6, stdin); - if (buf[0] == 0) - return; - y1 = atoi(buf); - - printf("X2? "); - fgets(buf, 6, stdin); - if (buf[0] == 0) - return; - x2 = atoi(buf); - - printf("Y2? "); - fgets(buf, 6, stdin); - if (buf[0] == 0) - return; - y2 = atoi(buf); - - puts("Chaos (0=aus, 1=an) ?"); - fgets(buf, 6, stdin); - if (buf[0] == 0) - return; - - chaotisch = (char) atoi(buf); - - for (x = x1; x <= x2; x++) { - for (y = y1; y <= y2; y++) { - if (0 != (r = findregion(x, y))) { - if (chaotisch) fset(r, RF_CHAOTIC); - else freset(r, RF_CHAOTIC); - } - } - } -} diff --git a/src/common/gamecode/creation.h b/src/common/gamecode/creation.h index 6936d16a3..a9b171a9e 100644 --- a/src/common/gamecode/creation.h +++ b/src/common/gamecode/creation.h @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: creation.h,v 1.2 2001/01/26 16:19:39 enno Exp $ + * $Id: creation.h,v 1.3 2001/02/03 13:45:29 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -30,8 +30,6 @@ void makeblock(int x1, int y1, char chaos); void listnames(void); void writemap(FILE * F, int mode); -void changeblockterrain(void); - void regionspells(void); void moveunit(void); diff --git a/src/common/gamecode/creport.c b/src/common/gamecode/creport.c index f450e727a..690893020 100644 --- a/src/common/gamecode/creport.c +++ b/src/common/gamecode/creport.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: creport.c,v 1.3 2001/01/28 08:50:45 enno Exp $ + * $Id: creport.c,v 1.4 2001/02/03 13:45:29 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -63,7 +63,7 @@ #include <stdlib.h> #include <string.h> -#define C_REPORT_VERSION 52 +#define C_REPORT_VERSION 54 #define NEWBLOCKS (C_REPORT_VERSION>=35) #define ENCODE_SPECIAL 1 @@ -718,7 +718,7 @@ report_computer(FILE * F, faction * f) fprintf(F, "%d;Runde\n", turn); fputs("2;Zeitalter\n", F); fprintf(F, "PARTEI %d\n", f->no); - fprintf(F, "\"%s\";Passwort\n", f->passw); +/* fprintf(F, "\"%s\";Passwort\n", f->passw); */ fprintf(F, "\"%s\";locale\n", locale_name(f->locale)); fprintf(F, "%d;Optionen\n", f->options); if (f->options & want(O_SCORE) && f->age>DISPLAYSCORE) { @@ -854,13 +854,15 @@ report_computer(FILE * F, faction * f) fprintf(F, "%d;Lohn\n", fwage(r, f, true)); } /* trade */ - fputs("PREISE\n", F); - while (dmd) { - fprintf(F, "%d;%s\n", (dmd->value - ? dmd->value*dmd->type->price - : -dmd->type->price), - locale_string(f->locale, resourcename(dmd->type->itype->rtype, 0))); - dmd=dmd->next; + if(rpeasants(r)/TRADE_FRACTION > 0) { + fputs("PREISE\n", F); + while (dmd) { + fprintf(F, "%d;%s\n", (dmd->value + ? dmd->value*dmd->type->price + : -dmd->type->price), + locale_string(f->locale, resourcename(dmd->type->itype->rtype, 0))); + dmd=dmd->next; + } } } } diff --git a/src/common/gamecode/economy.c b/src/common/gamecode/economy.c index bb8285695..714f74b3e 100644 --- a/src/common/gamecode/economy.c +++ b/src/common/gamecode/economy.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: economy.c,v 1.2 2001/01/26 16:19:39 enno Exp $ + * $Id: economy.c,v 1.3 2001/02/03 13:45:29 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -48,6 +48,7 @@ /* util includes */ #include <attrib.h> +#include <base36.h> #include <event.h> /* libs includes */ @@ -354,8 +355,8 @@ recruit(region * r, unit * u, strlist * S, recruitcost = race[u->faction->race].rekrutieren; pl = getplane(r); if (pl && fval(pl, PFL_NORECRUITS)) { - sprintf(buf, "%s - In der Ebene der Herausforderung kann niemand rekrutiert werden.", S->s); - addmessage(0, u->faction, buf, MSG_EVENT, ML_MISTAKE); + add_message(&u->faction->msgs, + new_message(u->faction, "error_pflnorecruit%s:command%u:unit%r:region", S->s, u, r)); return; } @@ -387,8 +388,6 @@ recruit(region * r, unit * u, strlist * S, max_skill(u->faction, SK_ALCHEMY)) { cmistake(u, S->s, 156, MSG_EVENT); -/* sprintf(buf, "Es kann maximal %d Alchemisten pro Partei geben.", - max_skill(u->faction, SK_ALCHEMY)); */ return; } n = min(n, get_pooled(u, r, R_SILVER) / recruitcost); @@ -516,7 +515,7 @@ givemen(int n, unit * u, unit * u2, strlist * S) error = 129; } else if (u->race != u2->faction->race) { if (u2->faction->race != RC_HUMAN) { - error = 121; + error = 120; } else if (count_migrants(u2->faction) + n > count_max_migrants(u2->faction)) { error = 128; } @@ -806,15 +805,6 @@ dogive(region * r, unit * u, strlist * S, boolean liefere) freset(u, FL_OWNER); fset(u2, FL_OWNER); - sprintf(buf, "%s �bergibt das Kommando ", unitname(u)); - if (u->building) - scat("der Burg"); - if (u->ship) - scat("des Schiffes"); - scat(" an "); - scat(unitname(u2)); - scat("."); - add_message(&u2->faction->msgs, new_message( u2->faction, "givecommand%u:unit%u:receipient", u, @@ -1074,6 +1064,7 @@ maintain(building * b, boolean full) if (b->type->maintenance==NULL) return true; if (is_cursed(b->attribs, C_NOCOST, 0)) { fset(b, BLD_MAINTAINED); + fset(b, BLD_WORKING); return true; } u = buildingowner(r, b); @@ -1084,6 +1075,9 @@ maintain(building * b, boolean full) if (fval(m, MTF_VARIABLE)) need = need * b->size; if (u) { + /* full ist im ersten versuch true, im zweiten aber false! Das + * bedeutet, das in der Runde in die Region geschafften Resourcen + * nicht genutzt werden k�nnen, weil die reserviert sind! */ if (full) need -= get_all(u, m->type); else need -= get_pooled(u, r, m->type); if (full && need > 0) { @@ -1189,8 +1183,8 @@ gebaeude_stuerzt_ein(region * r, building * b) } if (opfer > 0) { - scat(" "); - icat(opfer); + buf[0]=' '; + strcpy(buf+1, itoa10(opfer)); scat(" Opfer "); if (opfer == 1) { scat("ist"); @@ -1198,13 +1192,12 @@ gebaeude_stuerzt_ein(region * r, building * b) scat("sind"); } scat(" zu beklagen."); - } + } else buf[0] = 0; addmessage(r, 0, buf, MSG_EVENT, ML_IMPORTANT); - sprintf(buf, "In %s st�rzte %s ein.", regionid(r), buildingname(b)); for (f = factions; f; f = f->next) if (fval(f, FL_DH)) - addmessage(0, f, buf, MSG_EVENT, ML_IMPORTANT); - /* erst zum Schlu�, weil sonst b schon ge-free't wurde. */ + add_message(&f->msgs, + new_message(f, "buildingcrash%r:region%b:building%s:opfer", r, b, buf)); destroy_building(b); } @@ -1223,10 +1216,10 @@ maintain_buildings(boolean crash) } else { unit * u = buildingowner(r, b); if (u) { - sprintf(buf, "F�r das Geb�ude %s konnte die ganze Woche kein " - "Unterhalt bezahlt werden.", buildingname(b)); - addmessage(r, u->faction, buf, MSG_EVENT, ML_WARN); - addmessage(0, u->faction, buf, MSG_EVENT, ML_IMPORTANT); + add_message(&u->faction->msgs, + new_message(u->faction, "nomaintenance%b:building", b)); + add_message(&r->msgs, + new_message(u->faction, "nomaintenance%b:building", b)); } } } @@ -1287,8 +1280,6 @@ economics(void) if (recruitorders) expandrecruit(r, recruitorders); } - /* Unterhalt f�r Geb�ude */ - maintain_buildings(false); } /* ------------------------------------------------------------- */ diff --git a/src/common/gamecode/gamecode-6.dsp b/src/common/gamecode/gamecode-6.dsp index 5c71ce4a7..0980aa6fb 100644 --- a/src/common/gamecode/gamecode-6.dsp +++ b/src/common/gamecode/gamecode-6.dsp @@ -20,6 +20,7 @@ CFG=gamecode - Win32 Conversion !MESSAGE "gamecode - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "gamecode - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE "gamecode - Win32 Conversion" (based on "Win32 (x86) Static Library") +!MESSAGE "gamecode - Win32 Profile" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project @@ -42,7 +43,7 @@ RSC=rc.exe # PROP Intermediate_Dir "Release" # 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" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX /Z7 /O2 /I "../util" /I "../kernel" /I "../.." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe @@ -65,7 +66,7 @@ LIB32=link.exe -lib # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX"stdafx.h" /FD /c +# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /YX"stdafx.h" /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe @@ -84,12 +85,12 @@ LIB32=link.exe -lib # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 -# PROP Output_Dir "gamecode__" -# PROP Intermediate_Dir "gamecode__" +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /MDd /Za /W4 /Z7 /Od /I ".." /I "../util" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /FD /c # SUBTRACT BASE CPP /YX -# ADD CPP /nologo /MDd /Za /W4 /Z7 /Od /I ".." /I "../util" /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "CONVERT_TRIGGER" /FR /FD /c +# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 @@ -100,6 +101,29 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo +!ELSEIF "$(CFG)" == "gamecode - Win32 Profile" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "gamecode___Win32_Profile" +# PROP BASE Intermediate_Dir "gamecode___Win32_Profile" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Profile" +# PROP Intermediate_Dir "Profile" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /I "../util" /I "../kernel" /I "../.." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX- /Z7 /O2 /I "../util" /I "../kernel" /I "../.." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x407 +# ADD RSC /l 0x407 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + !ENDIF # Begin Target @@ -107,6 +131,7 @@ LIB32=link.exe -lib # Name "gamecode - Win32 Release" # Name "gamecode - Win32 Debug" # Name "gamecode - Win32 Conversion" +# Name "gamecode - Win32 Profile" # Begin Group "Header" # PROP Default_Filter "*.h" diff --git a/src/common/gamecode/laws.c b/src/common/gamecode/laws.c index a82dc19ac..c1c5615fc 100644 --- a/src/common/gamecode/laws.c +++ b/src/common/gamecode/laws.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: laws.c,v 1.6 2001/02/02 08:40:45 enno Exp $ + * $Id: laws.c,v 1.7 2001/02/03 13:45:29 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -32,14 +32,15 @@ #endif /* kernel includes */ -#include <item.h> -#include <ship.h> +#include <alchemy.h> #include <border.h> #include <faction.h> -#include <alchemy.h> +#include <item.h> +#include <magic.h> #include <message.h> -#include "skill.h" -#include "magic.h" +#include <save.h> +#include <ship.h> +#include <skill.h> #include "movement.h" #include "monster.h" #include "spy.h" @@ -72,6 +73,7 @@ #include <stdlib.h> #include <string.h> #include <assert.h> +#include <ctype.h> /* - external symbols ------------------------------------------ */ extern int dropouts[2]; @@ -822,8 +824,10 @@ static void inactivefaction(faction * f) { FILE *inactiveFILE; + char zText[128]; - inactiveFILE = fopen("inactive", "a"); + sprintf(zText, "%s/%s", datapath(), "/passwd"); + inactiveFILE = fopen(zText, "a"); fprintf(inactiveFILE, "%s:%s:%d:%d\n", factionid(f), @@ -1343,10 +1347,9 @@ deliverMail(faction * f, region * r, unit * u, const char *s, unit * receiver) strcpy(message, strcheck(s, DISPLAYSIZE)); - if (!receiver) { - sprintf(buf, "Eine Botschaft von %s aus %s: '%s'", - unitname(u), regionid(r), message); - addmessage(0, f, buf, MSG_MESSAGE, ML_IMPORTANT); + if (!receiver) { /* BOTSCHAFT an PARTEI */ + add_message(&f->msgs, + new_message(f, "unitmessage%r:region%u:unit%s:message", r, u, message)); } else { /* BOTSCHAFT an EINHEIT */ unit *emp = receiver; @@ -1616,14 +1619,33 @@ set_passw(void) break; case K_PASSWORD: - s = getstrtoken(); + { + char pbuf[32]; + int i; - if (!s[0]) { - u->faction->passw[0] = 0; - add_message(&u->faction->msgs, new_message(u->faction, - "deletepasswd")); - } else { - set_string(&u->faction->passw, s); + s = getstrtoken(); + + if (!s || !*s) { + for(i=0; i<6; i++) pbuf[i] = (char)(97 + rand() % 26); + pbuf[6] = 0; + } else { + boolean pwok = true; + char *c; + + strncpy(pbuf, s, 31); + pbuf[31] = 0; + c = pbuf; + while(*c) { + if(!isalnum(*c)) pwok = false; + c++; + } + if(pwok == false) { + cmistake(u, S->s, 283, MSG_EVENT); + for(i=0; i<6; i++) pbuf[i] = (char)(97 + rand() % 26); + pbuf[6] = 0; + } + } + set_string(&u->faction->passw, pbuf); add_message(&u->faction->msgs, new_message(u->faction, "changepasswd%s:value", gc_add(strdup(u->faction->passw)))); } @@ -1713,14 +1735,18 @@ display_item(faction *f, unit *u, const item_type * itype) { FILE *fp; char t[NAMESIZE + 1]; - char filename[256]; + char filename[MAX_PATH]; const char *name; if (u && *i_find(&u->items, itype) == NULL) return false; name = locale_string(NULL, resourcename(itype->rtype, 0)); - sprintf(filename, "showdata/%s", name); + sprintf(filename, "%s/%s/items/%s", resourcepath(), locale_name(f->locale), name); fp = fopen(filename, "r"); - if(!fp) return false; + if (!fp) { + sprintf(filename, "%s/%s/items/%s", resourcepath(), locale_name(NULL), name); + fp = fopen(filename, "r"); + if (!fp) return false; + } sprintf(buf, "%s: ", name); @@ -2213,10 +2239,11 @@ reorder(void) region * r; for (r=regions;r;r=r->next) { unit * u, ** up=&r->units; + boolean sorted=false; for (u=r->units;u;u=u->next) freset(u, FL_DH); while (*up) { u = *up; - if (!fval(u, FL_DH)) { + if (!fval(u, FL_MARK)) { strlist * o; for (o=u->orders;o;o=o->next) { if (igetkeyword(o->s)==K_SORT) { @@ -2230,7 +2257,10 @@ reorder(void) cmistake(u, o->s, 259, MSG_EVENT); } else if (fval(u, FL_OWNER)) { cmistake(u, o->s, 260, MSG_EVENT); - } else switch(p) { + } else if (v == u) { + cmistake(u, o->s, 10, MSG_EVENT); + } else { + switch(p) { case P_AFTER: *up = u->next; u->next = v->next; @@ -2247,14 +2277,17 @@ reorder(void) u->next = v; } break; + } + fset(u, FL_MARK); + sorted = true; } - fset(u, FL_DH); break; } } } if (u==*up) up=&u->next; } + if (sorted) for (u=r->units;u;u=u->next) freset(u, FL_OWNER); } } @@ -2686,7 +2719,7 @@ canheal(const unit *u) return 10; break; } - if (race[u->race].flags & NOHEAL) return 0; + if (race[u->race].flags & RCF_NOHEAL) return 0; return 10; } @@ -2701,10 +2734,10 @@ monthly_healing(void) for (u = r->units; u; u = u->next) { int umhp; - if((race[u->race].flags & NOHEAL) || fval(u, FL_HUNGER)) + if((race[u->race].flags & RCF_NOHEAL) || fval(u, FL_HUNGER)) continue; - if(rterrain(r) == T_OCEAN && !u->ship && !(race[u->race].flags & SWIM)) + if(rterrain(r) == T_OCEAN && !u->ship && !(race[u->race].flags & RCF_SWIM)) continue; umhp = unit_max_hp(u) * u->number; @@ -2895,6 +2928,9 @@ processorders (void) puts(" - Zerst�ren, Geben, Rekrutieren, Vergessen"); economics(); + puts(" - Geb�udeunterhalt (1. Versuch)"); + maintain_buildings(false); + #if MALLOCDBG assert(_CrtCheckMemory()); #endif diff --git a/src/common/gamecode/monster.c b/src/common/gamecode/monster.c index b0fae5df3..e52111572 100644 --- a/src/common/gamecode/monster.c +++ b/src/common/gamecode/monster.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: monster.c,v 1.4 2001/02/02 08:40:45 enno Exp $ + * $Id: monster.c,v 1.5 2001/02/03 13:45:30 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -810,13 +810,13 @@ monsters_kill_peasants(void) for (r = regions; r; r = r->next) { for (u = r->units; u; u = u->next) if(!fval(u, FL_MOVED)) { - if(race[u->race].flags & SCARE_PEASANTS) { + if(race[u->race].flags & RCF_SCAREPEASANTS) { scared_by_monster(u); } - if(race[u->race].flags & KILL_PEASANTS) { + if(race[u->race].flags & RCF_KILLPEASANTS) { eaten_by_monster(u); } - if(race[u->race].flags & ABSORB_PEASANTS) { + if(race[u->race].flags & RCF_ABSORBPEASANTS) { absorbed_by_monster(u); } } @@ -878,12 +878,12 @@ plan_monsters(void) /* Diese Verkettung ist krank und sollte durch eine 'vern�nftige KI' * ersetzt werden. */ - if( (race[u->race].flags & MOVE_RANDOM) + if( (race[u->race].flags & RCF_MOVERANDOM) && (rand()%100<MOVECHANCE || check_overpopulated(u))) { move_monster(r, u); } else { boolean done = false; - if((race[u->race].flags & ATTACK_RANDOM) + if((race[u->race].flags & RCF_ATTACKRANDOM) && rand()%100<MONSTERATTACK && is_moving == false) { @@ -893,7 +893,7 @@ plan_monsters(void) if(u->race == RC_SEASERPENT) { set_string(&u->thisorder, keywords[K_PIRACY]); set_string(&u->lastorder, keywords[K_PIRACY]); - } else if(race[u->race].flags & LEARN) { + } else if(race[u->race].flags & RCF_LEARN) { learn_monster(u); } } diff --git a/src/common/gamecode/randenc.c b/src/common/gamecode/randenc.c index fc92a8051..9d6c16214 100644 --- a/src/common/gamecode/randenc.c +++ b/src/common/gamecode/randenc.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: randenc.c,v 1.5 2001/02/02 08:40:45 enno Exp $ + * $Id: randenc.c,v 1.6 2001/02/03 13:45:30 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -1365,7 +1365,7 @@ randomevents(void) for (r = regions; r; r=r->next) { for (u=r->units; u; u=u->next) { - if (u->faction->no != MONSTER_FACTION && (race[u->race].flags & DESERT)) { + if (u->faction->no != MONSTER_FACTION && (race[u->race].flags & RCF_DESERT)) { if (rand()%100 < 5) { add_message(&u->faction->msgs, new_message(u->faction, "desertion%u:unit%r:region", u, r)); diff --git a/src/common/gamecode/report.c b/src/common/gamecode/report.c index eaaa70ae7..15d6ebed2 100644 --- a/src/common/gamecode/report.c +++ b/src/common/gamecode/report.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: report.c,v 1.5 2001/01/30 23:16:16 enno Exp $ + * $Id: report.c,v 1.6 2001/02/03 13:45:30 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -806,19 +806,20 @@ prices(FILE * F, region * r, faction * f) { const luxury_type *sale=NULL; struct demand * dmd; - int n = 0; + int n = 0; if (r->land==NULL || r->land->demands==NULL) return; for (dmd=r->land->demands;dmd;dmd=dmd->next) { if (dmd->value==0) sale = dmd->type; + else if (dmd->value > 0) n++; } assert(sale!=NULL); for (dmd=r->land->demands;dmd;dmd=dmd->next) if(dmd->value > 0) n++; sprintf(buf, "Auf dem Markt wird f�r %s %d Silber verlangt.", - locale_string(f->locale, resourcename(sale->itype->rtype, GR_PLURAL)), - sale->price); + locale_string(f->locale, resourcename(sale->itype->rtype, GR_PLURAL)), + sale->price); if(n > 0) scat(" Geboten wird f�r "); @@ -1285,7 +1286,7 @@ order_template(FILE * F, faction * f) rps_nowrap(F, ""); rnl(F); - sprintf(buf, "%s %s \"%s\"", parameters[P_FACTION], factionid(f), f->passw); + sprintf(buf, "%s %s \"hier_passwort_eintragen\"", parameters[P_FACTION], factionid(f)); rps_nowrap(F, buf); rnl(F); @@ -1293,8 +1294,9 @@ order_template(FILE * F, faction * f) rps_nowrap(F, ""); rnl(F); - sprintf(buf, "; ECHECK %s-w4 -r%d -v3.4", dh ? "-l " : "", - race[f->race].rekrutieren); /* -v3.4: ECheck Version 3.4.x */ + sprintf(buf, "; ECHECK %s-w4 -r%d -v%s", dh ? "-l " : "", + race[f->race].rekrutieren, ECHECK_VERSION); + /* -v3.4: ECheck Version 3.4.x */ rps_nowrap(F, buf); rnl(F); @@ -1696,6 +1698,8 @@ report(FILE *F, faction * f) if (f->age <= 2) { rnl(F); + sprintf(buf, "Dein Passwort lautet \"%s\".", f->passw); + centre(F, buf, true); sprintf(buf, "Bitte denke daran, deine Befehle mit dem Betreff" " ERESSEA BEFEHLE an eressea@eressea.amber.kn-bremen.de zu senden." " Am besten, du verwendest die Befehlsvorlage am Ende des Reports."); @@ -2566,7 +2570,7 @@ reports(void) #ifdef DMALLOC assert(dmalloc_verify ( NULL )); #endif - makedir("reports", 0700); + makedir(reportpath(), 0700); if (global.data_version<BASE36_VERSION) base36conversion(); /* �ffnet file BAT (mailit batch file) */ diff --git a/src/common/gamecode/study.c b/src/common/gamecode/study.c index 42d162b8b..5518d0a6d 100644 --- a/src/common/gamecode/study.c +++ b/src/common/gamecode/study.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: study.c,v 1.2 2001/01/26 16:19:39 enno Exp $ + * $Id: study.c,v 1.3 2001/02/03 13:45:30 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -112,7 +112,7 @@ teach(region * r, unit * u) char *s; skill_t sk; - if ((race[u->race].flags & NOTEACH)) { + if ((race[u->race].flags & RCF_NOTEACH)) { cmistake(u, u->thisorder, 274, MSG_EVENT); return; } @@ -358,7 +358,7 @@ learn(void) cmistake(u, findorder(u, u->thisorder), 77, MSG_EVENT); continue; } - if ((race[u->race].flags & NOLEARN)) { + if ((race[u->race].flags & RCF_NOLEARN)) { sprintf(buf, "%s k�nnen nichts lernen", race[u->race].name[1]); mistake(u, u->thisorder, buf, MSG_EVENT); continue; @@ -475,6 +475,8 @@ learn(void) } } + if (a==NULL) a = a_add(&u->attribs, a_new(&at_learning)); + if (money>0) { use_pooled(u, r, R_SILVER, money); add_message(&u->faction->msgs, new_message(u->faction, @@ -483,12 +485,10 @@ learn(void) } if (get_effect(u, oldpotiontype[P_WISE])) { - if (a==NULL) a = a_add(&u->attribs, a_new(&at_learning)); a->data.i += min(u->number, get_effect(u, oldpotiontype[P_WISE])) * 10; change_effect(u, oldpotiontype[P_WISE], -u->number); } if (get_effect(u, oldpotiontype[P_FOOL])) { /* Trank "Dumpfbackenbrot" */ - if (a==NULL) a = a_add(&u->attribs, a_new(&at_learning)); a->data.i -= min(u->number, get_effect(u, oldpotiontype[P_FOOL])) * 30; change_effect(u, oldpotiontype[P_FOOL], -u->number); } @@ -499,25 +499,21 @@ learn(void) || i == SK_CATAPULT || i == SK_SWORD || i == SK_SPEAR || i == SK_AUSDAUER || i == SK_WEAPONLESS) { - if (a==NULL) a = a_add(&u->attribs, a_new(&at_learning)); a->data.i += u->number * (5+warrior_skill*5); } else { - if (a==NULL) a = a_add(&u->attribs, a_new(&at_learning)); a->data.i -= u->number * (5+warrior_skill*5); a->data.i = max(0, a->data.i); } } if (p != studycost) { - /* ist_in_gebaeude(r, u, BT_UNIVERSITAET) == 1) { */ - /* p ist Kosten ohne Uni, studycost mit; wenn - * p!=studycost, ist die Einheit zwangsweise - * in einer Uni */ - if (a==NULL) a = a_add(&u->attribs, a_new(&at_learning)); + /* ist_in_gebaeude(r, u, BT_UNIVERSITAET) == 1) { */ + /* p ist Kosten ohne Uni, studycost mit; wenn + * p!=studycost, ist die Einheit zwangsweise + * in einer Uni */ a->data.i += u->number * 10; } if (is_cursed(r->attribs,C_BADLEARN,0)) { - if (a==NULL) a = a_add(&u->attribs, a_new(&at_learning)); a->data.i -= u->number * 10; } #ifdef SKILLFIX_SAVE @@ -527,7 +523,6 @@ learn(void) (int)(u->number * 30 * multi), a->data.i); } #endif - change_skill(u, (skill_t)i, (int)(u->number * 30 * multi) + (a?a->data.i:0)); if (a) { a_remove(&u->attribs, a); a = NULL; diff --git a/src/common/items/items-6.dsp b/src/common/items/items-6.dsp index ed8d8a2e0..5b0a97425 100644 --- a/src/common/items/items-6.dsp +++ b/src/common/items/items-6.dsp @@ -41,7 +41,7 @@ RSC=rc.exe # PROP Intermediate_Dir "Release" # 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" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX /Z7 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe @@ -64,7 +64,7 @@ LIB32=link.exe -lib # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX"stdafx.h" /FD /c +# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /YX"stdafx.h" /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe diff --git a/src/common/items/weapons.c b/src/common/items/weapons.c index 7967a0061..e22701cae 100644 --- a/src/common/items/weapons.c +++ b/src/common/items/weapons.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: weapons.c,v 1.2 2001/01/26 16:19:39 enno Exp $ + * $Id: weapons.c,v 1.3 2001/02/03 13:45:30 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -51,8 +51,8 @@ weapon_mod wm_halberd[] = { { 0, 0 } }; -static int -attack_firesword(const troop * at) +static boolean +attack_firesword(const troop * at, int *casualties) { fighter *fi = at->fighter; troop dt; @@ -67,7 +67,10 @@ attack_firesword(const troop * at) enemies = count_enemies(fi->side, FS_ENEMY, minrow, maxrow); - if (!enemies) return 0; + if (!enemies) { + if (casualties) *casualties = 0; + return false; /* if no enemy found, no use doing standarad attack */ + } do { dt = select_enemy(fi, minrow, maxrow); @@ -75,11 +78,12 @@ attack_firesword(const troop * at) --force; killed += terminate(dt, *at, AT_SPELL, damage, 1); } while (force && killed < enemies); - return killed; + if (casualties) *casualties = killed; + return true; } -static int -attack_catapult(const troop * at) +static boolean +attack_catapult(const troop * at, int * casualties) { fighter *af = at->fighter; unit *au = af->unit; @@ -124,7 +128,8 @@ attack_catapult(const troop * at) } } - return d; + if (casualties) *casualties = d; + return false; } enum { @@ -224,7 +229,7 @@ init_oldweapons(void) item_type * itype = olditemtype[weapontable[w].item]; int minskill = 1, wflags = WTF_NONE; weapon_mod * modifiers = NULL; - int (*attack)(const troop *) = NULL; + int (*attack)(const troop *, int * deaths) = NULL; switch (w) { case WP_RUNESWORD: diff --git a/src/common/kernel/alchemy.c b/src/common/kernel/alchemy.c index 972e99d5a..f7fe54ca9 100644 --- a/src/common/kernel/alchemy.c +++ b/src/common/kernel/alchemy.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: alchemy.c,v 1.2 2001/01/26 16:19:39 enno Exp $ + * $Id: alchemy.c,v 1.3 2001/02/03 13:45:30 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -99,7 +99,10 @@ use_potion(unit * u, const item_type * itype, const char * cmd) return ECUSTOM; } - if (ptype==oldpotiontype[P_TREES]) { + if (ptype->use) { + int nRetval = ptype->use(u, ptype, cmd); + if (nRetval) return nRetval; + } else if (ptype==oldpotiontype[P_TREES]) { region * r = u->region; int holz = new_use_pooled(u, oldresourcetype[R_WOOD], GET_SLACK|GET_RESERVE|GET_POOLED_SLACK, 10); if (holz < 10) @@ -109,28 +112,8 @@ use_potion(unit * u, const item_type * itype, const char * cmd) "growtree_effect%u:unit%i:amount", u, holz)); } else if (ptype==oldpotiontype[P_HEAL]) { return EUNUSABLE; - } else if (ptype==oldpotiontype[P_WARMTH]) { - if (u->faction->race == RC_INSECT) { - fset(u, FL_WARMTH); - cmistake(u, cmd, 164, MSG_EVENT); - } else { - /* nur f�r insekten: */ - cmistake(u, cmd, 163, MSG_EVENT); - return ECUSTOM; - } } else if (ptype==oldpotiontype[P_HEILWASSER]) { u->hp = min(unit_max_hp(u) * u->number, u->hp + 400); - } else if (ptype==oldpotiontype[P_BAUERNBLUT]) { - if (u->race == RC_DAEMON) { - attrib * a = (attrib*)a_find(u->attribs, &at_bauernblut); - if (!a) a = a_add(&u->attribs, a_new(&at_bauernblut)); - a->data.i += 100; - } else { - /* bekommt nicht: */ - cmistake(u, cmd, 165, MSG_EVENT); - u->race = RC_GHOUL; - set_faction(u, findfaction(MONSTER_FACTION)); - } } else if (ptype==oldpotiontype[P_PEOPLE]) { region * r = u->region; attrib * a = (attrib*)a_find(r->attribs, &at_peasantluck); diff --git a/src/common/kernel/battle.c b/src/common/kernel/battle.c index 65e8d147e..e2b063982 100644 --- a/src/common/kernel/battle.c +++ b/src/common/kernel/battle.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: battle.c,v 1.3 2001/02/02 08:40:45 enno Exp $ + * $Id: battle.c,v 1.4 2001/02/03 13:45:30 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -56,7 +56,7 @@ typedef enum combatmagic { #include "ship.h" #include "building.h" #ifdef GROUPS -#include "group.h" +# include "group.h" #endif /* util includes */ @@ -81,24 +81,24 @@ typedef enum combatmagic { #include <fcntl.h> #endif + #ifdef HAVE_ZLIB # include <zlib.h> -#elif defined(HAVE_BZ2LIB) +# define dbgprintf(a) gzprintf a; +gzFile bdebug; +#elif HAVE_BZ2LIB # include <bzlib.h> +# define dbgprintf(a) bz2printf a; +BZFILE *bdebug; +#else +# define dbgprintf(a) fprintf a; +FILE *bdebug; #endif /* TODO: header cleanup */ extern int dice_rand(const char *s); extern item_type it_demonseye; -#ifdef HAVE_ZLIB -gzFile bdebug; -#elif defined(HAVE_BZ2LIB) -BZFILE *bdebug; -#else -FILE *bdebug; -#endif - int obs_count = 0; boolean nobattledebug = false; @@ -167,8 +167,8 @@ fleeregion(const unit * u) return NULL; if (u->ship && - !(race[u->race].flags & SWIM) && - !(race[u->race].flags & FLY)) { + !(race[u->race].flags & RCF_SWIM) && + !(race[u->race].flags & RCF_FLY)) { return NULL; } @@ -215,48 +215,22 @@ armedmen(const unit * u) { item * itm; int n = 0; - switch (u->race) { - case RC_DWARF: - case RC_ELF: - case RC_ORC: - case RC_GOBLIN: - case RC_HUMAN: - case RC_TROLL: - case RC_DAEMON: - case RC_INSECT: - case RC_HALFLING: - case RC_CAT: - case RC_AQUARIAN: - /* alle Waffen werden gezaehlt, und dann wird auf die Anzahl - * Personen minimiert */ - - for (itm=u->items;itm;itm=itm->next) { - if (itm->type->flags & ITF_WEAPON) n += itm->number; - if (n>u->number) break; - } - break; - - case RC_ILLUSION: - - /* eigentlich unnoetig, da sie sowieso keine skills haben */ - - break; - - default: - if (race[u->race].ec_flags & CANGUARD) { - n = u->number; /* fuer untote und drachen */ + if (!urace(u)->flags & RCF_NOWEAPONS) { + if (urace(u)->ec_flags & CANGUARD) { + /* kann ohne waffen bewachen: fuer untote und drachen */ + n = u->number; } else { + /* alle Waffen werden gezaehlt, und dann wird auf die Anzahl + * Personen minimiert */ for (itm=u->items;itm;itm=itm->next) { const weapon_type * wtype = resource2weapon(itm->type->rtype); if (wtype==NULL) continue; - if (effskill(u, wtype->skill) > wtype->minskill) n += itm->number; + if (effskill(u, wtype->skill) >= wtype->minskill) n += itm->number; if (n>u->number) break; } + n = min(n, u->number); } - break; - } - n = min(n, u->number); return n; } @@ -267,14 +241,7 @@ battledebug(const char *s) printf("%s\n", translate_regions(s, NULL)); #endif if (bdebug) { -#ifdef HAVE_ZLIB - gzprintf(bdebug, "%s\n", translate_regions(s, NULL)); -#elif HAVE_BZ2LIB - bz2printf(bdebug, "%s\n", translate_regions(s, NULL)); -#else - fprintf(bdebug, "%s\n", translate_regions(s, NULL)); - fflush(bdebug); -#endif + dbgprintf((bdebug, "%s\n", translate_regions(s, NULL))); } } @@ -679,8 +646,12 @@ weapon_effskill(troop t, troop enemy, const weapon * w, boolean attacking, boole /* Burgenbonus, Pferdebonus. Der Waffenabh�ngige wird aber * nicht hier * gemacht, sondern in weapon_effskill */ if (riding(t) && (wtype==NULL || !fval(wtype, WTF_MISSILE))) { - if (tu->race == RC_TROLL) skill += 1; - else skill += 2; + skill += 2; +#ifdef BETA_CODE + skill = skillmod(urace(tu)->attribs, tu, tu->region, wtype->skill, skill, SMF_RIDING); +#else + if (tu->race == RC_TROLL) skill--; +#endif } if (t.index<tf->elvenhorses) { @@ -1776,9 +1747,13 @@ attack(battle *b, troop ta, att *a) if (getreload(ta)) { ta.fighter->person[ta.index].reload--; } else { + boolean standard_attack = true; if (wp && wp->type->attack) { - af->catmsg += wp->type->attack(&ta); - } else { + int dead; + standard_attack = wp->type->attack(&ta, &dead); + af->catmsg += dead; + } + if (standard_attack) { boolean missile = false; if (wp && fval(wp->type, WTF_MISSILE)) missile=true; if (missile) td = select_enemy(af, missile_range[0]-row, missile_range[1]-row); @@ -2812,7 +2787,7 @@ make_fighter(battle * b, unit * u, boolean attack) s1->nonblockers[fig->status + FIGHT_ROW] += u->number; } - if (race[fig->unit->race].flags & HORSE) { + if (race[fig->unit->race].flags & RCF_HORSE) { fig->horses = fig->unit->number; fig->elvenhorses = 0; } else { @@ -2925,34 +2900,24 @@ make_battle(region * r) static int max_fac_no = 0; /* need this only once */ if (!nobattledebug) { -#ifdef HAVE_ZLIB - sprintf(buf, "battles/battle-%d-%s.gz", obs_count, simplename(r)); - bdebug = gzopen(buf, "w"); -#elif HAVE_BZ2LIB - sprintf(buf, "battles/battle-%d-%s.bz2", obs_count, simplename(r)); - bdebug = BZ2_bzopen(buf, "w");+ -#else - sprintf(buf, "battles/battle-%d-%s", obs_count, simplename(r)); - bdebug = fopen(buf, "w"); -#endif + char zText[MAX_PATH]; + sprintf(zText, "%s/battles", basepath()); if (!debug) { - makedir("battles", 0700); + char zFilename[MAX_PATH]; + makedir(zText, 0700); #ifdef HAVE_ZLIB - bdebug = gzopen(buf, "w"); + sprintf(zFilename, "%s/battle-%d-%s.log.gz", zText, obs_count, simplename(r)); + bdebug = gzopen(zFilename, "w"); #elif HAVE_BZ2LIB - bdebug = BZ2_bzopen(buf, "w"); + sprintf(zFilename, "%s/battle-%d-%s.log.bz2", zText, obs_count, simplename(r)); + bdebug = BZ2_bzopen(zFilename, "w");+ #else - bdebug = fopen(buf, "w"); + sprintf(zFilename, "%s/battle-%d-%s.log", zText, obs_count, simplename(r)); + bdebug = fopen(zFilename, "w"); #endif if (!bdebug) fputs("battles k�nnen nicht debugged werden\n", stderr); else { -#ifdef HAVE_ZLIB - gzprintf(bdebug, "In %s findet ein Kampf statt:", rname(r, NULL)); -#elif HAVE_BZ2LIB - bz2printf(bdebug, "In %s findet ein Kampf statt:", region_name(r)); -#else - fprintf(bdebug, "In %s findet ein Kampf statt:", rname(r, NULL)); -#endif + dbgprintf((bdebug, "In %s findet ein Kampf statt:", rname(r, NULL))); } } obs_count++; diff --git a/src/common/kernel/build.c b/src/common/kernel/build.c index fc66ed4d7..8454ef065 100644 --- a/src/common/kernel/build.c +++ b/src/common/kernel/build.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: build.c,v 1.2 2001/01/26 16:19:39 enno Exp $ + * $Id: build.c,v 1.3 2001/02/03 13:45:31 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -452,13 +452,10 @@ build_road(region * r, unit * u, int size, direction_t d) ++golemsused; } scale_number(u,u->number - golemsused); - return; + } else { + /* Nur soviel PRODUCEEXP wie auch tatsaechlich gemacht wurde */ + change_skill(u, SK_ROAD_BUILDING, min(n, u->number) * PRODUCEEXP); } - - /* Nur soviel PRODUCEEXP wie auch tatsaechlich gemacht wurde */ - - change_skill(u, SK_ROAD_BUILDING, min(n, u->number) * PRODUCEEXP); - add_message(&u->faction->msgs, new_message( u->faction, "buildroad%r:region%u:unit%i:size", r, u, n)); } @@ -569,8 +566,7 @@ build(unit * u, const construction * ctype, int completed, int want) } if (basesk < type->minskill) { - if (made==0) return ELOWSKILL; - break; /* not good enough to go on */ + if (made==0) return ELOWSKILL; /* not good enough to go on */ } /* n = maximum buildable size */ @@ -671,7 +667,7 @@ build_building(unit * u, const building_type * btype, int want) { region * r = u->region; boolean newbuilding = false; - int built = 0; + int c, built = 0; building * b = getbuilding(r); /* einmalige Korrektur */ static FILE *statfile = NULL; @@ -717,20 +713,18 @@ build_building(unit * u, const building_type * btype, int want) /* the building is already complete */ cmistake(u, findorder(u, u->thisorder), 4, MSG_PRODUCE); return; - case ENOMATERIALS: - /* something missing from the list of materials */ - strcpy(buf, "Daf�r braucht man mindestens:"); - { - int c, n; + case ENOMATERIALS: { + /* something missing from the list of materials */ const construction * cons = btype->construction; char * ch = buf+strlen(buf); assert(cons); + strcpy(buf, "Daf�r braucht man mindestens:"); for (c=0;cons->materials[c].number; c++) { - if (c!=0) - strcat(ch++, ","); - n=cons->materials[c].number / cons->reqsize; - sprintf(ch, " %d %s", n?n:1, resname(cons->materials[c].type, cons->materials[c].number==1)); - ch = ch+strlen(ch); + int n; + if (c!=0) strcat(ch++, ","); + n = cons->materials[c].number / cons->reqsize; + sprintf(ch, " %d %s", n?n:1, resname(cons->materials[c].type, cons->materials[c].number==1)); + ch = ch+strlen(ch); } strcat(ch,"."); mistake(u, u->thisorder, buf, MSG_PRODUCE); @@ -973,7 +967,7 @@ do_leave(void) for (S = u->orders; S; S = S->next) { if(igetkeyword(S->s) == K_LEAVE) { if (r->terrain == T_OCEAN && u->ship) { - if(!(race[u->race].flags & SWIM)) { + if(!(race[u->race].flags & RCF_SWIM)) { cmistake(u, S->s, 11, MSG_MOVE); break; } @@ -1032,8 +1026,8 @@ do_misc(char try) /* Sollte momentan nicht vorkommen, da Schwimmer nicht * an Land k�nnen, und es keine Geb�ude auf See gibt. */ - if( !(race[u->race].flags & WALK) && - !(race[u->race].flags & FLY)) { + if( !(race[u->race].flags & RCF_WALK) && + !(race[u->race].flags & RCF_FLY)) { if (try) cmistake(u, S->s, 232, MSG_MOVE); S = Snext; continue; @@ -1078,8 +1072,8 @@ do_misc(char try) /* Mu� abgefangen werden, sonst k�nnten Schwimmer an * Bord von Schiffen an Land gelangen. */ - if( !(race[u->race].flags & WALK) && - !(race[u->race].flags & FLY)) { + if( !(race[u->race].flags & RCF_WALK) && + !(race[u->race].flags & RCF_FLY)) { cmistake(u, S->s, 233, MSG_MOVE); S = Snext; continue; diff --git a/src/common/kernel/building.c b/src/common/kernel/building.c index c4c09eed8..65249f0c3 100644 --- a/src/common/kernel/building.c +++ b/src/common/kernel/building.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: building.c,v 1.3 2001/01/27 18:15:32 enno Exp $ + * $Id: building.c,v 1.4 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -755,7 +755,9 @@ findbuildingtype(const char * name, const locale * lang) static int sm_smithy(const unit * u, const region * r, skill_t sk, int value) /* skillmod */ { - if (u->region == r && (sk==SK_ARMORER || sk==SK_WEAPONSMITH)) return value + 1; + if (sk==SK_WEAPONSMITH || sk==SK_ARMORER) { + if (u->region == r) return value + 1; + } return value; } @@ -769,14 +771,8 @@ mm_smithy(const unit * u, const resource_type * rtype, int value) /* material-mo void init_buildings(void) { - skillmod_data * smd; - attrib * a; - - a = a_add(&bt_smithy.attribs, a_new(&at_skillmod)); - smd = (skillmod_data *)a->data.v; - smd->special = sm_smithy; - smd->flags = SMF_PRODUCTION; - a = a_add(&bt_smithy.attribs, make_matmod(mm_smithy)); + a_add(&bt_smithy.attribs, make_skillmod(NOSKILL, SMF_PRODUCTION, sm_smithy, 0, 0)); + a_add(&bt_smithy.attribs, make_matmod(mm_smithy)); } void diff --git a/src/common/kernel/combatspells.c b/src/common/kernel/combatspells.c index dd16ce8bf..1cd143e4e 100644 --- a/src/common/kernel/combatspells.c +++ b/src/common/kernel/combatspells.c @@ -1449,7 +1449,7 @@ sp_healing(fighter * fi, int level, int force, spell * sp) break; /* Untote kann man nicht heilen */ - if (race[df->unit->race].flags & NOHEAL) + if (race[df->unit->race].flags & RCF_NOHEAL) continue; hp = unit_max_hp(df->unit); diff --git a/src/common/kernel/curse.c b/src/common/kernel/curse.c index ad6df1a36..ee52a75b7 100644 --- a/src/common/kernel/curse.c +++ b/src/common/kernel/curse.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: curse.c,v 1.3 2001/01/31 17:40:49 corwin Exp $ + * $Id: curse.c,v 1.4 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -140,9 +140,24 @@ cfindhash(int i) #include "umlaut.h" extern struct tnode cursenames; +typedef struct cursetype_list { + struct cursetype_list * next; + const curse_type * type; +} cursetype_list; + +cursetype_list * cursetypes; + void -ct_register(curse_type * ct) { - assert(0); +ct_register(const curse_type * ct) +{ + cursetype_list ** ctlp = &cursetypes; + while (*ctlp) { + cursetype_list * ctl = *ctlp; + if (ctl->type==ct) return; + ctlp=&ctl->next; + } + *ctlp = calloc(1, sizeof(cursetype_list)); + (*ctlp)->type = ct; } const curse_type * @@ -151,24 +166,18 @@ ct_find(const char *c) /* TODO: findet nur curse_types, die auch in curse_data sind. * da fehlt noch ene registrierung wie f�r attrib_type */ - int i = (int)findtoken(&cursenames, c)-1; - if (cursedaten[i].name[0] == 0) return NULL; + int i = (int)findtoken(&cursenames, c); + if (i == -1 || cursedaten[i].name[0] == 0) { + cursetype_list * ctl = cursetypes; + while (ctl) { + int k = min(strlen(c), strlen(ctl->type->name)); + if (!strncasecmp(c, ctl->type->name, k)) return ctl->type; + ctl = ctl->next; + } + } return &cursedaten[i]; } -int -find_cursebyname(const char *s) -{ - int i; - i = (int)findtoken(&cursenames, s)-1; - - if(cursedaten[i].name[0] == 0) - return -1; - - return i; -} - - /* ------------------------------------------------------------- */ boolean is_normalcurse(curse_t id) @@ -488,7 +497,7 @@ set_curse(unit *mage, attrib **ap, curse_t id, int id2, int vigour, c->no = newunitid(); chash(c); - switch (c->type->typ){ + switch (c->type->typ) { case CURSETYP_NORM: break; @@ -1264,7 +1273,7 @@ cinfo_riot(void * obj, typ_t typ, curse *c, int self) * der wohl noch etwa %s Wochen andauert. * %info, "Dieser Zauber blafalsel blub" */ -cursedata cursedaten[MAXCURSE] = +curse_type cursedaten[MAXCURSE] = { /* struct's vom typ curse: */ { /* C_FOGTRAP, */ diff --git a/src/common/kernel/curse.h b/src/common/kernel/curse.h index f55f3b265..8bb159799 100644 --- a/src/common/kernel/curse.h +++ b/src/common/kernel/curse.h @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: curse.h,v 1.3 2001/01/31 17:40:50 corwin Exp $ + * $Id: curse.h,v 1.4 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -23,7 +23,7 @@ /* ------------------------------------------------------------- */ /* Zauberwirkungen */ -/* nicht vergessen cursedata zu aktualisieren und Reihenfolge beachten! +/* nicht vergessen curse_type zu aktualisieren und Reihenfolge beachten! */ enum { @@ -131,12 +131,10 @@ enum { /* ------------------------------------------------------------- */ /* Allgemeine Zauberwirkungen */ -typedef struct cursedata curse_type; - typedef struct curse { struct curse *nexthash; int no; /* 'Einheitennummer' dieses Curse */ - curse_type * type; /* Zeiger auf ein cursedata-struct */ + struct curse_type * type; /* Zeiger auf ein curse_type-struct */ curse_t cspellid; /* Id des Cursezaubers */ int flag; /* generelle Flags wie zb CURSE_ISNEW oder CURSE_NOAGE */ int duration; /* Dauer der Verzauberung. Wird jede Runde vermindert */ @@ -179,7 +177,7 @@ typedef int (*cdesc_fun)(const void*, int, curse*, int); /* ------------------------------------------------------------- */ -typedef struct cursedata { +typedef struct curse_type { int typ; int givemenacting; int mergeflags; @@ -189,9 +187,9 @@ typedef struct cursedata { Zauberanalyse angezeigt */ int (*curseinfo)(const void*, int, curse*, int); void (*change_vigour)(curse*, int); -} cursedata; +} curse_type; -extern cursedata cursedaten[]; +extern struct curse_type cursedaten[]; extern attrib_type at_curse; extern void curse_write(const attrib * a,FILE * f); @@ -280,6 +278,7 @@ struct unit * get_cursingmagician(struct attrib *ap, curse_t id, int id2); * */ int find_cursebyname(const char *c); const curse_type * ct_find(const char *c); +void ct_register(const curse_type *); /* Regionszauber */ curse * cfindhash(int i); diff --git a/src/common/kernel/eressea.c b/src/common/kernel/eressea.c index c694388dc..7ecd05463 100644 --- a/src/common/kernel/eressea.c +++ b/src/common/kernel/eressea.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: eressea.c,v 1.6 2001/02/02 08:40:45 enno Exp $ + * $Id: eressea.c,v 1.7 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -22,6 +22,10 @@ #include <config.h> #include "eressea.h" +/* attributes includes */ +#include <attributes/reduceproduction.h> + +/* kernel includes */ #include "message.h" #include "spell.h" #include "names.h" @@ -45,9 +49,7 @@ #include "objtypes.h" #include "ship.h" #include "karma.h" -#ifdef GROUPS #include "group.h" -#endif /* util includes */ #include <base36.h> @@ -64,14 +66,12 @@ #include <limits.h> #include <time.h> -/* attributes includes */ -#include <attributes/reduceproduction.h> - /* exported variables */ -region *regions; +region *regions; faction *factions; settings global; -char buf[BUFSIZE + 1]; +char buf[BUFSIZE + 1]; +FILE *logfile; const char *directions[MAXDIRECTIONS+2] = { @@ -264,7 +264,8 @@ max_skill(faction * f, skill_t skill) return m; } -const char * g_basedir; +char * g_basedir; +char * g_resourcedir; const char * basepath(void) @@ -273,6 +274,14 @@ basepath(void) return "."; } +const char * +resourcepath(void) +{ + static char zText[MAX_PATH]; + if (g_resourcedir) return g_resourcedir; + return strcat(strcpy(zText, basepath()), "/res"); +} + int count_all_money(const region * r) { @@ -1060,11 +1069,12 @@ count_all (faction * f) int count_maxmigrants (faction * f) { + int x = 0; if (f->race == RC_HUMAN) { int x = (int)(log10(count_all(f) / 50.0) * 20); - return max(0, x); + if (x < 0) x = 0; } - return 0; + return x; } race_t @@ -2097,7 +2107,7 @@ init_used_faction_ids(void) #if defined(OLD_TRIGGER) || defined(CONVERT_TRIGGER) -# include "trigger.h" +# include <eressea/old/trigger.h> # include <resolve.h> typedef struct unresolved { struct unresolved * next; diff --git a/src/common/kernel/eressea.h b/src/common/kernel/eressea.h index bca76e6c7..141e8cee9 100644 --- a/src/common/kernel/eressea.h +++ b/src/common/kernel/eressea.h @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: eressea.h,v 1.7 2001/02/02 08:40:45 enno Exp $ + * $Id: eressea.h,v 1.8 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -138,6 +138,7 @@ typedef struct settings { extern settings global; #define RELEASE_VERSION NEWSOURCE_VERSION +#define ECHECK_VERSION "3.9" /* changes from->to: 72->73: struct unit::lock entfernt. * 73->74: struct unit::flags eingef�hrt. @@ -1126,6 +1127,7 @@ extern void add_income(struct unit * u, int type, int want, int qty); extern int month(int offset); extern const char * basepath(void); +extern const char * resourcepath(void); #define FIRST_TURN 184 diff --git a/src/common/kernel/item.c b/src/common/kernel/item.c index fb56ac86f..a4b790e3e 100644 --- a/src/common/kernel/item.c +++ b/src/common/kernel/item.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: item.c,v 1.5 2001/02/02 08:40:45 enno Exp $ + * $Id: item.c,v 1.6 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -95,24 +95,26 @@ res_changepeasants(unit * u, const resource_type * rtype, int delta) int res_changeitem(unit * u, const resource_type * rtype, int delta) { + int num; if (rtype == oldresourcetype[R_STONE] && u->race==RC_STONEGOLEM && delta<=0) { int reduce = delta / GOLEM_STONE; if (delta % GOLEM_STONE != 0) --reduce; scale_number(u, u->number+reduce); - return u->number; + num = u->number; } else if (rtype == oldresourcetype[R_IRON] && u->race==RC_IRONGOLEM && delta<=0) { int reduce = delta / GOLEM_IRON; if (delta % GOLEM_IRON != 0) --reduce; scale_number(u, u->number+reduce); - return u->number; + num = u->number; } else { const item_type * itype = resource2item(rtype); item * i; assert(itype!=NULL); i = i_change(&u->items, itype, delta); if (i==NULL) return 0; - return i->number; + num = i->number; } + return num; } const char * @@ -1123,7 +1125,6 @@ mod_elves_only(const unit * u, const region * r, skill_t sk, int value) { if (u->race==RC_ELF) return value; unused(r); - unused(sk); return -118; } @@ -1262,6 +1263,7 @@ init_olditems(void) case I_GREATBOW: a = a_add(&con->attribs, a_new(&at_skillmod)); smd = (skillmod_data*)a->data.v; + smd->skill=NOSKILL; smd->special = mod_elves_only; break; default: @@ -1680,6 +1682,40 @@ const char *potiontext[MAXPOTIONS] = "Verletzung angewandt.", }; +static int +use_warmthpotion(struct unit *u, const struct potion_type *ptype, const char *cmd) +{ + assert(ptype==oldpotiontype[P_WARMTH]); + if (u->faction->race == RC_INSECT) { + fset(u, FL_WARMTH); + cmistake(u, cmd, 164, MSG_EVENT); + } else { + /* nur f�r insekten: */ + cmistake(u, cmd, 163, MSG_EVENT); + return ECUSTOM; + } + unused(ptype); + return 0; +} + +static int +use_bloodpotion(struct unit *u, const struct potion_type *ptype, const char *cmd) +{ + assert(ptype==oldpotiontype[P_BAUERNBLUT]); + unused(ptype); + if (u->race == RC_DAEMON) { + attrib * a = (attrib*)a_find(u->attribs, &at_bauernblut); + if (!a) a = a_add(&u->attribs, a_new(&at_bauernblut)); + a->data.i += 100; + } else { + /* bekommt nicht: */ + cmistake(u, cmd, 165, MSG_EVENT); + u->race = RC_GHOUL; + set_faction(u, findfaction(MONSTER_FACTION)); + } + return 0; +} + void init_oldpotions(void) { @@ -1742,6 +1778,8 @@ init_oldpotions(void) oldpotiontype[p]->level = potionlevel[p]; oldpotiontype[p]->text = potiontext[p]; } + oldpotiontype[P_WARMTH]->use = &use_warmthpotion; + oldpotiontype[P_BAUERNBLUT]->use = &use_bloodpotion; } resource_type * r_silver; diff --git a/src/common/kernel/item.h b/src/common/kernel/item.h index 9d83bfb1f..52a90e9df 100644 --- a/src/common/kernel/item.h +++ b/src/common/kernel/item.h @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: item.h,v 1.2 2001/01/26 16:19:39 enno Exp $ + * $Id: item.h,v 1.3 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -132,6 +132,7 @@ typedef struct potion_type { const item_type * itype; int level; const char * text; + int (*use)(struct unit *, const struct potion_type *, const char *); /* --- pointers --- */ struct potion_type * next; } potion_type; @@ -178,7 +179,7 @@ typedef struct weapon_type { int reload; /* time to reload this weapon */ weapon_mod * modifiers; /* --- functions --- */ - int (*attack)(const struct troop *); + boolean (*attack)(const struct troop *, int *deaths); /* --- pointers --- */ struct weapon_type * next; } weapon_type; diff --git a/src/common/kernel/kernel-6.dsp b/src/common/kernel/kernel-6.dsp index c1e444c24..793549d03 100644 --- a/src/common/kernel/kernel-6.dsp +++ b/src/common/kernel/kernel-6.dsp @@ -4,7 +4,7 @@ # TARGTYPE "Win32 (x86) Static Library" 0x0104 -CFG=kernel - Win32 Debug +CFG=kernel - Win32 Conversion !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE @@ -13,12 +13,14 @@ CFG=kernel - Win32 Debug !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE -!MESSAGE NMAKE /f "kernel-6.mak" CFG="kernel - Win32 Debug" +!MESSAGE NMAKE /f "kernel-6.mak" CFG="kernel - Win32 Conversion" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "kernel - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "kernel - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE "kernel - Win32 Conversion" (based on "Win32 (x86) Static Library") +!MESSAGE "kernel - Win32 Profile" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project @@ -41,7 +43,7 @@ RSC=rc.exe # PROP Intermediate_Dir "Release" # 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" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX /Z7 /O2 /I "../util" /I "../.." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe @@ -64,7 +66,7 @@ LIB32=link.exe -lib # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../.." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX"stdafx.h" /FD /c +# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../.." /I ".." /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /YX"stdafx.h" /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe @@ -74,12 +76,60 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"Debug\kernel.lib" +!ELSEIF "$(CFG)" == "kernel - Win32 Conversion" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "kernel___Win32_Conversion" +# PROP BASE Intermediate_Dir "kernel___Win32_Conversion" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Conversion" +# PROP Intermediate_Dir "Conversion" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../.." /I ".." /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /YX"stdafx.h" /FD /c +# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../.." /I ".." /D "_WINDOWS" /D "BETA_CODE" /D "CONVERT_TRIGGER" /D "WIN32" /D "_DEBUG" /FR /YX"stdafx.h" /FD /c +# ADD BASE RSC /l 0x407 +# ADD RSC /l 0x407 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo /out:"Debug\kernel.lib" +# ADD LIB32 /nologo /out:"Debug\kernel.lib" + +!ELSEIF "$(CFG)" == "kernel - Win32 Profile" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "kernel___Win32_Profile" +# PROP BASE Intermediate_Dir "kernel___Win32_Profile" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Profile" +# PROP Intermediate_Dir "Profile" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /I "../util" /I "../.." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX- /Z7 /O2 /I "../util" /I "../.." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x407 +# ADD RSC /l 0x407 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + !ENDIF # Begin Target # Name "kernel - Win32 Release" # Name "kernel - Win32 Debug" +# Name "kernel - Win32 Conversion" +# Name "kernel - Win32 Profile" # Begin Group "Header" # PROP Default_Filter "*.h" diff --git a/src/common/kernel/magic.c b/src/common/kernel/magic.c index 7750d6e88..1d640d69b 100644 --- a/src/common/kernel/magic.c +++ b/src/common/kernel/magic.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: magic.c,v 1.3 2001/01/28 08:01:51 enno Exp $ + * $Id: magic.c,v 1.4 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -445,38 +445,50 @@ updatespelllist(unit * u) } /* Transformierte Wyrm-Magier bekommen Drachenodem */ - if (u->race == RC_WYRM) { - if(!getspell(u, SPL_FIREDRAGONODEM) && - find_spellbyid(SPL_FIREDRAGONODEM)->level <= max) { + if (dragon(u)){ + switch (u->race){ + /* keine breaks! Wyrme sollen alle drei Zauber k�nnen.*/ + case RC_WYRM: + { + if(!getspell(u, SPL_WYRMODEM) && + find_spellbyid(SPL_WYRMODEM)->level <= max) { - addspell(u, SPL_FIREDRAGONODEM); - if (!already_seen(u->faction, spelldaten[i].id)) { - a_add(&u->faction->attribs, - a_new(&at_reportspell))->data.i = SPL_FIREDRAGONODEM; - a_add(&u->faction->attribs, - a_new(&at_seenspell))->data.i = SPL_FIREDRAGONODEM; + addspell(u, SPL_WYRMODEM); + if (!already_seen(u->faction, spelldaten[i].id)) { + a_add(&u->faction->attribs, + a_new(&at_reportspell))->data.i = SPL_WYRMODEM; + a_add(&u->faction->attribs, + a_new(&at_seenspell))->data.i = SPL_WYRMODEM; + } + } } - } - if(!getspell(u, SPL_DRAGONODEM) && - find_spellbyid(SPL_DRAGONODEM)->level <= max) { + case RC_DRAGON: + { + if(!getspell(u, SPL_DRAGONODEM) && + find_spellbyid(SPL_DRAGONODEM)->level <= max) { - addspell(u, SPL_DRAGONODEM); - if (!already_seen(u->faction, spelldaten[i].id)) { - a_add(&u->faction->attribs, - a_new(&at_reportspell))->data.i = SPL_DRAGONODEM; - a_add(&u->faction->attribs, - a_new(&at_seenspell))->data.i = SPL_DRAGONODEM; + addspell(u, SPL_DRAGONODEM); + if (!already_seen(u->faction, spelldaten[i].id)) { + a_add(&u->faction->attribs, + a_new(&at_reportspell))->data.i = SPL_DRAGONODEM; + a_add(&u->faction->attribs, + a_new(&at_seenspell))->data.i = SPL_DRAGONODEM; + } + } } - } - if(!getspell(u, SPL_WYRMODEM) && - find_spellbyid(SPL_WYRMODEM)->level <= max) { + case RC_FIREDRAGON: + { + if(!getspell(u, SPL_FIREDRAGONODEM) && + find_spellbyid(SPL_FIREDRAGONODEM)->level <= max) { - addspell(u, SPL_WYRMODEM); - if (!already_seen(u->faction, spelldaten[i].id)) { - a_add(&u->faction->attribs, - a_new(&at_reportspell))->data.i = SPL_WYRMODEM; - a_add(&u->faction->attribs, - a_new(&at_seenspell))->data.i = SPL_WYRMODEM; + addspell(u, SPL_FIREDRAGONODEM); + if (!already_seen(u->faction, spelldaten[i].id)) { + a_add(&u->faction->attribs, + a_new(&at_reportspell))->data.i = SPL_FIREDRAGONODEM; + a_add(&u->faction->attribs, + a_new(&at_seenspell))->data.i = SPL_FIREDRAGONODEM; + } + } } } } @@ -1528,17 +1540,6 @@ verify_targets(castorder *co) if (u) { /* die Einheit wurde nun gefunden und befindet sich in der * Zielregion */ - if ((sp->sptyp & TESTRESISTANCE) - && target_resists_magic(mage, u, TYP_UNIT, 0)) - { /* Fehlermeldung */ - spobj->flag = TARGET_RESISTS; - add_message(&mage->faction->msgs, new_message(mage->faction, - "spellunitresists%u:unit%r:region%s:command%s:id", - mage, mage->region, strdup(co->order), - strdup(itoa36(spobj->data.i)))); - failed++; - break; - } /* Wenn auf Sichtbarkeit gepr�ft werden soll und die Einheit * nicht gesehen wird und auch nicht kontaktiert, dann melde @@ -1555,6 +1556,18 @@ verify_targets(castorder *co) failed++; break; } + + if ((sp->sptyp & TESTRESISTANCE) + && target_resists_magic(mage, u, TYP_UNIT, 0)) + { /* Fehlermeldung */ + spobj->flag = TARGET_RESISTS; + add_message(&mage->faction->msgs, new_message(mage->faction, + "spellunitresists%u:unit%r:region%s:command%s:id", + mage, mage->region, strdup(co->order), + strdup(itoa36(spobj->data.i)))); + failed++; + break; + } spobj->typ = SPP_UNIT; spobj->data.u = u; } else { /* Einheit nicht gefunden */ @@ -1566,6 +1579,21 @@ verify_targets(castorder *co) failed++; break; } + + /* TODO: Test auf Parteieigenschaft Magieresistsenz */ + if ((sp->sptyp & TESTRESISTANCE) + && target_resists_magic(mage, u, TYP_UNIT, 0)) + { /* Fehlermeldung */ + spobj->typ = SPP_UNIT_ID; + spobj->data.i = u->no; + spobj->flag = TARGET_RESISTS; + add_message(&mage->faction->msgs, new_message(mage->faction, + "spellunitresists%u:unit%r:region%s:command%s:id", + mage, mage->region, strdup(co->order), + strdup(itoa36(spobj->data.i)))); + failed++; + break; + } break; } case SPP_UNIT: @@ -1586,21 +1614,6 @@ verify_targets(castorder *co) break; } - /* TODO: Test auf Parteieigenschaft Magieresistsenz */ - if ((sp->sptyp & TESTRESISTANCE) - && target_resists_magic(mage, u, TYP_UNIT, 0)) - { /* Fehlermeldung */ - spobj->typ = SPP_UNIT_ID; - spobj->data.i = u->no; - spobj->flag = TARGET_RESISTS; - add_message(&mage->faction->msgs, new_message(mage->faction, - "spellunitresists%u:unit%r:region%s:command%s:id", - mage, mage->region, strdup(co->order), - strdup(itoa36(spobj->data.i)))); - failed++; - break; - } - /* Wenn auf Sichtbarkeit gepr�ft werden soll und die Einheit * nicht gesehen wird und auch nicht kontaktiert, dann melde * 'Einheit nicht gefunden' */ @@ -2426,6 +2439,7 @@ set_familiar(unit * mage, unit * familiar) attrib * a = a_add(&mage->attribs, a_new(&at_skillmod)); skillmod_data * smd = (skillmod_data *)a->data.v; smd->special = sm_familiar; + smd->skill=NOSKILL; assert(!nonplayer(mage)); } diff --git a/src/common/kernel/movement.c b/src/common/kernel/movement.c index 0e920c2b6..72d30e34d 100644 --- a/src/common/kernel/movement.c +++ b/src/common/kernel/movement.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: movement.c,v 1.3 2001/02/02 08:40:45 enno Exp $ + * $Id: movement.c,v 1.4 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -166,7 +166,7 @@ ridingcapacity(unit * u) * von zwei Pferden gezogen wird */ pferde = min(get_item(u, I_HORSE), effskill(u, SK_RIDING) * u->number * 2); - if(race[u->race].flags & HORSE) pferde += u->number; + if(race[u->race].flags & RCF_HORSE) pferde += u->number; /* maximal diese Pferde k�nnen zum Ziehen benutzt werden */ wagen = min(pferde / HORSESNEEDED, get_item(u, I_WAGON)); @@ -184,7 +184,7 @@ walkingcapacity(unit * u) * die Leute tragen */ pferde = get_item(u, I_HORSE); - if(race[u->race].flags & HORSE) { + if(race[u->race].flags & RCF_HORSE) { pferde += u->number; personen = 0; } else { @@ -277,7 +277,7 @@ canfly(unit *u) if(get_item(u, I_PEGASUS) >= u->number && effskill(u, SK_RIDING) >= 4) return true; - if(race[u->race].flags & FLY) return true; + if(race[u->race].flags & RCF_FLY) return true; return false; } @@ -292,9 +292,9 @@ canswim(unit *u) if(fspecial(u->faction, FS_AMPHIBIAN)) return true; - if(race[u->race].flags & FLY) return true; + if(race[u->race].flags & RCF_FLY) return true; - if(race[u->race].flags & SWIM) return true; + if(race[u->race].flags & RCF_SWIM) return true; return false; } @@ -310,7 +310,7 @@ canride(unit * u) maxunicorns = (skill/5) * u->number; maxpferde = skill * u->number * 2; - if(!(race[u->race].flags & HORSE) + if(!(race[u->race].flags & RCF_HORSE) && ((pferde == 0 && unicorns == 0) || pferde > maxpferde || unicorns > maxunicorns)) { return 0; @@ -321,7 +321,7 @@ canride(unit * u) #else if(ridingcapacity(u) - weight(u) >= 0) { #endif - if(pferde == 0 && unicorns >= u->number && !(race[u->race].flags & HORSE)) { + if(pferde == 0 && unicorns >= u->number && !(race[u->race].flags & RCF_HORSE)) { return 2; } return 1; @@ -1831,7 +1831,7 @@ hunt(unit *u) } else if(attacked(u)) { cmistake(u, findorder(u, u->thisorder), 52, MSG_MOVE); return false; - } else if(race[u->race].flags & CANNOT_MOVE) { + } else if(race[u->race].flags & RCF_CANNOTMOVE) { cmistake(u, findorder(u, u->thisorder), 55, MSG_MOVE); return false; } @@ -1974,7 +1974,7 @@ movement(void) cmistake(u, findorder(u, u->thisorder), 52, MSG_MOVE); set_string(&u->thisorder, ""); u = un; - } else if (race[u->race].flags & CANNOT_MOVE) { + } else if (race[u->race].flags & RCF_CANNOTMOVE) { cmistake(u, findorder(u, u->thisorder), 55, MSG_MOVE); set_string(&u->thisorder, ""); u = un; @@ -2006,7 +2006,7 @@ movement(void) if(attacked(u)) { cmistake(u, o->s, 52, MSG_MOVE); u = u2; break; - } else if(race[u->race].flags & CANNOT_MOVE) { + } else if(race[u->race].flags & RCF_CANNOTMOVE) { cmistake(u, o->s, 55, MSG_MOVE); u = u2; break; } @@ -2040,7 +2040,7 @@ movement(void) || igetkeyword(u->thisorder) == K_ROUTE)) { if (attacked(u)) { cmistake(u, findorder(u, u->thisorder), 52, MSG_PRODUCE); - } else if (race[u->race].flags & CANNOT_MOVE) { + } else if (race[u->race].flags & RCF_CANNOTMOVE) { cmistake(u, findorder(u, u->thisorder), 55, MSG_PRODUCE); } else move(r, u, true); diff --git a/src/common/kernel/race.c b/src/common/kernel/race.c index b65fa7472..8e89d7df9 100644 --- a/src/common/kernel/race.c +++ b/src/common/kernel/race.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: race.c,v 1.3 2001/01/31 17:40:50 corwin Exp $ + * $Id: race.c,v 1.4 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -22,18 +22,23 @@ #include "eressea.h" #include "race.h" -#include "item.h" -#include "spell.h" +#include <races/zombies.h> +#include <races/dragons.h> +#include <races/illusion.h> + #include "alchemy.h" -#include "faction.h" -#include "unit.h" -#include "region.h" -#include "magic.h" #include "build.h" -#include "names.h" -#include "ship.h" #include "building.h" +#include "faction.h" +#include "item.h" +#include "magic.h" +#include "region.h" +#include "spell.h" +#include "unit.h" +#include "names.h" #include "pathfinder.h" +#include "ship.h" +#include "skill.h" /* util includes */ #include <attrib.h> @@ -41,9 +46,6 @@ /* libc includes */ #include <stdio.h> #include <math.h> -#include <races/zombies.h> -#include <races/dragons.h> -#include <races/illusion.h> /* TODO: Tragkraft in die Struktur */ @@ -132,7 +134,7 @@ struct racedata race[MAXRACES] = false, /* Flags */ - WALK | LEARN | MOVE_RANDOM | ATTACK_RANDOM, + RCF_WALK | RCF_LEARN | RCF_MOVERANDOM | RCF_ATTACKRANDOM, /* Battle_flags */ BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, @@ -159,7 +161,7 @@ struct racedata race[MAXRACES] = 0, 0,-1,-1, 0, 1, 0, 0, 0, 1, 0, 0, -99 }, false, - WALK | LEARN | MOVE_RANDOM | ATTACK_RANDOM, + RCF_WALK | RCF_LEARN | RCF_MOVERANDOM | RCF_ATTACKRANDOM, BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, GIVEITEM | GIVEPERSON | GIVEUNIT | GETITEM, {RC_HOUSECAT, RC_FEY, RC_OWL, RC_NYMPH, RC_UNICORN, RC_IMP} @@ -178,7 +180,7 @@ struct racedata race[MAXRACES] = 0,-1, 1, 0, 1, 0,-2, 2, -1, 0, 1, 0, -99 }, false, - WALK | LEARN | MOVE_RANDOM | ATTACK_RANDOM, + RCF_WALK | RCF_LEARN | RCF_MOVERANDOM | RCF_ATTACKRANDOM, BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, GIVEITEM | GIVEPERSON | GIVEUNIT | GETITEM, {RC_GOBLIN, RC_WRAITH, RC_IMP, RC_RAT, RC_WARG, RC_DAEMON} @@ -197,7 +199,7 @@ struct racedata race[MAXRACES] = 0, 0, 0,-2, -2, 1,-1, 0, -1, 0, 0, 0, -99 }, false, - WALK | LEARN | MOVE_RANDOM | ATTACK_RANDOM, + RCF_WALK | RCF_LEARN | RCF_MOVERANDOM | RCF_ATTACKRANDOM, BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, GIVEITEM | GIVEPERSON | GIVEUNIT | GETITEM, {RC_RAT, RC_PSEUDODRAGON, RC_IMP, RC_RAT, RC_RAT, RC_IMP} @@ -216,7 +218,7 @@ struct racedata race[MAXRACES] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99 }, false, - WALK | LEARN | MOVE_RANDOM | ATTACK_RANDOM, + RCF_WALK | RCF_LEARN | RCF_MOVERANDOM | RCF_ATTACKRANDOM, BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, GIVEITEM | GIVEPERSON | GIVEUNIT | GETITEM, {RC_WARG, RC_DREAMCAT, RC_OWL, RC_OWL, RC_EAGLE, RC_IMP} @@ -235,7 +237,7 @@ struct racedata race[MAXRACES] = 0,-3, 2, 2, -1,-3,-1, 0, 0,-1, 1, 0, -99 }, false, - WALK | LEARN | MOVE_RANDOM | ATTACK_RANDOM, + RCF_WALK | RCF_LEARN | RCF_MOVERANDOM | RCF_ATTACKRANDOM, BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, GIVEITEM | GIVEPERSON | GIVEUNIT | GETITEM, {RC_TUNNELWORM, RC_RAT, RC_RAT, RC_EAGLE, RC_TUNNELWORM, RC_WARG} @@ -254,7 +256,7 @@ struct racedata race[MAXRACES] = 1, 0, 0, 0, -1, 1,-3, 1, -2, 1, 1, 0, -99 }, false, - WALK | LEARN | MOVE_RANDOM | ATTACK_RANDOM, + RCF_WALK | RCF_LEARN | RCF_MOVERANDOM | RCF_ATTACKRANDOM, BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, GIVEITEM | GIVEPERSON | GIVEUNIT | GETITEM, {RC_IMP, RC_IMP, RC_WRAITH, RC_RAT, RC_WARG, RC_IMP} @@ -273,7 +275,7 @@ struct racedata race[MAXRACES] = 1, 0, 0,-1, -1,-1,-2, 0, 0, 1, 0, 0, -99 }, false, - WALK | LEARN | MOVE_RANDOM | ATTACK_RANDOM, + RCF_WALK | RCF_LEARN | RCF_MOVERANDOM | RCF_ATTACKRANDOM, BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, GIVEITEM | GIVEPERSON | GIVEUNIT | GETITEM, {RC_WRAITH, RC_RAT, RC_OWL, RC_RAT, RC_TUNNELWORM, RC_IMP} @@ -292,7 +294,7 @@ struct racedata race[MAXRACES] = -1,1, 0, 1, 0, 1, 1, 0, 2, 1,-1, 0, -99 }, false, - WALK | LEARN | MOVE_RANDOM | ATTACK_RANDOM, + RCF_WALK | RCF_LEARN | RCF_MOVERANDOM | RCF_ATTACKRANDOM, BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, GIVEITEM | GIVEPERSON | GIVEUNIT | GETITEM, {RC_OWL, RC_RAT, RC_EAGLE, RC_PSEUDODRAGON, RC_EAGLE, RC_RAT} @@ -311,7 +313,7 @@ struct racedata race[MAXRACES] = 0, 2,-1,-1, 0, 1, 0, 0, 0, 2, 1, 0, -99 }, false, - WALK | LEARN | MOVE_RANDOM | ATTACK_RANDOM, + RCF_WALK | RCF_LEARN | RCF_MOVERANDOM | RCF_ATTACKRANDOM, BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, GIVEITEM | GIVEPERSON | GIVEUNIT | GETITEM, {RC_HOUSECAT, RC_DREAMCAT, RC_HOUSECAT, RC_PSEUDODRAGON, @@ -331,7 +333,7 @@ struct racedata race[MAXRACES] = 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, -99 }, false, - WALK | LEARN | MOVE_RANDOM | ATTACK_RANDOM, + RCF_WALK | RCF_LEARN | RCF_MOVERANDOM | RCF_ATTACKRANDOM, BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, GIVEITEM | GIVEPERSON | GIVEUNIT | GETITEM, {RC_OCEANTURTLE, RC_DOLPHIN, RC_OCEANTURTLE, RC_DOLPHIN, @@ -351,7 +353,7 @@ struct racedata race[MAXRACES] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, true, - (SCARE_PEASANTS|ATTACK_RANDOM|MOVE_RANDOM|WALK|NOLEARN|NOTEACH|NOHEAL), + (RCF_SCAREPEASANTS|RCF_ATTACKRANDOM|RCF_MOVERANDOM|RCF_WALK|RCF_NOLEARN|RCF_NOTEACH|RCF_NOHEAL), (BF_EQUIPMENT | BF_MAGIC_EQUIPMENT), CANGUARD, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE}, @@ -370,7 +372,7 @@ struct racedata race[MAXRACES] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - true, WALK|NOLEARN|NOTEACH, 0, 0, + true, RCF_WALK|RCF_NOLEARN|RCF_NOTEACH|RCF_NOWEAPONS, 0, 0, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE}, NULL, &age_illusion }, @@ -389,7 +391,7 @@ struct racedata race[MAXRACES] = 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, true, - KILL_PEASANTS|SCARE_PEASANTS|ATTACK_RANDOM|LEARN|FLY|WALK|NOTEACH, + RCF_KILLPEASANTS|RCF_SCAREPEASANTS|RCF_ATTACKRANDOM|RCF_LEARN|RCF_FLY|RCF_WALK|RCF_NOTEACH, BF_MAGIC_EQUIPMENT, GETITEM | HOARDMONEY | CANGUARD, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE}, @@ -410,7 +412,7 @@ struct racedata race[MAXRACES] = 0, 0, 0, 0, 8, 0, 0, 0, 0, 5, 0, 0, 0 }, true, - ( KILL_PEASANTS|SCARE_PEASANTS|ATTACK_RANDOM|LEARN|FLY|WALK|NOTEACH ), + ( RCF_KILLPEASANTS|RCF_SCAREPEASANTS|RCF_ATTACKRANDOM|RCF_LEARN|RCF_FLY|RCF_WALK|RCF_NOTEACH ), ( BF_MAGIC_EQUIPMENT ), GETITEM | HOARDMONEY | CANGUARD, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE}, @@ -431,7 +433,7 @@ struct racedata race[MAXRACES] = 0, 0, 0, 0, 12, 0, 0, 0, 0,10, 0, 0, 0 }, true, - ( KILL_PEASANTS|SCARE_PEASANTS|ATTACK_RANDOM|LEARN|FLY|WALK|NOTEACH ), + ( RCF_KILLPEASANTS|RCF_SCAREPEASANTS|RCF_ATTACKRANDOM|RCF_LEARN|RCF_FLY|RCF_WALK|RCF_NOTEACH ), ( BF_MAGIC_EQUIPMENT ), GETITEM | HOARDMONEY | CANGUARD, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE}, @@ -451,7 +453,7 @@ struct racedata race[MAXRACES] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, true, - ( SCARE_PEASANTS | MOVE_RANDOM | LEARN | WALK | NOTEACH ), + ( RCF_SCAREPEASANTS | RCF_MOVERANDOM | RCF_LEARN | RCF_WALK | RCF_NOTEACH ), ( BF_MAGIC_EQUIPMENT ), CANGUARD, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} @@ -470,7 +472,7 @@ struct racedata race[MAXRACES] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, true, - ( FLY | WALK | NOTEACH), + ( RCF_FLY | RCF_WALK | RCF_NOTEACH), 0, GIVEITEM | GIVEPERSON | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} @@ -487,7 +489,7 @@ struct racedata race[MAXRACES] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, true, - ATTACK_RANDOM|MOVE_RANDOM|LEARN|WALK|NOTEACH, + RCF_ATTACKRANDOM|RCF_MOVERANDOM|RCF_LEARN|RCF_WALK|RCF_NOTEACH, BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, GIVEITEM | GIVEPERSON | GETITEM | CANGUARD, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE}, @@ -537,7 +539,7 @@ struct racedata race[MAXRACES] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0}, true, - WALK | NOLEARN | NOTEACH, 0, + RCF_WALK | RCF_NOLEARN | RCF_NOTEACH, 0, GIVEITEM | GIVEPERSON, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, @@ -553,7 +555,7 @@ struct racedata race[MAXRACES] = {0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0}, true, - WALK | NOLEARN | NOTEACH, 0, + RCF_WALK | RCF_NOLEARN | RCF_NOTEACH, 0, GIVEITEM | GIVEPERSON, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, @@ -569,7 +571,7 @@ struct racedata race[MAXRACES] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, true, - KILL_PEASANTS|SCARE_PEASANTS|ATTACK_RANDOM|MOVE_RANDOM|LEARN|WALK|NOTEACH|DESERT, + RCF_KILLPEASANTS|RCF_SCAREPEASANTS|RCF_ATTACKRANDOM|RCF_MOVERANDOM|RCF_LEARN|RCF_WALK|RCF_NOTEACH|RCF_DESERT, BF_MAGIC_EQUIPMENT, 0, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE}, @@ -587,7 +589,7 @@ struct racedata race[MAXRACES] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, true, - KILL_PEASANTS|SCARE_PEASANTS|ATTACK_RANDOM|MOVE_RANDOM|LEARN|WALK|NOTEACH|DESERT, + RCF_KILLPEASANTS|RCF_SCAREPEASANTS|RCF_ATTACKRANDOM|RCF_MOVERANDOM|RCF_LEARN|RCF_WALK|RCF_NOTEACH|RCF_DESERT, BF_MAGIC_EQUIPMENT, 0, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE}, @@ -604,7 +606,7 @@ struct racedata race[MAXRACES] = }, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - true, CANNOT_MOVE|NOLEARN|NOTEACH, 0, + true, RCF_CANNOTMOVE|RCF_NOLEARN|RCF_NOTEACH, 0, 0, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, @@ -620,7 +622,7 @@ struct racedata race[MAXRACES] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, true, - (SEEK_TARGET|FLY|WALK|NOLEARN|NOTEACH), + (RCF_SEEKTARGET|RCF_FLY|RCF_WALK|RCF_NOLEARN|RCF_NOTEACH), 0, 0, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} @@ -639,7 +641,7 @@ struct racedata race[MAXRACES] = -10,-10,-10,-10, -10, +2,-10,-10, -10,-10,-10,-10, 0 }, true, - LEARN|ATTACK_RANDOM|CANNOT_MOVE, + RCF_LEARN|RCF_ATTACKRANDOM|RCF_CANNOTMOVE, 0, GIVEITEM | GIVEPERSON | GIVEUNIT | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} @@ -658,7 +660,7 @@ struct racedata race[MAXRACES] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, true, - ( KILL_PEASANTS|SCARE_PEASANTS|ATTACK_RANDOM|MOVE_RANDOM|LEARN|FLY|WALK|NOTEACH), + ( RCF_KILLPEASANTS|RCF_SCAREPEASANTS|RCF_ATTACKRANDOM|RCF_MOVERANDOM|RCF_LEARN|RCF_FLY|RCF_WALK|RCF_NOTEACH), ( BF_INV_NONMAGIC), CANGUARD, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} @@ -677,7 +679,7 @@ struct racedata race[MAXRACES] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, true, - CANNOT_MOVE|NOTEACH, + RCF_CANNOTMOVE|RCF_NOTEACH, ( BF_EQUIPMENT | BF_MAGIC_EQUIPMENT ), CANGUARD, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} @@ -696,7 +698,7 @@ struct racedata race[MAXRACES] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, true, - (WALK|NOTEACH), (0), GIVEPERSON, + (RCF_WALK|RCF_NOTEACH), (0), GIVEPERSON, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, @@ -718,7 +720,7 @@ struct racedata race[MAXRACES] = -99, 3,-99,-99, -99, 3,-99,-99, -99, 4,-99, 0, 0 }, true, - (WALK|NOTEACH), (0), + (RCF_WALK|RCF_NOTEACH), (0), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_TUNNELWORM */ @@ -736,7 +738,7 @@ struct racedata race[MAXRACES] = -99,-99, 50,-99, -99,-99,-99,-99, -99,-99,-99, 2, 0 }, true, - (WALK|SCARE_PEASANTS|NOTEACH), (0), + (RCF_WALK|RCF_SCAREPEASANTS|RCF_NOTEACH), (0), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_EAGLE */ @@ -754,7 +756,7 @@ struct racedata race[MAXRACES] = -99, 0,-99,-99, -99,-99,-99,-99, -99, 2,-99, 0, 0 }, true, - (WALK|FLY|NOTEACH), (0), + (RCF_WALK|RCF_FLY|RCF_NOTEACH), (0), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_RAT */ @@ -772,7 +774,7 @@ struct racedata race[MAXRACES] = -99, 5,-99,-99, -99, 4,-99,-99, -99, 2,-99, 0, 0 }, true, - (WALK|NOTEACH), (0), + (RCF_WALK|RCF_NOTEACH), (0), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_PSEUDODRAGON */ @@ -790,7 +792,7 @@ struct racedata race[MAXRACES] = -99, 0,-99,-99, -99, 0,-99,-99, -99, 0,-99, 0, 0 }, true, - (WALK|FLY|NOTEACH), (0), + (RCF_WALK|RCF_FLY|RCF_NOTEACH), (0), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_NYMPH */ @@ -808,7 +810,7 @@ struct racedata race[MAXRACES] = 0, 2,-99,-99, -2, 3, 10, -2, -2, 2,-2,-1, 0 }, true, - (WALK|NOTEACH), + (RCF_WALK|RCF_NOTEACH), (BF_EQUIPMENT|BF_MAGIC_EQUIPMENT), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} @@ -827,7 +829,7 @@ struct racedata race[MAXRACES] = -99, 0,-99,-99, 0, 4,-99,-99, -99, 5,-99, 0, 0 }, true, - (WALK|NOTEACH), (0), + (RCF_WALK|RCF_NOTEACH), (0), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_WARG */ @@ -845,7 +847,7 @@ struct racedata race[MAXRACES] = -99, 0,-99,-99, 0, 0,-99,-99, -99, 2,-99, 0, 0 }, true, - (WALK|SCARE_PEASANTS|NOTEACH), (0), + (RCF_WALK|RCF_SCAREPEASANTS|RCF_NOTEACH), (0), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_WRAITH */ @@ -863,7 +865,7 @@ struct racedata race[MAXRACES] = 0, 0,-99,-99, -99, 0,-99,-99, -99, 0,-99, 0, 0 }, true, - (WALK|FLY|SCARE_PEASANTS|NOTEACH), + (RCF_WALK|RCF_FLY|RCF_SCAREPEASANTS|RCF_NOTEACH), (BF_EQUIPMENT|BF_MAGIC_EQUIPMENT|BF_INV_NONMAGIC), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} @@ -881,7 +883,7 @@ struct racedata race[MAXRACES] = -99,-99,-99,-99, -99,-99,-99,-99, -99, 1,-99, -1, -99,-99, 0,-99, 0, 1,-99,-99, -99, 1,-99,-99, -99, 1, 1, 0, 0 }, - true, (FLY|WALK|NOTEACH), (BF_EQUIPMENT|BF_MAGIC_EQUIPMENT), + true, (RCF_FLY|RCF_WALK|RCF_NOTEACH), (BF_EQUIPMENT|BF_MAGIC_EQUIPMENT), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_DREAMCAT */ @@ -899,7 +901,7 @@ struct racedata race[MAXRACES] = 0, 1,-99,-99, -99, 1,-99,-99, -99, 1, 1, 0, 0 }, true, - (FLY|WALK|NOTEACH), (BF_INV_NONMAGIC), + (RCF_FLY|RCF_WALK|RCF_NOTEACH), (BF_INV_NONMAGIC), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_FEY */ @@ -917,7 +919,7 @@ struct racedata race[MAXRACES] = -1, 2,-99,-99, -99, 5,-99,-99, -99, 2,-99, 0, 0 }, true, - (FLY|WALK|NOTEACH), (BF_EQUIPMENT|BF_MAGIC_EQUIPMENT), + (RCF_FLY|RCF_WALK|RCF_NOTEACH), (BF_EQUIPMENT|BF_MAGIC_EQUIPMENT), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_OWL */ @@ -935,7 +937,7 @@ struct racedata race[MAXRACES] = -99, 1,-99,-99, -99, 1,-99,-99, -99, 5,-99, 0, 0 }, true, - (FLY|WALK|NOTEACH), (0), + (RCF_FLY|RCF_WALK|RCF_NOTEACH), (0), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_HELLCAT */ @@ -953,7 +955,7 @@ struct racedata race[MAXRACES] = -99, 0,-99,-99, 0, 0,-99,-99, -99, 1,-99, 0, 0 }, true, - (WALK|NOTEACH), (SCARE_PEASANTS), + (RCF_WALK|RCF_NOTEACH), (RCF_SCAREPEASANTS), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_TIGER */ @@ -971,7 +973,7 @@ struct racedata race[MAXRACES] = -99, 0,-99,-99, 0, 0,-99,-99, -99, 1,-99, 0, 0 }, true, - (WALK|NOTEACH), (0), + (RCF_WALK|RCF_NOTEACH), (0), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_DOLPHIN */ @@ -989,7 +991,7 @@ struct racedata race[MAXRACES] = -99, 0,-99,-99, 0, 0,-99,-99, -99, 1,-99, 0, 0 }, true, - (SWIM|NOTEACH), (0), + (RCF_SWIM|RCF_NOTEACH), (0), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_OCEANTURTLE */ @@ -1007,7 +1009,7 @@ struct racedata race[MAXRACES] = -99, 0,-99,-99, 0,-99,-99,-99, -99, 1,-99, 0, 0 }, true, - (SWIM|WALK|NOTEACH), (0), + (RCF_SWIM|RCF_WALK|RCF_NOTEACH), (0), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, /* RC_KRAKEN */ @@ -1025,7 +1027,7 @@ struct racedata race[MAXRACES] = -99, 0,-99,-99, 0,-99,-99,-99, -99, 1,-99, 0, 0 }, true, - (SWIM|NOTEACH), (0), + (RCF_SWIM|RCF_NOTEACH), (0), GIVEITEM | GETITEM, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} }, @@ -1049,7 +1051,7 @@ struct racedata race[MAXRACES] = 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, true, - KILL_PEASANTS|SCARE_PEASANTS|ATTACK_RANDOM|LEARN|NOTEACH|SWIM|MOVE_RANDOM, + RCF_KILLPEASANTS|RCF_SCAREPEASANTS|RCF_ATTACKRANDOM|RCF_LEARN|RCF_NOTEACH|RCF_SWIM|RCF_MOVERANDOM, (0), GETITEM | HOARDMONEY | CANGUARD, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE}, @@ -1072,7 +1074,7 @@ struct racedata race[MAXRACES] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, true, - (SCARE_PEASANTS|MOVE_RANDOM|WALK|NOLEARN|NOTEACH), + (RCF_SCAREPEASANTS|RCF_MOVERANDOM|RCF_WALK|RCF_NOLEARN|RCF_NOTEACH), (BF_NOBLOCK), 0, {NORACE,NORACE,NORACE,NORACE,NORACE,NORACE} @@ -1135,7 +1137,7 @@ struct racedata race[MAXRACES] = true, /* Flags */ - WALK | LEARN | MOVE_RANDOM | ATTACK_RANDOM | HORSE, + RCF_WALK | RCF_LEARN | RCF_MOVERANDOM | RCF_ATTACKRANDOM | RCF_HORSE, /* Battle_flags */ BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, @@ -1207,7 +1209,7 @@ struct racedata race[MAXRACES] = true, /* Flags */ - (SCARE_PEASANTS|KILL_PEASANTS|ATTACK_RANDOM|MOVE_RANDOM|WALK|NOLEARN|NOTEACH|NOHEAL), + (RCF_SCAREPEASANTS|RCF_KILLPEASANTS|RCF_ATTACKRANDOM|RCF_MOVERANDOM|RCF_WALK|RCF_NOLEARN|RCF_NOTEACH|RCF_NOHEAL), /* Battle_flags */ BF_EQUIPMENT | BF_MAGIC_EQUIPMENT | BF_RES_PIERCE | BF_RES_CUT, @@ -1285,7 +1287,7 @@ struct racedata race[MAXRACES] = true, /* Flags */ - (SCARE_PEASANTS|ABSORB_PEASANTS|ATTACK_RANDOM|MOVE_RANDOM|WALK|NOLEARN|NOTEACH|NOHEAL), + (RCF_SCAREPEASANTS|RCF_ABSORBPEASANTS|RCF_ATTACKRANDOM|RCF_MOVERANDOM|RCF_WALK|RCF_NOLEARN|RCF_NOTEACH|RCF_NOHEAL), /* Battle_flags */ BF_EQUIPMENT | BF_MAGIC_EQUIPMENT | BF_RES_PIERCE | BF_RES_CUT, @@ -1361,7 +1363,7 @@ struct racedata race[MAXRACES] = true, /* Flags */ - (SCARE_PEASANTS|KILL_PEASANTS|ATTACK_RANDOM|MOVE_RANDOM|WALK|NOLEARN|NOTEACH|NOHEAL), + (RCF_SCAREPEASANTS|RCF_KILLPEASANTS|RCF_ATTACKRANDOM|RCF_MOVERANDOM|RCF_WALK|RCF_NOLEARN|RCF_NOTEACH|RCF_NOHEAL), /* Battle_flags */ BF_EQUIPMENT|BF_MAGIC_EQUIPMENT|BF_RES_PIERCE|BF_RES_CUT, @@ -1439,7 +1441,7 @@ struct racedata race[MAXRACES] = true, /* Flags */ - (SCARE_PEASANTS|ABSORB_PEASANTS|ATTACK_RANDOM|MOVE_RANDOM|WALK|NOLEARN|NOTEACH|NOHEAL), + (RCF_SCAREPEASANTS|RCF_ABSORBPEASANTS|RCF_ATTACKRANDOM|RCF_MOVERANDOM|RCF_WALK|RCF_NOLEARN|RCF_NOTEACH|RCF_NOHEAL), /* Battle_flags */ BF_EQUIPMENT|BF_MAGIC_EQUIPMENT|BF_RES_PIERCE|BF_RES_CUT|BF_RES_BASH, @@ -1518,7 +1520,7 @@ struct racedata race[MAXRACES] = true, /* Flags */ - (SCARE_PEASANTS|ABSORB_PEASANTS|ATTACK_RANDOM|MOVE_RANDOM|WALK|NOLEARN|NOTEACH|NOHEAL), + (RCF_SCAREPEASANTS|RCF_ABSORBPEASANTS|RCF_ATTACKRANDOM|RCF_MOVERANDOM|RCF_WALK|RCF_NOLEARN|RCF_NOTEACH|RCF_NOHEAL), /* Battle_flags */ BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, @@ -1596,7 +1598,7 @@ struct racedata race[MAXRACES] = true, /* Flags */ - (SCARE_PEASANTS|ABSORB_PEASANTS|ATTACK_RANDOM|MOVE_RANDOM|WALK|NOLEARN|NOTEACH|NOHEAL), + (RCF_SCAREPEASANTS|RCF_ABSORBPEASANTS|RCF_ATTACKRANDOM|RCF_MOVERANDOM|RCF_WALK|RCF_NOLEARN|RCF_NOTEACH|RCF_NOHEAL), /* Battle_flags */ BF_EQUIPMENT | BF_MAGIC_EQUIPMENT, @@ -1674,7 +1676,7 @@ struct racedata race[MAXRACES] = true, /* Flags */ - (WALK|NOTEACH), + (RCF_WALK|RCF_NOTEACH), /* Battle_flags */ (0), @@ -1745,7 +1747,7 @@ struct racedata race[MAXRACES] = true, /* Flags */ - (WALK|NOTEACH), + (RCF_WALK|RCF_NOTEACH), /* Battle_flags */ (0), @@ -1867,6 +1869,7 @@ give_latestart_bonus(region *r, unit *u, int b) unit *u2 = createunit(r, u->faction, 1, u->race); change_skill(u2, SK_TACTICS, ((b*30)/2) * u2->number); u2->irace = u->irace; + fset(u2, FL_PARTEITARNUNG); } { @@ -1875,6 +1878,7 @@ give_latestart_bonus(region *r, unit *u, int b) change_skill(u2, SK_TAXING, 180 * u2->number); change_item(u2, I_SPEAR, u2->number); u2->irace = u->irace; + fset(u2, FL_PARTEITARNUNG); } } @@ -1911,3 +1915,11 @@ boolean is_undead(const unit *u) || u->race == RC_ZOMBIE_LORD || u->race == RC_GHOUL || u->race == RC_GHOUL_LORD; } + +extern void +init_races(void) +{ +#ifdef BETA_CODE + a_add(&race[RC_TROLL].attribs, make_skillmod(NOSKILL, SMF_RIDING, NULL, 0.0, -1)); +#endif +} diff --git a/src/common/kernel/race.h b/src/common/kernel/race.h index a34dc2aa5..5a7239291 100644 --- a/src/common/kernel/race.h +++ b/src/common/kernel/race.h @@ -45,8 +45,7 @@ typedef struct att { int flags; } att; -typedef struct racedata racedata; -struct racedata { +typedef struct race_type { const char *name[4]; /* neu: name[4]v�lker */ double magres; double maxaura; /* Faktor auf Maximale Aura */ @@ -73,27 +72,30 @@ struct racedata { const char *(*generate_name) (const struct unit *); void (*age_function)(struct unit *u); boolean (*move_allowed)(struct region *, struct region *); -}; + struct attrib * attribs; +} racetype; + +#define racedata race_type /* Flags */ -#define KILL_PEASANTS (1<<0) /* T�ten Bauern. D�monen werden nicht �ber - dieses Flag, sondern in randenc() behandelt. */ -#define SCARE_PEASANTS (1<<1) -#define ATTACK_RANDOM (1<<2) -#define MOVE_RANDOM (1<<3) -#define CANNOT_MOVE (1<<4) -#define SEEK_TARGET (1<<5) /* sucht ein bestimmtes Opfer */ -#define LEARN (1<<6) /* Lernt automatisch wenn struct faction == 0 */ -#define FLY (1<<7) /* kann fliegen */ -#define SWIM (1<<8) /* kann schwimmen */ -#define WALK (1<<9) /* kann �ber Land gehen */ -#define NOLEARN (1<<10) /* kann nicht normal lernen */ -#define NOTEACH (1<<11) /* kann nicht lehren */ -#define HORSE (1<<12) /* Einheit ist Pferd, sozusagen */ -#define DESERT (1<<13) /* 5% Chance, das Einheit desertiert */ -#define DRAGON_LIMIT (1<<14) /* Kann nicht aus Gletscher in Ozean */ -#define ABSORB_PEASANTS (1<<15) /* T�tet und absorbiert Bauern */ -#define NOHEAL (1<<16) /* Einheit kann nicht geheilt werden */ +#define RCF_KILLPEASANTS (1<<0) /* T�ten Bauern. D�monen werden nicht �ber dieses Flag, sondern in randenc() behandelt. */ +#define RCF_SCAREPEASANTS (1<<1) +#define RCF_ATTACKRANDOM (1<<2) +#define RCF_MOVERANDOM (1<<3) +#define RCF_CANNOTMOVE (1<<4) +#define RCF_SEEKTARGET (1<<5) /* sucht ein bestimmtes Opfer */ +#define RCF_LEARN (1<<6) /* Lernt automatisch wenn struct faction == 0 */ +#define RCF_FLY (1<<7) /* kann fliegen */ +#define RCF_SWIM (1<<8) /* kann schwimmen */ +#define RCF_WALK (1<<9) /* kann �ber Land gehen */ +#define RCF_NOLEARN (1<<10) /* kann nicht normal lernen */ +#define RCF_NOTEACH (1<<11) /* kann nicht lehren */ +#define RCF_HORSE (1<<12) /* Einheit ist Pferd, sozusagen */ +#define RCF_DESERT (1<<13) /* 5% Chance, das Einheit desertiert */ +#define RCF_DRAGONLIMIT (1<<14) /* Kann nicht aus Gletscher in Ozean */ +#define RCF_ABSORBPEASANTS (1<<15) /* T�tet und absorbiert Bauern */ +#define RCF_NOHEAL (1<<16) /* Einheit kann nicht geheilt werden */ +#define RCF_NOWEAPONS (1<<17) /* Einheit kann keine Waffen bneutzen */ /* Economic flags */ #define NOGIVE (1<<0) /* gibt niemals nix */ @@ -139,4 +141,6 @@ boolean is_undead(const struct unit *u); extern boolean allowed_dragon(const struct region * src, const struct region * target); +extern void init_races(void); + #endif diff --git a/src/common/kernel/region.c b/src/common/kernel/region.c index b5ea7c7f2..07266e4f4 100644 --- a/src/common/kernel/region.c +++ b/src/common/kernel/region.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: region.c,v 1.5 2001/02/02 08:40:46 enno Exp $ + * $Id: region.c,v 1.6 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -42,6 +42,8 @@ #include <stdlib.h> #include <string.h> +static int g_maxluxuries; + const int delta_x[MAXDIRECTIONS] = { -1, 0, 1, 1, 0, -1 @@ -654,7 +656,13 @@ new_region(int x, int y) } void -freeland(land_region * lr) { +freeland(land_region * lr) +{ + while (lr->demands) { + struct demand * d = lr->demands; + lr->demands = d->next; + free(d); + } if (lr->name) free(lr->name); free(lr); } @@ -700,6 +708,21 @@ makename(void) name[0] = (char) toupper(name[0]); return name; } + +void +setluxuries(region * r, const luxury_type * sale) +{ + const luxury_type * ltype; + assert(r->land); + for (ltype=luxurytypes; ltype; ltype=ltype->next) { + struct demand * dmd = calloc(sizeof(struct demand), 1); + dmd->type = ltype; + if (ltype!=sale) dmd->value = 1 + rand() % 5; + dmd->next = r->land->demands; + r->land->demands = dmd; + } +} + void terraform(region * r, terrain_t t) { @@ -725,8 +748,62 @@ terraform(region * r, terrain_t t) } if (!r->land) { + static struct surround { + struct surround * next; + const luxury_type * type; + int value; + } *trash =NULL, *nb = NULL; + const luxury_type * ltype; + direction_t d; + int mnr = 0; + r->land = calloc(1, sizeof(land_region)); rsetname(r, makename()); + for (d=0;d!=MAXDIRECTIONS;++d) { + region * nr = rconnect(r, d); + if (nr && nr->land) { + struct demand * sale = r->land->demands; + while (sale && sale->value!=0) sale=sale->next; + if (sale) { + struct surround * sr = nb; + while (sr && sr->type!=sale->type) sr=sr->next; + if (!sr) { + if (trash) { + sr = trash; + trash = trash->next; + } else { + sr = calloc(1, sizeof(struct surround)); + } + sr->next = nb; + sr->type = sale->type; + sr->value = 1; + nb = sr; + } else sr->value++; + ++mnr; + } + } + } + if (!nb) { + int i; + if (g_maxluxuries==0) { + for (ltype = luxurytypes;ltype;ltype=ltype->next) ++g_maxluxuries; + } + i = rand() % g_maxluxuries; + ltype = luxurytypes; + while (i--) ltype=ltype->next; + } else { + int i = rand() % mnr; + struct surround * srd = nb; + while (i>srd->value) { + i-=srd->value; + srd=srd->next; + } + setluxuries(r, srd->type); + while (srd->next!=NULL) srd=srd->next; + srd->next=trash; + trash = nb; + nb = NULL; + } } if (landregion(t)) { diff --git a/src/common/kernel/region.h b/src/common/kernel/region.h index a9e4e3c91..b96302bd1 100644 --- a/src/common/kernel/region.h +++ b/src/common/kernel/region.h @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: region.h,v 1.2 2001/01/26 16:19:40 enno Exp $ + * $Id: region.h,v 1.3 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -132,6 +132,8 @@ void woodcounts(struct region * r, int delta); void deathcounts(struct region * r, int delta); void chaoscounts(struct region * r, int delta); +void setluxuries(struct region * r, const struct luxury_type * sale); + int rlaen(const struct region * r); void rsetlaen(struct region * r, int value); diff --git a/src/common/kernel/save.c b/src/common/kernel/save.c index 7caa5aa98..2d4064835 100644 --- a/src/common/kernel/save.c +++ b/src/common/kernel/save.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: save.c,v 1.7 2001/02/02 08:40:46 enno Exp $ + * $Id: save.c,v 1.8 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -66,7 +66,7 @@ #include <assert.h> #if defined(OLD_TRIGGER) || defined(CONVERT_TRIGGER) -# include "trigger.h" +# include <eressea/old/trigger.h> extern void resolve2(void); #endif @@ -606,12 +606,6 @@ is_persistent(const char *s) return false; } -#if _MSC_VER -#define PATH_MAX _MAX_PATH -#elif !defined(PATH_MAX) -#define PATH_MAX 2048 -#endif - #if USE_EVENTS void print_hunger(void * data) @@ -625,8 +619,8 @@ void create_backup(char *file) { #if defined(HAVE_ACCESS) - char bfile[PATH_MAX]; - char command[PATH_MAX*2+10]; + char bfile[MAX_PATH]; + char command[MAX_PATH*2+10]; int c = 1; do { sprintf(bfile, "%s.backup%d", file, c); @@ -640,7 +634,7 @@ create_backup(char *file) const char * datapath(void) { - static char zText[PATH_MAX]; + static char zText[MAX_PATH]; if (g_datadir) return g_datadir; return strcat(strcpy(zText, basepath()), "/data"); } @@ -2105,7 +2099,6 @@ attrib_init(void) /* Alle speicherbaren Attribute m�ssen hier registriert werden */ at_register(&at_unitdissolve); - at_register(&at_key); at_register(&at_traveldir_new); at_register(&at_familiar); at_register(&at_familiarmage); @@ -2203,14 +2196,17 @@ void read_strings(FILE * F); void read_messages(FILE * F); const char * messages[] = { - "res/messages.de", - "res/messages.en", + "%s/%s/messages.txt", NULL }; const char * strings[] = { - "res/strings.de", - "res/strings.en", + "%s/%s/strings.txt", + NULL +}; + +const char * locales[] = { + "de", "en", NULL }; @@ -2218,29 +2214,31 @@ void init_locales(void) { FILE * F; - int i; - for (i=0;strings[i];++i) { - char zText[PATH_MAX]; - strcat(strcat(strcpy(zText, basepath()), "/"), strings[i]); - F = fopen(zText, "r+"); - if (F) { - read_strings(F); - fclose(F); - } else { - sprintf(buf, "fopen(%s): ", zText); - perror(buf); + int l; + for (l=0;locales[l];++l) { + char zText[MAX_PATH]; + int i; + for (i=0;strings[i];++i) { + sprintf(zText, strings[i], resourcepath(), locales[l]); + F = fopen(zText, "r+"); + if (F) { + read_strings(F); + fclose(F); + } else { + sprintf(buf, "fopen(%s): ", zText); + perror(buf); + } } - } - for (i=0;messages[i];++i) { - char zText[PATH_MAX]; - strcat(strcat(strcpy(zText, basepath()), "/"), messages[i]); - F = fopen(zText, "r+"); - if (F) { - read_messages(F); - fclose(F); - } else { - sprintf(buf, "fopen(%s): ", zText); - perror(buf); + for (i=0;messages[i];++i) { + sprintf(zText, messages[i], resourcepath(), locales[l]); + F = fopen(zText, "r+"); + if (F) { + read_messages(F); + fclose(F); + } else { + sprintf(buf, "fopen(%s): ", zText); + perror(buf); + } } } } diff --git a/src/common/kernel/skill.c b/src/common/kernel/skill.c index d42dc7f4d..f00fa2f3b 100644 --- a/src/common/kernel/skill.c +++ b/src/common/kernel/skill.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: skill.c,v 1.2 2001/01/26 16:19:40 enno Exp $ + * $Id: skill.c,v 1.3 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -93,17 +93,33 @@ attrib_type at_skillmod = { skillmods * modhash[MAXRACES]; +attrib * +make_skillmod(skill_t skill, unsigned int flags, int(*special)(const struct unit*, const struct region*, skill_t, int), double multiplier, int bonus) +{ + attrib * a = a_new(&at_skillmod); + skillmod_data * smd = (skillmod_data*)a->data.v; + + smd->skill=skill; + smd->special=special; + smd->bonus=bonus; + smd->multiplier=multiplier; + smd->flags=flags; + + return a; +} + int skillmod(const attrib * a, const unit * u, const region * r, skill_t sk, int value, int flags) { for (a = a_find((attrib*)a, &at_skillmod); a; a=a->nexttype) { skillmod_data * smd = (skillmod_data *)a->data.v; + if (smd->skill!=NOSKILL && smd->skill!=sk) continue; if (flags!=SMF_ALWAYS && (smd->flags & flags) == 0) continue; if (smd->special) { value = smd->special(u, r, sk, value); if (value<0) return value; /* pass errors back to caller */ } - if (smd->multiplier) value *= smd->multiplier; + if (smd->multiplier) value = (int)(value*smd->multiplier); value += smd->bonus; } return value; diff --git a/src/common/kernel/skill.h b/src/common/kernel/skill.h index 7171db0f4..6945defb8 100644 --- a/src/common/kernel/skill.h +++ b/src/common/kernel/skill.h @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: skill.h,v 1.2 2001/01/26 16:19:40 enno Exp $ + * $Id: skill.h,v 1.3 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -30,12 +30,14 @@ char eff_skill(const struct unit * u, skill_t sk, const struct region * r); int pure_skill(struct unit * u, skill_t sk, struct region * r); /* skillmod_data::flags -- wann gilt der modifier? */ -#define SMF_ALWAYS 0x01 /* immer */ -#define SMF_PRODUCTION 0x02 /* f�r Produktion */ +#define SMF_ALWAYS (1<<0) /* immer */ +#define SMF_PRODUCTION (1<<1) /* f�r Produktion - am geb�ude, an der einheit */ +#define SMF_RIDING (1<<2) /* Bonus f�r berittene - an der rasse*/ typedef struct skillmod_data { + skill_t skill; int (*special)(const struct unit * u, const struct region * r, skill_t skill, int value); - int multiplier; + double multiplier; int bonus; int flags; } skillmod_data; @@ -43,6 +45,7 @@ extern attrib_type at_skillmod; extern int skillmod(const attrib * a, const struct unit * u, const struct region * r, skill_t sk, int value, int flags); extern void skill_init(void); extern void skill_done(void); +extern struct attrib * make_skillmod(skill_t skill, unsigned int flags, int(*special)(const struct unit*, const struct region*, skill_t, int), double multiplier, int bonus); int level_days(int level); void remove_zero_skills(void); diff --git a/src/common/kernel/spell.c b/src/common/kernel/spell.c index aadcd1f47..c2205c384 100644 --- a/src/common/kernel/spell.c +++ b/src/common/kernel/spell.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: spell.c,v 1.6 2001/02/02 08:40:46 enno Exp $ + * $Id: spell.c,v 1.7 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -670,7 +670,7 @@ sp_summon_familiar(castorder *co) } rc = select_familiar(mage->faction->race, mage->faction->magiegebiet); - if(race[rc].flags & SWIM && !(race[rc].flags & WALK)) { + if(race[rc].flags & RCF_SWIM && !(race[rc].flags & RCF_WALK)) { int coasts; if((coasts = is_coastregion(r)) == 0) { @@ -2964,15 +2964,7 @@ sp_firewall(castorder *co) return cast_level; } -#endif - -#if USE_FIREWALL /* ------------------------------------------------------------- */ -/* 1. Das ist Illaun und sollte dann auch dort stehen - * 2. Beschreibung fehlt - * - * LEUTE, SO GEHT DAS NICHT! - */ static const char * wisps_name(const border * b, const region * r, const faction * f, int gflags) @@ -6558,9 +6550,8 @@ sp_q_antimagie(castorder *co) obj = pa->param[0]->typ; ctype = NULL; - if(pa->length == 2){ - ctype = ct_find(pa->param[2]->data.s); - } + if(pa->length == 2) + ctype = ct_find(pa->param[1]->data.s); switch(obj){ case SPP_REGION: @@ -8568,7 +8559,7 @@ spell spelldaten[] = (spell_f)sp_denyattack, patzer }, - {SPL_CERDDOR_EARN_SILVER, "Gaukelleien", + {SPL_CERDDOR_EARN_SILVER, "Gaukeleien", "Cerddormagier sind _die_ Gaukler unter den Magiern, sie lieben es das " "Volk zu unterhalten und im Mittelpunkt zu stehen. Schon Anf�nger lernen " "die kleinen Kunstst�cke und magischen Tricks, mit denen man das Volk " @@ -9589,7 +9580,7 @@ spell spelldaten[] = (SPELLLEVEL | BUILDINGSPELL | ONETARGET | TESTRESISTANCE), 5, 7, { - {R_AURA, 50, SPC_LEVEL}, + {R_AURA, 50, SPC_FIX}, {R_PERMAURA, 1, SPC_FIX}, {0, 0, 0}, {0, 0, 0}, diff --git a/src/common/kernel/unit.c b/src/common/kernel/unit.c index bbd75c278..66be961aa 100644 --- a/src/common/kernel/unit.c +++ b/src/common/kernel/unit.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: unit.c,v 1.3 2001/01/31 17:40:51 corwin Exp $ + * $Id: unit.c,v 1.4 2001/02/03 13:45:32 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -609,15 +609,21 @@ leave(struct region * r, unit * u) unused(r); } +const struct race_type * +urace(const struct unit * u) +{ + return &race[u->race]; +} + boolean can_survive(const unit *u, const region *r) { if (((terrain[rterrain(r)].flags & WALK_INTO) - && (race[u->race].flags & WALK)) || + && (race[u->race].flags & RCF_WALK)) || ((terrain[rterrain(r)].flags & SWIM_INTO) - && (race[u->race].flags & SWIM)) || + && (race[u->race].flags & RCF_SWIM)) || ((terrain[rterrain(r)].flags & FLY_INTO) - && (race[u->race].flags & FLY))) { + && (race[u->race].flags & RCF_FLY))) { if (get_item(u, I_HORSE) && !(terrain[rterrain(r)].flags & WALK_INTO)) return false; diff --git a/src/common/kernel/unit.h b/src/common/kernel/unit.h index cbf392071..305754507 100644 --- a/src/common/kernel/unit.h +++ b/src/common/kernel/unit.h @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: unit.h,v 1.2 2001/01/26 16:19:40 enno Exp $ + * $Id: unit.h,v 1.3 2001/02/03 13:45:33 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -138,6 +138,8 @@ void usettarget(struct unit * u, const struct unit * b); struct unit * utarget(const struct unit * u); void usettarget(struct unit * u, const struct unit * b); +extern const struct race_type * urace(const struct unit * u); + const char* uprivate(const struct unit * u); void usetprivate(struct unit * u, const char * c); diff --git a/src/common/modules/modules-6.dsp b/src/common/modules/modules-6.dsp index 26dd83d5e..72282fcae 100644 --- a/src/common/modules/modules-6.dsp +++ b/src/common/modules/modules-6.dsp @@ -41,7 +41,7 @@ RSC=rc.exe # PROP Intermediate_Dir "Release" # 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" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX /Z7 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe @@ -64,7 +64,7 @@ LIB32=link.exe -lib # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX"stdafx.h" /FD /c +# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /YX"stdafx.h" /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe diff --git a/src/common/modules/oceannames.c b/src/common/modules/oceannames.c index ae426bd33..9611348cd 100644 --- a/src/common/modules/oceannames.c +++ b/src/common/modules/oceannames.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: oceannames.c,v 1.1 2001/01/27 11:32:32 enno Exp $ + * $Id: oceannames.c,v 1.2 2001/02/03 13:45:33 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -84,7 +84,7 @@ nameocean(struct region *r, struct faction * f, const char * newname) if (!a && newname) a = a_add(&r->attribs, a_new(&at_oceanname)); if (a) { faction_list **oldf = NULL, **newf = NULL; - faction_list * fl; + faction_list * fl = NULL; name * names = (name*)a->data.v; while (names && (!newf && newname) || !oldf) { faction_list ** fli = &names->factions; diff --git a/src/common/races/races-6.dsp b/src/common/races/races-6.dsp index 29f56efde..c9e119c0a 100644 --- a/src/common/races/races-6.dsp +++ b/src/common/races/races-6.dsp @@ -41,7 +41,7 @@ RSC=rc.exe # PROP Intermediate_Dir "Release" # 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" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX /Z7 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe @@ -64,7 +64,7 @@ LIB32=link.exe -lib # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX"stdafx.h" /FD /c +# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /YX"stdafx.h" /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe diff --git a/src/common/spells/spells-6.dsp b/src/common/spells/spells-6.dsp index 731a7ca0d..38234d67a 100644 --- a/src/common/spells/spells-6.dsp +++ b/src/common/spells/spells-6.dsp @@ -41,7 +41,7 @@ RSC=rc.exe # PROP Intermediate_Dir "Release" # 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" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX /Z7 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe @@ -64,7 +64,7 @@ LIB32=link.exe -lib # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX"stdafx.h" /FD /c +# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /YX"stdafx.h" /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe diff --git a/src/common/spells/spells.c b/src/common/spells/spells.c index 0546ab225..4ddfda1d3 100644 --- a/src/common/spells/spells.c +++ b/src/common/spells/spells.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: spells.c,v 1.2 2001/01/26 16:19:41 enno Exp $ + * $Id: spells.c,v 1.3 2001/02/03 13:45:33 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -13,13 +13,23 @@ */ #include <config.h> +#include <eressea.h> #include "spells.h" #include "alp.h" +/* +#include "firewall.h" +*/ +struct curse_type; +extern const struct curse_type ct_firewall; +extern void ct_register(const struct curse_type * ct); + void init_spells(void) { /* sp_summon_alp */ init_alp(); + /* init_firewall(); */ + ct_register(&ct_firewall); } diff --git a/src/common/triggers/triggers-6.dsp b/src/common/triggers/triggers-6.dsp index deb4ac0bc..c992bf710 100644 --- a/src/common/triggers/triggers-6.dsp +++ b/src/common/triggers/triggers-6.dsp @@ -41,7 +41,7 @@ RSC=rc.exe # PROP Intermediate_Dir "Release" # 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" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX /Z7 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe @@ -64,7 +64,7 @@ LIB32=link.exe -lib # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX"stdafx.h" /FD /c +# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../util" /I "../kernel" /I "../.." /I ".." /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /YX"stdafx.h" /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe diff --git a/src/common/triggers/triggers.c b/src/common/triggers/triggers.c index c9a9554d6..5b8d0493f 100644 --- a/src/common/triggers/triggers.c +++ b/src/common/triggers/triggers.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: triggers.c,v 1.2 2001/01/26 16:19:41 enno Exp $ + * $Id: triggers.c,v 1.3 2001/02/03 13:45:33 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -43,7 +43,7 @@ #include <stdio.h> void -register_triggers(void) +init_triggers(void) { fprintf(stdout, "- registering triggers\n"); tt_register(&tt_changefaction); diff --git a/src/common/triggers/triggers.h b/src/common/triggers/triggers.h index fb4a4a137..a24ae0e1b 100644 --- a/src/common/triggers/triggers.h +++ b/src/common/triggers/triggers.h @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: triggers.h,v 1.2 2001/01/26 16:19:41 enno Exp $ + * $Id: triggers.h,v 1.3 2001/02/03 13:45:33 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -12,4 +12,4 @@ * prior permission by the authors of Eressea. */ -void register_triggers(void); +void init_triggers(void); diff --git a/src/common/util/event.c b/src/common/util/event.c index ab4ab11be..d1538a4c4 100644 --- a/src/common/util/event.c +++ b/src/common/util/event.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: event.c,v 1.2 2001/01/26 16:19:41 enno Exp $ + * $Id: event.c,v 1.3 2001/02/03 13:45:33 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -195,7 +195,8 @@ t_add(trigger ** tlist, trigger * t) static trigger_type * triggertypes; void -tt_register(trigger_type * tt) { +tt_register(trigger_type * tt) +{ tt->next = triggertypes; triggertypes = tt; } diff --git a/src/common/util/util-6.dsp b/src/common/util/util-6.dsp index 5a60d8160..6b5e2c985 100644 --- a/src/common/util/util-6.dsp +++ b/src/common/util/util-6.dsp @@ -4,7 +4,7 @@ # TARGTYPE "Win32 (x86) Static Library" 0x0104 -CFG=util - Win32 Debug +CFG=util - Win32 Conversion !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE @@ -13,12 +13,14 @@ CFG=util - Win32 Debug !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE -!MESSAGE NMAKE /f "util-6.mak" CFG="util - Win32 Debug" +!MESSAGE NMAKE /f "util-6.mak" CFG="util - Win32 Conversion" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "util - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "util - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE "util - Win32 Conversion" (based on "Win32 (x86) Static Library") +!MESSAGE "util - Win32 Profile" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project @@ -41,7 +43,7 @@ RSC=rc.exe # PROP Intermediate_Dir "Release" # 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" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX /Z7 /O2 /I "../.." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe @@ -64,7 +66,7 @@ LIB32=link.exe -lib # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../.." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX"stdafx.h" /FD /c +# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../.." /I ".." /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /YX"stdafx.h" /FD /c # ADD BASE RSC /l 0x407 # ADD RSC /l 0x407 BSC32=bscmake.exe @@ -74,12 +76,60 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"Debug\util.lib" +!ELSEIF "$(CFG)" == "util - Win32 Conversion" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "util___Win32_Conversion" +# PROP BASE Intermediate_Dir "util___Win32_Conversion" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /Za /W4 /Z7 /Od /I "../.." /I ".." /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /YX"stdafx.h" /FD /c +# ADD CPP /nologo /Za /W4 /Z7 /Od /I "../.." /I ".." /D "_WINDOWS" /D "BETA_CODE" /D "WIN32" /D "_DEBUG" /FR /YX"stdafx.h" /FD /c +# ADD BASE RSC /l 0x407 +# ADD RSC /l 0x407 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo /out:"Debug\util.lib" +# ADD LIB32 /nologo /out:"Debug\util.lib" + +!ELSEIF "$(CFG)" == "util - Win32 Profile" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "util___Win32_Profile" +# PROP BASE Intermediate_Dir "util___Win32_Profile" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Profile" +# PROP Intermediate_Dir "Profile" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /I "../.." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX- /Z7 /O2 /I "../.." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE RSC /l 0x407 +# ADD RSC /l 0x407 +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo + !ENDIF # Begin Target # Name "util - Win32 Release" # Name "util - Win32 Debug" +# Name "util - Win32 Conversion" +# Name "util - Win32 Profile" # Begin Group "Header" # PROP Default_Filter "*.h" diff --git a/src/config.h b/src/config.h index 37e40f229..a15ecfd3a 100644 --- a/src/config.h +++ b/src/config.h @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: config.h,v 1.3 2001/01/28 08:50:45 enno Exp $ + * $Id: config.h,v 1.4 2001/02/03 13:45:27 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -73,11 +73,6 @@ typedef int boolean; ** Architecture Dependent ** **** ****/ -#if 0 -/* E: ?? F�r welche Architektur? Bitte ein ifdef */ -# include <math.h> /* wegen __P() redefinition */ -#endif - /* f�r solaris: */ #ifdef SOLARIS # define _SYS_PROCSET_H @@ -109,13 +104,8 @@ typedef int boolean; # define __EXTENSIONS__ #endif -#if 0 -/* E: f�r welche Architektur? Bitte ein #ifdef */ -# include <string.h> -#endif - #ifdef WIN32 -# include <util/windir.h> +# include <common/util/windir.h> # define HAVE_READDIR #endif @@ -212,10 +202,14 @@ _CRTIMP int __cdecl _mkdir(const char *); extern char * strdup(const char *s); #endif -#ifdef WIN32 -# define MAX_PATH _MAX_PATH -#elif !defined(MAX_PATH) -# define MAX_PATH 1024 +#if !defined(MAX_PATH) +# ifdef WIN32 +# define MAX_PATH _MAX_PATH +# elif defined(PATH_MAX) +# define MAX_PATH PATH_MAX +# else +# define MAX_PATH 1024 +# endif #endif /**** **** diff --git a/src/doc/coding.txt b/src/doc/coding.txt index efbc88e23..6838f8851 100644 --- a/src/doc/coding.txt +++ b/src/doc/coding.txt @@ -1,8 +1,24 @@ +Was ist das hier? +Dieses File ist eine Sammlung von kleinen Artikeln zum Code - Designgedanken, haupts�chlich, keine Anleitungen. + - Die Variable buf wird an zu vielen Stellen im Source benutzt. K�nnen wir zumindest in Zukunft versuchen, auf sie zu verzichten? Mir ist nie sehr wohl, wen ich die irgendwo sehe. - Bibliotheken, module -Jedes Verzeichnis in common/ erzeugt eine Bibliothek. Je nach Bedarf muss aber nicht jeder Server die ganze Bibliothek linken (die ist eher was f�r den mapper), sondern kann die Files auch einzeln linken. +Jedes Verzeichnis in common/ erzeugt eine Bibliothek. Je nach Bedarf muss aber nicht jeder Server die ganze Bibliothek linken (die ist eher was f�r den mapper), sondern kann die Files auch einzeln linken. Jedes modul, item, attribut, usw. sollte eine Funktion zur Verf�gung stellen, die seine typen initialisiert, also it_register respektive at_register o.�. aufruft. Jede Biliothek hat ein File, das ihren Namen tr�gt (z.b. items.txt) mit einer eigenen init_-Funktion, die alle init_funktionen der enthaltenen objekte enth�lt. (init_items, init_attributes, usw). Neue Files hinzuf�gen hei�t also bitte, die Registrierung in den "bibliotheks-file" zu machen. +- KI +Beim Anblick des enums mit Rassen-Flags sieht man schnell, das die in mehrere Kategorien fallen. Eine davon ist die KI-Steuerung, und k�nnte man die vielleicht getrennt von den anderen speichern? + +- Wor�ber man nachdenken sollte, ehe man etwas neues hinzuf�gt +90% aller Erweiterungen sind eigentlich optional. Ein Eressea ist z.B. auch ohne die Rasse Troll denkbar. Leider ist die rasse Troll an derart viele Stellen hartgecodet, das man Eressea ohne Trolle nie �bersetzen k�nnte (Im Kampfsystem bekommen z.B. Trolle -1 beim Reitenbonus). +Immer dr�ber nachdenken, ob man hartcoden mu�, oder ob es auch einen anderen Weg gibt (in diesem Fall z.B. ein at_skillmod attribut an der Rasse Troll). + +- RC_SPELL +Es gibt einen Zauber (Ferne Vision) der Einheiten vom Typ RC_SPELL erzeugt, aber 36 Stellen, an denen auf diesen Typ abgetestet werden mu� (vielleicht sogar mehr?). K�nnen wir das mal auf einen curse umstellen? Am besten in Kombination mit einem allgemeinen "diese Einheit/Region soll in den Report der PArtei x", das man dann auch f�r Spionage usw. benutzen kann, und das im Fall von Antimagie oder Zauberende durch einen Trigger am entsprechenden curse mit zerlegt wird? + +- Wie komplex macht man einen Curse? +siehe vorangegangener Absatz. Generell gilt hier: Lieber zwei vielseitige Dinge machen, als ein unflexibles - der curse sollte lediglich der container seiin, der die wirkung aufrechterh�lt (das attribut an der region �berwacht, und per trigger-funktion bei ende des curse oder antimagie entfernt). die eigentliche wirkung kann man in ein separates attribut stecken, dann ist sie auch in anderen kontexten als zauberei verwendbar (geba�de oder items mit der gleichen wirkung, z.b.). Tests sollten so wenig wie m�glich auf einen curse gehen (in fact, eigentlich nur bei der antimagie) sondern immer auf die wirkung (das attribut). + diff --git a/src/doc/triggers.txt b/src/doc/triggers.txt new file mode 100644 index 000000000..5470a5d5e --- /dev/null +++ b/src/doc/triggers.txt @@ -0,0 +1,111 @@ +==-------------------== +New Style Eventhandling +==-------------------== + + Zweck des ganzen ist es, m�glichst frei Reaktionen auf Ereignisse zu + implementieren. Dazu mu� nat�rlich defineirt sein, was so ein Ereignis + ist. Sowohl die Eriegnisse als auch das, was daraufhin geschieht, mu� + m�glichst flexibel erweiterbar sein. au�erdem sollen solche + Ereigniss-Behandlungen zur Laufzeit defineirt werden k�nnen. Die m�glichen + Events kann man nur zur Compilezeit definieren, und auch die Klassen von + Behandlungsroutinen, aber festzulegen wer wann auf was reagiert sollte + durch einen Spruch, das auftauchen eines Drachen, einen Event oder den Tod + einer Einheit ausgel�st werden k�nnen, und beliebiges anderes. + +Wie's geht: + + Wenn durch den Code ein Event "event" ausgel�st wird, dann wird f�r das + betroffene Objekt X die Funktion handle_event(X->attribs, "event") + aufgerufen. Ja, der Event ist ein String. + + handle_event(a, e) sucht in der Liste der attribute nach einem + at_eventhandler Objekt. So ein at_eventhandler verwaltet eine Liste von + Trigger-Objekten trigger_list mit Daten und handle() Funktion, die im Fall + des Events aufgerufen wird. F�r jeden event-typ (string) gibt es ein + solches at_eventhandler Attribut in der Attributliste, das mehrere + Trigger-Funktionen beinhalten kann. Ich glaube, die hat Ingo in seinem + Ansatz "action" getauft. + + Wurde ein Passendes gefunden, dann wird der Reihe nach jeder Trigger + ausgef�hrt. + + Das ganze wird im Datenfile sogar ziemlich lesbar, wie man hier an diesem + Magier sieht: + eventhandler destroy killunit LeL end + Hier ist ein eventhandler, der im falle eines "destroy" Events auch die + Einheit LeL killt (LeL ist der Vertraute des Magiers). + +Neue Trigger-Typen machen: + + Neue Trigger zu definieren ist ziemlich leicht, und ich habe schonmal ein + paar flexible vordefiniert. Sie sollten m�glichst im Verzeichnis triggers/ + landen. Dran denken, das jeder in Eressea verwendete trigger-typ mit + tt_register() angemeldet werden mu�. Das passiert in der Datei + eressea/triggers.c + + Dabei lohnt es sich, die trigger etwas genereller zu mchen. F�r viele von + ihnen sollte man resolve.[hc] verstanden haben, da man das zum Speichern + von Referenzen auf Parteien, Einheiten, usw. ben�tigt. + +Trigger aktivieren: + + Der Trigger sollte jeweils in der Attributliste des Objektes landen, + dessen Existnez f�r die Ausf�hrung n�tig ist. z.B. der Trigger zum T�ten + des Familiars beim Magier, der zum �bergeben eines item an eine person die + ein geb�ude betritt, in das Geb�ude. + + Beispiel: Wenn die verzauberte Burg b zerst�rt wird, soll der zaubernde + Magier einen Schock erleiden: + add_trigger(&b->attribs, "destroy", trigger_shock(mage)); + Steht die Burg jedoch nach 10 Runden noch an ihrem Fleck, bekommt er einen + Schatz von 100 Silber: + trigger * ttreasure = trigger_giveitem(mage, &i_silver, 100); + trigger * ttimer = trigger_timetrigger(10, ttreasure); + add_trigger(&b-attribs, "timer", ttimer); + Wie man sieht, kann ein trigger einen anderen ausl�sen, und mit etwas + Geschick kann man ganze Ketten von Ereignissen hinbekommen, die wieder + neue Trigger setzen, usw. + +Bisher definierte Events: (NI=Not Implemented) + + {building|faction|unit|ship}:"destroy" - Das Objekt verschwindet. + {building|faction|unit|ship|region}:"timer" - einmal pro Runde in + eressea.c::ageing() + {building}"enter" - Geb�ude oder Schiff wird betreten (NI) + +Bisher definierte trigger: + + - timeout: meta-trigger, aktiviert eine liste von triggern nach einer + zeitspanne. + - changerace: �ndert race/irace f�r eine einheit + - giveitem: gibt items eines typs an eine einheit. + - killunit: t�tet die angegebene einhiet. + - shock: schockt einen magier. + - changefaction + - removecurse + +adaptierte alte trigger: + + - famililars: + familiar: on "destroy" shock(mage) + mage: on "destroy" killunit(familiar) + - toad: + mage: on "timer" timeout([changerace(), giveitem(toadslime)]) + - summondragon: + region: on "timer" timeout([createunit()]) + - magicboost: + mage: on "timer" timeout(createcurse()) + - charm: + target: on "timer" changefaction(target) + new faction: on "destroy" destroy(target) + +problems to be solved: + + - propagation of triggers/attributes in general + - was, wenn ein removecurse(c) ausgefuehrt werden soll, aber der curse + sich propagiert hat? daf�r waere wohl ein forwarding-graph ganz geeignet. + (spells:5066, alp) + +TODO: + + - fprintf/fscanf nochmal checken. diff --git a/src/eressea-6.opt b/src/eressea-6.opt new file mode 100644 index 0000000000000000000000000000000000000000..949ed3c0d46752a319450461ec028f2d1f259eb2 GIT binary patch literal 138240 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 literal 0 HcmV?d00001 diff --git a/src/eressea/attributes.c b/src/eressea/attributes.c index b0975600d..74855db03 100644 --- a/src/eressea/attributes.c +++ b/src/eressea/attributes.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: attributes.c,v 1.3 2001/02/02 08:40:48 enno Exp $ + * $Id: attributes.c,v 1.4 2001/02/03 13:45:34 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -14,7 +14,7 @@ #include <config.h> #include <eressea.h> -#include "attributes.h" +#include <attributes/attributes.h> /* attributes includes */ #include <attributes/key.h> diff --git a/src/eressea/eressea-6.dsp b/src/eressea/eressea-6.dsp index d08c92bed..c39be81e0 100644 --- a/src/eressea/eressea-6.dsp +++ b/src/eressea/eressea-6.dsp @@ -20,6 +20,7 @@ CFG=eressea - Win32 Conversion !MESSAGE "eressea - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "eressea - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE "eressea - Win32 Conversion" (based on "Win32 (x86) Console Application") +!MESSAGE "eressea - Win32 Profile" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project @@ -40,9 +41,10 @@ RSC=rc.exe # 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 "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX /Z7 /O2 /I ".." /I "../common" /I "../common/util" /I "../common/kernel" /I "../common/gamecode" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE RSC /l 0x407 /d "NDEBUG" # ADD RSC /l 0x407 /d "NDEBUG" BSC32=bscmake.exe @@ -50,7 +52,7 @@ BSC32=bscmake.exe # 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 /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 !ELSEIF "$(CFG)" == "eressea - Win32 Debug" @@ -66,12 +68,12 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /Za /W4 /Gm /ZI /Od /I ".." /I "../common" /I "../common/util" /I "../common/kernel" /I "../common/gamecode" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX"stdafx.h" /FD /c +# ADD CPP /nologo /Za /W4 /Gm /ZI /Od /I ".." /I "../common" /I "../common/util" /I "../common/kernel" /I "../common/gamecode" /D "_CONSOLE" /D "_MBCS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /YX"stdafx.h" /FD /c # ADD BASE RSC /l 0x407 /d "_DEBUG" # ADD RSC /l 0x407 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo -# ADD BSC32 /nologo /S (*.h ../*.h ../common/kernel/eressea.h ../common/util/*.h ../common/triggers/*.h) ../common/kernel/Debug/*.sbr ../common/triggers/Debug/*.sbr ../common/util/Debug/*.sbr +# ADD BSC32 /nologo /S (*.h ../*.h ../common/kernel/eressea.h ../common/gamecode/*.h ../common/util/*.h ../common/triggers/*.h) ../common/gamecode/Debug/*.sbr ../common/kernel/Debug/*.sbr ../common/triggers/Debug/*.sbr ../common/util/Debug/*.sbr 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 /nologo /subsystem:console /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 /nologo /subsystem:console /debug /machine:I386 /out:"Debug/eressea.exe" /pdbtype:sept @@ -86,13 +88,13 @@ LINK32=link.exe # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 -# PROP Output_Dir "eressea_" -# PROP Intermediate_Dir "eressea_" +# PROP Output_Dir "Conversion" +# PROP Intermediate_Dir "Conversion" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MDd /Za /W4 /Gm /Zi /Od /I ".." /I "../util" /I "../common" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /c # SUBTRACT BASE CPP /YX -# ADD CPP /nologo /MDd /Za /W4 /Gm /ZI /Od /I ".." /I "../util" /I "../common" /D "_CONSOLE" /D "_MBCS" /D "WIN32" /D "_DEBUG" /D "CONVERT_TRIGGER" /FR /FD /c +# ADD CPP /nologo /Za /W4 /Gm /ZI /Od /I ".." /I "../common" /I "../common/util" /I "../common/kernel" /I "../common/gamecode" /D "_CONSOLE" /D "_MBCS" /D "CONVERT_TRIGGER" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x407 /d "_DEBUG" # ADD RSC /l 0x407 /d "_DEBUG" @@ -101,7 +103,31 @@ BSC32=bscmake.exe # 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 /nologo /subsystem:console /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 /nologo /subsystem:console /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 /nologo /subsystem:console /debug /machine:I386 /out:"Conversion/eressea.exe" /pdbtype:sept + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "eressea___Win32_Profile" +# PROP BASE Intermediate_Dir "eressea___Win32_Profile" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Profile" +# PROP Intermediate_Dir "Profile" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /I ".." /I "../common" /I "../common/util" /I "../common/kernel" /I "../common/gamecode" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX- /Zi /O2 /I ".." /I "../common" /I "../common/util" /I "../common/kernel" /I "../common/gamecode" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# 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 /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /profile /machine:I386 !ENDIF @@ -110,6 +136,7 @@ LINK32=link.exe # Name "eressea - Win32 Release" # Name "eressea - Win32 Debug" # Name "eressea - Win32 Conversion" +# Name "eressea - Win32 Profile" # Begin Group "Header" # PROP Default_Filter "*.h" @@ -119,10 +146,6 @@ SOURCE=..\common\modules\arena.h # End Source File # Begin Source File -SOURCE=.\attributes.h -# End Source File -# Begin Source File - SOURCE=..\common\modules\museum.h # End Source File # Begin Source File @@ -143,46 +166,133 @@ SOURCE=..\common\modules\xmas2000.h # PROP Default_Filter "" # Begin Source File -SOURCE=..\old\pointertags.c +SOURCE=.\old\pointertags.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Exclude_From_Build 1 + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + !ENDIF # End Source File # Begin Source File -SOURCE=..\old\relation.c +SOURCE=.\old\pointertags.h !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Exclude_From_Build 1 + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + !ENDIF # End Source File # Begin Source File -SOURCE=..\old\trigger.c +SOURCE=.\old\relation.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Exclude_From_Build 1 + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Exclude_From_Build 1 !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\old\relation.h + +!IF "$(CFG)" == "eressea - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "eressea - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "eressea - Win32 Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\old\trigger.c + +!IF "$(CFG)" == "eressea - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "eressea - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "eressea - Win32 Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\old\trigger.h + +!IF "$(CFG)" == "eressea - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "eressea - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "eressea - Win32 Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + !ENDIF # End Source File @@ -196,12 +306,21 @@ SOURCE=..\common\races\dragons.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\races\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\races\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\races\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\races\Release" +# PROP Intermediate_Dir "..\common\races\Profile" + !ENDIF # End Source File @@ -211,12 +330,21 @@ SOURCE=..\common\races\dragons.h !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\races\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\races\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\races\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\races\Release" +# PROP Intermediate_Dir "..\common\races\Profile" + !ENDIF # End Source File @@ -226,12 +354,21 @@ SOURCE=..\common\races\illusion.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\races\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\races\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\races\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\races\Release" +# PROP Intermediate_Dir "..\common\races\Profile" + !ENDIF # End Source File @@ -241,12 +378,21 @@ SOURCE=..\common\races\illusion.h !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\races\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\races\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\races\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\races\Release" +# PROP Intermediate_Dir "..\common\races\Profile" + !ENDIF # End Source File @@ -256,12 +402,21 @@ SOURCE=..\common\races\zombies.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\races\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\races\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\races\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\races\Release" +# PROP Intermediate_Dir "..\common\races\Profile" + !ENDIF # End Source File @@ -271,12 +426,21 @@ SOURCE=..\common\races\zombies.h !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\races\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\races\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\races\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\races\Release" +# PROP Intermediate_Dir "..\common\races\Profile" + !ENDIF # End Source File @@ -290,12 +454,21 @@ SOURCE=..\common\items\demonseye.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\items\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\items\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\items\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\items\Release" +# PROP Intermediate_Dir "..\common\items\Profile" + !ENDIF # End Source File @@ -305,22 +478,67 @@ SOURCE=..\common\items\demonseye.h !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\items\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\items\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\items\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\items\Release" +# PROP Intermediate_Dir "..\common\items\Profile" + !ENDIF # End Source File # Begin Source File SOURCE=..\common\items\lmsreward.c + +!IF "$(CFG)" == "eressea - Win32 Release" + +# PROP Intermediate_Dir "..\common\items\Release" + +!ELSEIF "$(CFG)" == "eressea - Win32 Debug" + +!ELSEIF "$(CFG)" == "eressea - Win32 Conversion" + +# PROP Intermediate_Dir "..\common\items\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\items\Release" +# PROP Intermediate_Dir "..\common\items\Profile" + +!ENDIF + # End Source File # Begin Source File SOURCE=..\common\items\lmsreward.h + +!IF "$(CFG)" == "eressea - Win32 Release" + +# PROP Intermediate_Dir "..\common\items\Release" + +!ELSEIF "$(CFG)" == "eressea - Win32 Debug" + +!ELSEIF "$(CFG)" == "eressea - Win32 Conversion" + +# PROP Intermediate_Dir "..\common\items\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\items\Release" +# PROP Intermediate_Dir "..\common\items\Profile" + +!ENDIF + # End Source File # Begin Source File @@ -328,12 +546,21 @@ SOURCE=..\common\items\weapons.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\items\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\items\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\items\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\items\Release" +# PROP Intermediate_Dir "..\common\items\Profile" + !ENDIF # End Source File @@ -343,12 +570,21 @@ SOURCE=..\common\items\weapons.h !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\items\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\items\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\items\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\items\Release" +# PROP Intermediate_Dir "..\common\items\Profile" + !ENDIF # End Source File @@ -362,12 +598,43 @@ SOURCE=..\common\modules\arena.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\modules\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\modules\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\modules\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\modules\Release" +# PROP Intermediate_Dir "..\common\modules\Profile" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=..\common\modules\gmcmd.c + +!IF "$(CFG)" == "eressea - Win32 Release" + +# PROP Intermediate_Dir "..\common\modules\Release" + +!ELSEIF "$(CFG)" == "eressea - Win32 Debug" + +!ELSEIF "$(CFG)" == "eressea - Win32 Conversion" + +# PROP Intermediate_Dir "..\common\modules\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\modules\Release" +# PROP Intermediate_Dir "..\common\modules\Profile" + !ENDIF # End Source File @@ -377,12 +644,21 @@ SOURCE=..\common\modules\museum.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\modules\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\modules\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\modules\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\modules\Release" +# PROP Intermediate_Dir "..\common\modules\Profile" + !ENDIF # End Source File @@ -392,12 +668,21 @@ SOURCE=..\common\modules\oceannames.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\modules\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\modules\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\modules\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\modules\Release" +# PROP Intermediate_Dir "..\common\modules\Profile" + !ENDIF # End Source File @@ -407,12 +692,21 @@ SOURCE=..\common\modules\score.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\modules\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\modules\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\modules\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\modules\Release" +# PROP Intermediate_Dir "..\common\modules\Profile" + !ENDIF # End Source File @@ -422,12 +716,21 @@ SOURCE=..\common\modules\xmas2000.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\modules\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\modules\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\modules\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\modules\Release" +# PROP Intermediate_Dir "..\common\modules\Profile" + !ENDIF # End Source File @@ -441,12 +744,21 @@ SOURCE=..\common\attributes\follow.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -456,12 +768,21 @@ SOURCE=..\common\attributes\follow.h !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -471,12 +792,21 @@ SOURCE=..\common\attributes\giveitem.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -486,12 +816,21 @@ SOURCE=..\common\attributes\giveitem.h !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -501,12 +840,21 @@ SOURCE=..\common\attributes\hate.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -516,12 +864,21 @@ SOURCE=..\common\attributes\hate.h !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -531,12 +888,21 @@ SOURCE=..\common\attributes\iceberg.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -546,12 +912,21 @@ SOURCE=..\common\attributes\iceberg.h !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -561,12 +936,21 @@ SOURCE=..\common\attributes\key.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -576,12 +960,21 @@ SOURCE=..\common\attributes\key.h !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -591,12 +984,21 @@ SOURCE=..\common\attributes\matmod.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -606,12 +1008,43 @@ SOURCE=..\common\attributes\matmod.h !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=..\common\attributes\orcification.c + +!IF "$(CFG)" == "eressea - Win32 Release" + +# PROP Intermediate_Dir "..\common\attributes\Release" + +!ELSEIF "$(CFG)" == "eressea - Win32 Debug" + +!ELSEIF "$(CFG)" == "eressea - Win32 Conversion" + +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -621,12 +1054,21 @@ SOURCE=..\common\attributes\reduceproduction.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -636,12 +1078,21 @@ SOURCE=..\common\attributes\reduceproduction.h !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -651,12 +1102,21 @@ SOURCE=..\common\attributes\targetregion.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -666,12 +1126,21 @@ SOURCE=..\common\attributes\targetregion.h !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\attributes\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\attributes\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\attributes\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\attributes\Release" +# PROP Intermediate_Dir "..\common\attributes\Profile" + !ENDIF # End Source File @@ -685,12 +1154,21 @@ SOURCE=..\common\triggers\changefaction.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\triggers\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\triggers\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\triggers\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\triggers\Release" +# PROP Intermediate_Dir "..\common\triggers\Profile" + !ENDIF # End Source File @@ -700,12 +1178,21 @@ SOURCE=..\common\triggers\changerace.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\triggers\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\triggers\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\triggers\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\triggers\Release" +# PROP Intermediate_Dir "..\common\triggers\Profile" + !ENDIF # End Source File @@ -715,12 +1202,21 @@ SOURCE=..\common\triggers\createcurse.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\triggers\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\triggers\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\triggers\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\triggers\Release" +# PROP Intermediate_Dir "..\common\triggers\Profile" + !ENDIF # End Source File @@ -730,12 +1226,21 @@ SOURCE=..\common\triggers\createunit.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\triggers\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\triggers\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\triggers\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\triggers\Release" +# PROP Intermediate_Dir "..\common\triggers\Profile" + !ENDIF # End Source File @@ -745,12 +1250,21 @@ SOURCE=..\common\triggers\giveitem.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\triggers\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\triggers\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\triggers\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\triggers\Release" +# PROP Intermediate_Dir "..\common\triggers\Profile" + !ENDIF # End Source File @@ -760,12 +1274,21 @@ SOURCE=..\common\triggers\killunit.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\triggers\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\triggers\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\triggers\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\triggers\Release" +# PROP Intermediate_Dir "..\common\triggers\Profile" + !ENDIF # End Source File @@ -775,12 +1298,21 @@ SOURCE=..\common\triggers\removecurse.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\triggers\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\triggers\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\triggers\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\triggers\Release" +# PROP Intermediate_Dir "..\common\triggers\Profile" + !ENDIF # End Source File @@ -790,12 +1322,21 @@ SOURCE=..\common\triggers\shock.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\triggers\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\triggers\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\triggers\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\triggers\Release" +# PROP Intermediate_Dir "..\common\triggers\Profile" + !ENDIF # End Source File @@ -805,12 +1346,21 @@ SOURCE=..\common\triggers\timeout.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\triggers\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\triggers\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\triggers\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\triggers\Release" +# PROP Intermediate_Dir "..\common\triggers\Profile" + !ENDIF # End Source File @@ -820,12 +1370,21 @@ SOURCE=..\common\triggers\unitmessage.c !IF "$(CFG)" == "eressea - Win32 Release" +# PROP Intermediate_Dir "..\common\triggers\Release" + !ELSEIF "$(CFG)" == "eressea - Win32 Debug" # PROP Intermediate_Dir "..\common\triggers\Debug" !ELSEIF "$(CFG)" == "eressea - Win32 Conversion" +# PROP Intermediate_Dir "..\common\triggers\Conversion" + +!ELSEIF "$(CFG)" == "eressea - Win32 Profile" + +# PROP BASE Intermediate_Dir "..\common\triggers\Release" +# PROP Intermediate_Dir "..\common\triggers\Profile" + !ENDIF # End Source File @@ -836,7 +1395,7 @@ SOURCE=.\attributes.c # End Source File # Begin Source File -SOURCE=..\common\modules\gmcmd.c +SOURCE=.\items.c # End Source File # Begin Source File @@ -848,7 +1407,7 @@ SOURCE=.\main.c # End Source File # Begin Source File -SOURCE=..\common\attributes\orcification.c +SOURCE=.\spells.c # End Source File # Begin Source File diff --git a/src/eressea/items.c b/src/eressea/items.c new file mode 100644 index 000000000..99548a45f --- /dev/null +++ b/src/eressea/items.c @@ -0,0 +1,11 @@ +#include <items/lmsreward.h> +#include <items/demonseye.h> +#include <items/weapons.h> + +void +init_items(void) +{ + init_weapons(); + init_demonseye(); + init_lmsreward(); +} diff --git a/src/eressea/korrektur.c b/src/eressea/korrektur.c index 5cfafc540..ac3d34520 100644 --- a/src/eressea/korrektur.c +++ b/src/eressea/korrektur.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: korrektur.c,v 1.10 2001/02/02 08:40:48 enno Exp $ + * $Id: korrektur.c,v 1.11 2001/02/03 13:45:34 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -977,6 +977,7 @@ show_newspells(void) * terminieren */ spellid_t newspellids[] = { SPL_ETERNIZEWALL, + SPL_CERDDOR_EARN_SILVER, SPL_PUTTOREST, SPL_UNHOLYPOWER, SPL_HOLYGROUND, @@ -1203,6 +1204,54 @@ fix_balsamfiasko(void) } #endif +int +count_demand(const region *r) +{ + struct demand *dmd; + int c = 0; + for (dmd=r->land->demands;dmd;dmd=dmd->next) c++; + return c; +} + +void +fix_demand_region(const region *r) +{ + direction_t d; + + for (d=0;d!=MAXDIRECTIONS;++d) { + region *nr = rconnect(r, d); + if (nr && nr->land && count_demand(nr) != 7) { + const luxury_type *sale=NULL; + const luxury_type *ltype; + struct demand *dmd, *dmd2; + + for(dmd = nr->land->demands; dmd; dmd=dmd->next) + if(dmd->value == 0) sale = dmd->type; + + dmd2 = NULL; + for (ltype = luxurytypes;ltype;ltype=ltype->next) { + dmd = malloc(sizeof(struct demand)); + dmd->type = ltype; + if(ltype == sale) { + dmd->value = 0; + } else { + dmd->value = 1+rand()%5; + } + } + } + } +} + +void +fix_demand(void) +{ + region *r; + + for(r=regions; r; r=r->next) { + if(count_demand(r) != 7) fix_demand_region(r); + } +} + #if 0 static void read_laenrepair(boolean active) @@ -1363,8 +1412,10 @@ stats(void) { FILE * F; item * items = NULL; + char zText[MAX_PATH]; - F = fopen("res/stats", "wt"); + strcat(strcpy(zText, resourcepath()), "/stats"); + F = fopen(zText, "wt"); if (F) { region * r; const item_type * itype; @@ -1387,8 +1438,7 @@ stats(void) } fclose(F); } else { - sprintf(buf, "fopen(%s): ", "res/stats"); - perror(buf); + perror(zText); } } @@ -1574,12 +1624,12 @@ init_mwarden(void) } #ifdef CONVERT_TRIGGER -#include <old/relation.h> -#include <old/trigger.h> +#include "old/relation.h" +#include "old/trigger.h" +#include "old/trigger_internal.h" #include <event.h> -#include <trigger_internal.h> #include <triggers/killunit.h> #include <triggers/timeout.h> #include <triggers/changerace.h> @@ -1706,7 +1756,7 @@ convert_triggers(void) static void lms_special(unit * u) { - i_change(&u->items, &it_lmsreward, 1); + if (u) i_change(&u->items, &it_lmsreward, 1); } #define LIFEEXPECTANCY (27*40) diff --git a/src/eressea/korrektur.h b/src/eressea/korrektur.h new file mode 100644 index 000000000..997d3f582 --- /dev/null +++ b/src/eressea/korrektur.h @@ -0,0 +1,14 @@ +/* vi: set ts=2: + * Eressea PB(E)M host Christian Schlittchen (corwin@amber.kn-bremen.de) + * (C) 1998-2000 Katja Zedel (katze@felidae.kn-bremen.de) + * Henning Peters (faroul@beyond.kn-bremen.de) + * Enno Rehling (enno@eressea-pbem.de) + * Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de) + * + * This program may not be used, modified or distributed without + * prior permission by the authors of Eressea. + **/ + +extern void korrektur(void); +extern void korrektur_end(void); +extern void init_conversion(void); diff --git a/src/eressea/main.c b/src/eressea/main.c index 4ca0637a2..701ffbab3 100644 --- a/src/eressea/main.c +++ b/src/eressea/main.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: main.c,v 1.8 2001/02/02 08:40:48 enno Exp $ + * $Id: main.c,v 1.9 2001/02/03 13:45:34 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -34,11 +34,13 @@ #include <config.h> #include <eressea.h> +#include "korrektur.h" + /* initialization - TODO: init in separate module */ -#include <items/lmsreward.h> -#include <items/demonseye.h> -#include <items/weapons.h> #include <attributes/attributes.h> +#include <spells/spells.h> +#include <triggers/triggers.h> +#include <items/items.h> /* modules includes */ #include <modules/arena.h> @@ -81,6 +83,7 @@ int nowrite = 0; extern char * g_reportdir; extern char * g_datadir; extern char * g_basedir; +extern char * g_resourcedir; extern boolean nonr; extern boolean nocr; @@ -89,36 +92,22 @@ extern boolean nomsg; extern boolean nobattle; extern boolean nobattledebug; -extern void korrektur(void); -extern void korrektur_end(void); -extern void reorder(region * r); -extern void freeland(land_region * lr); -extern void init_conversion(void); -extern void register_triggers(void); - int mapdetail = 0; extern void render_init(void); -static void init_items(void) -{ - init_weapons(); - init_demonseye(); - init_lmsreward(); -} - static void init_game(void) { - register_triggers(); + init_triggers(); init_locales(); + init_races(); + init_spells(); init_resources(); init_items(); init_attributes(); - init_demonseye(); - #ifdef USE_GM_COMMANDS init_gmcmd(); #endif @@ -134,8 +123,8 @@ void create_game(void) { assert(regions==NULL || !"game is initialized"); - printf("Keine Spieldaten gefunden, erzeuge neues Spiel...\n"); - makedir("data", 0700); + printf("Keine Spieldaten gefunden, erzeuge neues Spiel in %s...\n", datapath()); + makedir(datapath(), 0700); /* erste Insel generieren */ new_region(0, 0); /* Monsterpartei anlegen */ @@ -202,16 +191,20 @@ int quickleave = 0; void writepasswd(void) { - faction *f; - FILE * F = cfopen("passwd", "w"); - if (!F) - return; - puts("Schreibe Passw�rter..."); + FILE * F; + char zText[128]; - for (f = factions; f; f = f->next) { - fprintf(F, "%s:%s:%s\n", factionid(f), f->name, f->passw); + sprintf(zText, "%s/passwd", basepath()); + F = cfopen(zText, "w"); + if (F) { + faction *f; + puts("Schreibe Passw�rter..."); + + for (f = factions; f; f = f->next) { + fprintf(F, "%s:%s:%s\n", factionid(f), f->email, f->passw); + } + fclose(F); } - fclose(F); } #ifdef FUZZY_BASE36 @@ -410,63 +403,16 @@ int main(int argc, char *argv[]) { int i, errorlevel = 0; - FILE * F; setlocale(LC_ALL, ""); #ifdef LOCALE_CHECK - assert(locale_check() || !"ERROR: The current locale is not suitable for international Eressea.\n"); + if (!locale_check()) + puts("ERROR: The current locale is not suitable for international Eressea.\n"); #endif #if MALLOCDBG init_malloc_debug(); #endif - strcat(strcpy(buf, basepath()), "/res/spells"); - F = fopen(buf, "wt"); - if (F) { - int i, m = -1; - for (i=0;spelldaten[i].id;++i) { - if (spelldaten[i].magietyp!=m) { - m=spelldaten[i].magietyp; - fprintf(F, "\n%s\n", magietypen[m]); - } - fprintf(F, "%d\t%s\n", spelldaten[i].level, spelldaten[i].name); - } - fclose(F); - } else { - char zText[MAX_PATH]; - strcat(strcpy(zText, basepath()), "/res/spells"); - sprintf(buf, "fopen(%s): ", zText); - perror(buf); - } - - strcat(strcpy(buf, basepath()), "/res/bonus"); - F = fopen(buf, "wt"); - if (F) { - race_t r; - for (r=0;r!=MAXRACES;++r) { - skill_t sk; - int i = 0; - fprintf(F, "const bonus %s_bonus = {\n\t", race[r].name[0]); - for (sk=0;sk!=MAXSKILLS;sk++) { - if (race[r].bonus[sk]) { - if (i==8) { - i = 0; - fputs("\n\t", F); - } - fprintf(F, "{ SK_%s, %d }, ", skillnames[sk], race[r].bonus[sk]); - ++i; - } - } - fputs("{ SK_NONE, 0 }\n};\n", F); - } - fclose(F); - } else { - char zText[MAX_PATH]; - strcat(strcpy(zText, basepath()), "/res/bonus"); - sprintf(buf, "fopen(%s): ", zText); - perror(buf); - } - debug = 0; quickleave = 0; @@ -504,6 +450,9 @@ main(int argc, char *argv[]) } g_datadir = argv[++i]; break; + case 'r': + g_resourcedir = argv[++i]; + break; case 'b': g_basedir = argv[++i]; break; @@ -528,9 +477,57 @@ main(int argc, char *argv[]) } { char zText[MAX_PATH]; - strcat(strcpy(zText, basepath()), "/res/timestrings"); + strcat(strcpy(zText, resourcepath()), "/timestrings"); read_datenames(zText); } + +#ifdef WRITE_STATS + { + FILE * F; + char zText[MAX_PATH]; + strcat(strcpy(zText, resourcepath()), "/spells"); + F = fopen(zText, "wt"); + if (F) { + int i, m = -1; + for (i=0;spelldaten[i].id;++i) { + if (spelldaten[i].magietyp!=m) { + m=spelldaten[i].magietyp; + fprintf(F, "\n%s\n", magietypen[m]); + } + fprintf(F, "%d\t%s\n", spelldaten[i].level, spelldaten[i].name); + } + fclose(F); + } else { + sprintf(buf, "fopen(%s): ", zText); + perror(buf); + } + strcat(strcpy(zText, resourcepath()), "/bonus"); + F = fopen(buf, "wt"); + if (F) { + race_t r; + for (r=0;r!=MAXRACES;++r) { + skill_t sk; + int i = 0; + fprintf(F, "const bonus %s_bonus = {\n\t", race[r].name[0]); + for (sk=0;sk!=MAXSKILLS;sk++) { + if (race[r].bonus[sk]) { + if (i==8) { + i = 0; + fputs("\n\t", F); + } + fprintf(F, "{ SK_%s, %d }, ", skillnames[sk], race[r].bonus[sk]); + ++i; + } + } + fputs("{ SK_NONE, 0 }\n};\n", F); + } + fclose(F); + } else { + sprintf(buf, "fopen(%s): ", zText); + perror(zText); + } + } +#endif init_game(); initgame(); readgame(false); @@ -558,11 +555,6 @@ main(int argc, char *argv[]) case 'c': korrektur(); break; - case 'r': - errorlevel = 0; - score(); - doreports(); - break; case 'Q': quickleave = 1; break; @@ -634,6 +626,7 @@ main(int argc, char *argv[]) break; case 'f': i++; + case 'r': case 'b': case 't': case 'x': @@ -703,10 +696,6 @@ main(int argc, char *argv[]) processturn(buf); break; - case 'r': - doreports(); - break; - case 's': { char ztext[64]; @@ -715,14 +704,6 @@ main(int argc, char *argv[]) } break; - case 'T': - changeblockterrain(); - break; - - case 'C': - changeblockchaos(); - break; - case 'q': #if ENNO_CLEANUP cleanup(); diff --git a/src/eressea/old/trigger.c b/src/eressea/old/trigger.c index 6f1510278..deb4f9b1d 100644 --- a/src/eressea/old/trigger.c +++ b/src/eressea/old/trigger.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: trigger.c,v 1.1 2001/01/27 18:15:32 enno Exp $ + * $Id: trigger.c,v 1.2 2001/02/03 13:45:34 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -34,6 +34,7 @@ #include <resolve.h> #include <assert.h> +#include <string.h> #include <stdlib.h> #if defined(OLD_TRIGGER) || defined(CONVERT_TRIGGER) diff --git a/src/eressea/old/trigger.h b/src/eressea/old/trigger.h index 12425068d..733da2166 100644 --- a/src/eressea/old/trigger.h +++ b/src/eressea/old/trigger.h @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: trigger.h,v 1.1 2001/01/27 18:15:32 enno Exp $ + * $Id: trigger.h,v 1.2 2001/02/03 13:45:34 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -19,7 +19,6 @@ #ifndef TRIGGER_H #define TRIGGER_H -#include <curse.h> #include "relation.h" #include "attrspread.h" diff --git a/src/eressea/spells.c b/src/eressea/spells.c new file mode 100644 index 000000000..19f8ecbf9 --- /dev/null +++ b/src/eressea/spells.c @@ -0,0 +1,25 @@ +/* vi: set ts=2: + * + * $Id: spells.c,v 1.1 2001/02/03 13:45:34 enno Exp $ + * Eressea PB(E)M host Copyright (C) 1998-2000 + * Christian Schlittchen (corwin@amber.kn-bremen.de) + * Katja Zedel (katze@felidae.kn-bremen.de) + * Henning Peters (faroul@beyond.kn-bremen.de) + * Enno Rehling (enno@eressea-pbem.de) + * Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de) + * + * This program may not be used, modified or distributed without + * prior permission by the authors of Eressea. + */ + +#include <config.h> +#include <spells/spells.h> + +#include <spells/alp.h> + +void +init_spells(void) +{ + /* sp_summon_alp */ + init_alp(); +} diff --git a/src/eressea/triggers.c b/src/eressea/triggers.c index c9a9554d6..c65030379 100644 --- a/src/eressea/triggers.c +++ b/src/eressea/triggers.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: triggers.c,v 1.2 2001/01/26 16:19:41 enno Exp $ + * $Id: triggers.c,v 1.3 2001/02/03 13:45:34 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -43,7 +43,7 @@ #include <stdio.h> void -register_triggers(void) +init_triggers(void) { fprintf(stdout, "- registering triggers\n"); tt_register(&tt_changefaction); diff --git a/src/header.txt b/src/header.txt index 7803d2214..992cac353 100644 --- a/src/header.txt +++ b/src/header.txt @@ -1,13 +1,12 @@ /* vi: set ts=2: - * - * $Id: header.txt,v 1.2 2001/01/26 16:19:38 enno Exp $ - * Eressea PB(E)M host Copyright (C) 1998-2000 - * Christian Schlittchen (corwin@amber.kn-bremen.de) - * Katja Zedel (katze@felidae.kn-bremen.de) - * Henning Peters (faroul@beyond.kn-bremen.de) - * Enno Rehling (enno@eressea-pbem.de) - * Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de) - * - * This program may not be used, modified or distributed without - * prior permission by the authors of Eressea. + +-------------------+ Christian Schlittchen <corwin@amber.kn-bremen.de> + | | Enno Rehling <enno@eressea-pbem.de> + | Eressea PBEM host | Katja Zedel <katze@felidae.kn-bremen.de> + | (c) 1998 - 2001 | Henning Peters <faroul@beyond.kn-bremen.de> + | | Ingo Wilken <Ingo.Wilken@informatik.uni-oldenburg.de> + +-------------------+ Stefan Reich <reich@halbling.de> + + This program may not be used, modified or distributed + without prior permission by the authors of Eressea. + $Id: header.txt,v 1.3 2001/02/03 13:45:27 enno Exp $ */ diff --git a/src/mapper/map_modify.c b/src/mapper/map_modify.c index 539c8dc69..b4e18eb45 100644 --- a/src/mapper/map_modify.c +++ b/src/mapper/map_modify.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: map_modify.c,v 1.2 2001/01/26 16:19:41 enno Exp $ + * $Id: map_modify.c,v 1.3 2001/02/03 13:45:34 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -92,6 +92,7 @@ blockcoord(int x) } static char newblock[BLOCKSIZE][BLOCKSIZE]; +static int g_maxluxuries; static void block_create(int x1, int y1, int size, char chaotisch, int special, char terrain) @@ -178,16 +179,14 @@ block_create(int x1, int y1, int size, char chaotisch, int special, char terrain * Landstriche werden benannt und bevoelkert, und die produkte * p1 und p2 des Kontinentes werden gesetzt. */ region *r; -#ifdef NEW_ITEMS - static int maxluxuries = 0; int i, i1, i2; const luxury_type *ltype, *p1 = NULL, *p2=NULL; - if (maxluxuries==0) { - for (ltype = luxurytypes;ltype;ltype=ltype->next) ++maxluxuries; + if (g_maxluxuries==0) { + for (ltype = luxurytypes;ltype;ltype=ltype->next) ++g_maxluxuries; } - i1 = (item_t)(rand() % maxluxuries); + i1 = (item_t)(rand() % g_maxluxuries); do { - i2 = (item_t)(rand() % maxluxuries); + i2 = (item_t)(rand() % g_maxluxuries); } while (i2 == i1); ltype = luxurytypes; @@ -196,22 +195,9 @@ block_create(int x1, int y1, int size, char chaotisch, int special, char terrain else if (i==i2) p2=ltype; ltype=ltype->next; } -#else - item_t p1, p2; - p1 = (item_t)(rand() % MAXLUXURIES); - do { - p2 = (item_t)(rand() % MAXLUXURIES); - } - while (p2 == p1); -#endif for (x = 0; x != BLOCKSIZE; x++) { for (y = 0; y != BLOCKSIZE; y++) { -#ifdef NEW_ITEMS - struct demand * dmd; const luxury_type * sale = (rand()%2)?p1:p2; -#else - item_t i; -#endif r = findregion(x1 + x, y1 + y); if (r) continue; r = new_region(x1 + x, y1 + y); @@ -226,13 +212,7 @@ block_create(int x1, int y1, int size, char chaotisch, int special, char terrain } else { terraform(r, newblock[x][y]); } - if (r->land) for (ltype=luxurytypes; ltype; ltype=ltype->next) { - dmd = calloc(sizeof(struct demand), 1); - dmd->type = ltype; - if (ltype!=sale) dmd->value = 1 + rand() % 5; - dmd->next = r->land->demands; - r->land->demands = dmd; - } + if (r->land) setluxuries(r, sale); } } } @@ -916,7 +896,7 @@ make_new_region(int x, int y) wAddstr(buf); } wrefresh(win); - r->terrain = (char) map_input(win, 2, 3, "Terraintyp", 0, MAXTERRAINS-1, 0); + terraform(r, (terrain_t) map_input(win, 2, 3, "Terraintyp", 0, MAXTERRAINS-1, 0)); for (; z > 3; z--) { wmove(win, z, 2); wclrtoeol(win); diff --git a/src/mapper/map_partei.c b/src/mapper/map_partei.c index 243f2186b..5ebaa6231 100644 --- a/src/mapper/map_partei.c +++ b/src/mapper/map_partei.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: map_partei.c,v 1.2 2001/01/26 16:19:41 enno Exp $ + * $Id: map_partei.c,v 1.3 2001/02/03 13:45:34 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -350,7 +350,7 @@ NeuePartei(region * r) { int i, q, y; WINDOW *win; - char email[80]; + char email[INPUT_BUFSIZE+1]; race_t frace; int late; unit *u; diff --git a/src/mapper/map_region.c b/src/mapper/map_region.c index 834a15f98..49fa7f111 100644 --- a/src/mapper/map_region.c +++ b/src/mapper/map_region.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: map_region.c,v 1.2 2001/01/26 16:19:41 enno Exp $ + * $Id: map_region.c,v 1.3 2001/02/03 13:45:34 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -49,7 +49,7 @@ static dbllist *runten = NULL, *roben = NULL; static void -ClearRegion() +ClearRegion(void) { int line; refresh(); diff --git a/src/mapper/map_tools.c b/src/mapper/map_tools.c index f5ebf1be3..b1ab157f4 100644 --- a/src/mapper/map_tools.c +++ b/src/mapper/map_tools.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: map_tools.c,v 1.2 2001/01/26 16:19:41 enno Exp $ + * $Id: map_tools.c,v 1.3 2001/02/03 13:45:34 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -188,7 +188,7 @@ yes_no(WINDOW * win, const char *text, const char def) char * my_input(WINDOW * win, int x, int y, const char *text) { - static char buf[120]; + static char buf[INPUT_BUFSIZE+1]; int val, ch, p, nw = 0; if (!win) { win = openwin(SX - 10, 3, 0); @@ -215,16 +215,18 @@ my_input(WINDOW * win, int x, int y, const char *text) wmove(win, y, val + p); wrefresh(win); } - } else if (ch == 10 || ch == 13) { + } else if (ch == '\n') { curs_set(0); - } else if (isprint(ch) && x < 68) { + } if(val >= INPUT_BUFSIZE) { + beep(); + } else if (isprint(ch)) { waddch(win, ch); buf[val] = (char) ch; val++; } else beep(); wrefresh(win); - } while (!(ch == 10 || ch == 13)); + } while (!(ch == '\n')); if (nw) delwin(win); curs_set(0); diff --git a/src/mapper/mapper-6.dsp b/src/mapper/mapper-6.dsp index 401ed3cee..35fb2f16c 100644 --- a/src/mapper/mapper-6.dsp +++ b/src/mapper/mapper-6.dsp @@ -39,9 +39,10 @@ RSC=rc.exe # 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 "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /Za /W4 /GX /Z7 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE RSC /l 0x407 /d "NDEBUG" # ADD RSC /l 0x407 /d "NDEBUG" BSC32=bscmake.exe @@ -49,7 +50,7 @@ BSC32=bscmake.exe # 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 /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 !ELSEIF "$(CFG)" == "mapper - Win32 Debug" @@ -65,12 +66,12 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /Za /W4 /Gm /ZI /Od /I ".." /I "../common" /I "../common/util" /I "../common/kernel" /I "../common/gamecode" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX"stdafx.h" /FD /c +# ADD CPP /nologo /Za /W4 /Gm /ZI /Od /I ".." /I "../common" /I "../common/util" /I "../common/kernel" /I "../common/gamecode" /D "_CONSOLE" /D "_MBCS" /D "WIN32" /D "_DEBUG" /D "BETA_CODE" /FR /YX"stdafx.h" /FD /c # ADD BASE RSC /l 0x407 /d "_DEBUG" # ADD RSC /l 0x407 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo -# ADD BSC32 /nologo /S (*.h ../*.h ../kernel/eressea.h ../util/*.h ../triggers/*.h) ../kernel/Debug/*.sbr ../triggers/Debug/*.sbr ../util/Debug/*.sbr +# ADD BSC32 /nologo /S (*.h ../*.h ../common/kernel/*.h ../common/attributes/*.h ../common/spells/*.h ../common/triggers/*.h ../common/items/*.h ../common/modules/*.h ../common/util/*.h) ../common/util/Debug/*.sbr ../common/items/Debug/*.sbr ../common/attributes/Debug/*.sbr ../common/kernel/Debug/*.sbr ../common/spells/Debug/*.sbr ../common/modules/Debug/*.sbr 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 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 curses.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/mapper.exe" /pdbtype:sept diff --git a/src/mapper/mapper.c b/src/mapper/mapper.c index eed0c3d2e..9f47851df 100644 --- a/src/mapper/mapper.c +++ b/src/mapper/mapper.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: mapper.c,v 1.3 2001/01/28 08:20:05 enno Exp $ + * $Id: mapper.c,v 1.4 2001/02/03 13:45:34 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -1194,7 +1194,7 @@ main(int argc, char *argv[]) } initgame(); - register_triggers(); + init_triggers(); init_locales(); init_attributes(); diff --git a/src/mapper/mapper.h b/src/mapper/mapper.h index 4fbda0a05..5a0b0956f 100644 --- a/src/mapper/mapper.h +++ b/src/mapper/mapper.h @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: mapper.h,v 1.2 2001/01/26 16:19:41 enno Exp $ + * $Id: mapper.h,v 1.3 2001/02/03 13:45:34 enno Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -15,6 +15,10 @@ #ifndef MAPPER_H #define MAPPER_H +#define INPUT_BUFSIZE 80 + +#include <terrain.h> + #ifndef ISLANDSIZE # define ISLANDSIZE ((rand()%3)?(25+rand()%10):(11+rand()%14)) #endif diff --git a/src/res/de/items/Adler b/src/res/de/items/Adler new file mode 100644 index 000000000..182dec01c --- /dev/null +++ b/src/res/de/items/Adler @@ -0,0 +1 @@ +Der Adler ist ein ausgezeichneter Sp�her, fliegend �berquert er sogar kurze Meerengen, doch ist er hoch oben am Himmel auch sehr exponiert, was ihn beim Rasten zu einem leichten Ziel macht (Schaden: 2d3, Angriff 6, Verteidigung 2, 15 Trefferpunkte). diff --git a/src/res/de/items/Amulett der Heilung b/src/res/de/items/Amulett der Heilung new file mode 100644 index 000000000..a5e95a716 --- /dev/null +++ b/src/res/de/items/Amulett der Heilung @@ -0,0 +1 @@ +Diese Amulett ist ein hervorragender Fokus f�r alle Heilzauber. Ein mit diesem Fokus gewirkter Heilzauber wird mit gr��erer Warscheinlichkeit Erfolgreich sein und doppelt so viele Leute heilen k�nnen. diff --git a/src/res/de/items/Amulett des Todes b/src/res/de/items/Amulett des Todes new file mode 100644 index 000000000..c35d24365 --- /dev/null +++ b/src/res/de/items/Amulett des Todes @@ -0,0 +1 @@ +"Und willzt thou starck sein im Kampfe, so warthe bis ez Nachth izt im vollen Monde. Dann invokiere Belzahor und Nigramoth, und rufe die Daimonica herab auf ein ehern Amulette. Nun maghst thou ez tragen in der Schlachte, so du maghisch begabet bizt, und sieh wie deine Feinde krepieren vor dem waz sich Amulette des Thodes nennet" - Aus dem "Arkanum", geschrieben im Jahre 1 diff --git a/src/res/de/items/Amulett des wahren Sehens b/src/res/de/items/Amulett des wahren Sehens new file mode 100644 index 000000000..3f8a2ce20 --- /dev/null +++ b/src/res/de/items/Amulett des wahren Sehens @@ -0,0 +1 @@ +Das Amulett erlaubt es dem Tr�ger, alle Einheiten, die durch einen Ring der Unsichtbarkeit gesch�tzt sind, zu sehen. Einheiten allerdings, die sich mit ihrem Tarnungs-Talent verstecken, bleiben weiterhin unentdeckt. Die Herstellung des Amulettes kostet 3000 Silber. diff --git a/src/res/de/items/Antimagiekristall b/src/res/de/items/Antimagiekristall new file mode 100644 index 000000000..1dd15c8dc --- /dev/null +++ b/src/res/de/items/Antimagiekristall @@ -0,0 +1 @@ +F�r den unge�bten Betrachter mag der Antimagiekristall wie ein gew�hnlicher Quarzkristall ausschauen, doch ein Magier sp�rt, das ihm ganz besondere Kr�fte innewohnen. Durch spezielle Rituale antimagisch aufgeladen wird der Kristall, wenn er zu feinem Staub zermahlen und verteilt wird, die beim Zaubern freigesetzten magischen Energien aufsaugen und alle Zauber, welche in der betreffenden Woche in der Region gezaubert werden fehlschlagen lassen. diff --git a/src/res/de/items/Apfel b/src/res/de/items/Apfel new file mode 100644 index 000000000..b882356c8 --- /dev/null +++ b/src/res/de/items/Apfel @@ -0,0 +1 @@ +Frucht aus der Gattung Malus (ca. 25 Arten), geh�rt zur Familie der Rosengew�chse. Die am h�ufigsten kultivierte Baumfrucht. Der Apfel geh�rt zu den fleischigen Fr�chten, in dem der gereifte Fruchtknoten und das umgebende Gewebe fleischig und e�bar werden. Die Apfelbl�te der meisten Varianten erfordert Kreuzbest�ubung zur Befruchtung. Form und Gr��e des Apfels bei der Ernte variieren abh�ngig von kulturellen und umweltbedingten Einfl�ssen in Gr��e, Form, Farbe und Geschmack, sind jedoch nichtsdestotrotz �blicherweise rund, zwischen 50 und 100mm im Durchmesser und weisen r�t- oder gelbliche Farbt�ne auf. diff --git a/src/res/de/items/Auge des Drachen b/src/res/de/items/Auge des Drachen new file mode 100644 index 000000000..4e8bca10e --- /dev/null +++ b/src/res/de/items/Auge des Drachen @@ -0,0 +1 @@ +So wisse denn, dass das Auge des Drachen den Weg zur Herausforderung aufzeigt. Doch die �berlieferung sagt, das nur der Unschuldige und Ungewappnete es benutzen kann. Sie sagt auch, da� er einen Beutel mit einem Betrag von bis zu zweitausend Silber mit sich f�hren soll, jedoch nicht mehr als einem F�nftel der St�rke seines Volkes entsprechend - dem Torw�chter zum Geschenke als Beweis seiner asketischen Gesinnung. Die 5 scheidet ganz aus. diff --git a/src/res/de/items/Auge des Dämon b/src/res/de/items/Auge des Dämon new file mode 100644 index 000000000..fc80023ed --- /dev/null +++ b/src/res/de/items/Auge des Dämon @@ -0,0 +1 @@ +Gl�ckwunsch, mein Kind. Du bist im Besitz des m�chtigsten Artefaktes Eresseas. Ein Fluch, sagt man, liege auf ihm, denn niemand hat es bisher lange sein Eigen genannt... diff --git a/src/res/de/items/Einhorn b/src/res/de/items/Einhorn new file mode 100644 index 000000000..0cd9aad13 --- /dev/null +++ b/src/res/de/items/Einhorn @@ -0,0 +1 @@ +Dieses mystische Wesen lebt bevorzugt in den tiefsten W�ldern und vermag sich hervorragend vor den Augen anderer zu verbergen. Nur selten schlie�t sich ein Einhorn einem Magier an, jedoch wenn das geschieht ist es ein m�chtiger Verb�ndeter, der auch �ber eigene Magie verf�gt. (2 Angriffe, Schaden: 3d12, 2d4, Angriff 6, Verteidigung 4, 40 Trefferpunkte). diff --git a/src/res/de/items/Elfenpferd b/src/res/de/items/Elfenpferd new file mode 100644 index 000000000..fcf5e674f --- /dev/null +++ b/src/res/de/items/Elfenpferd @@ -0,0 +1 @@ +Ein Elfenpferd wird sich nur den wenigsten jemals anschlie�en. Hat es jedoch seine Scheu �berwunden ist es ein sehr wertvoller Gef�hrte. Ein Elfenpferd ist schneller als ein Pferd. Zudem hilft es seinem Reiter im Kampf und unterst�tzt ihn mit seiner Magie. Es sind schwarze Elfenpferde bekannt, die sich sogar Orks angeschlossen haben. diff --git a/src/res/de/items/Feenstiefel b/src/res/de/items/Feenstiefel new file mode 100644 index 000000000..1626b84cf --- /dev/null +++ b/src/res/de/items/Feenstiefel @@ -0,0 +1 @@ +Diese aus Leder gefertigten und mit Einhornfell verzierten Stiefel erm�glichen es ihrem Tr�ger, sich mit der doppelten Geschwindigkeit fortzubewegen, wenn er zu Fu� reist. diff --git a/src/res/de/items/Flammenschwert b/src/res/de/items/Flammenschwert new file mode 100644 index 000000000..d556559c4 --- /dev/null +++ b/src/res/de/items/Flammenschwert @@ -0,0 +1 @@ +Ein Flammenschwert gibt dem Tr�ger, der kein Magier sein mu�, zus�tzlich zu seinem normalen Angriff (3d6+10) einen kleinen Feuerballangriff, der bei 1-10 Opfern 2d6 magischen Schaden verursacht. Um ein Flammenschwert f�hren zu k�nnen, muss man mindestens Hiebwaffen 7 haben, dann verleiht es einem auch einen zus�tzlichen Kampfbonus von +1. Ein Flammenschwert erh�ht die Magieresistenz seines Tr�gers wie ein Laenschwert. diff --git a/src/res/de/items/Keks b/src/res/de/items/Keks new file mode 100644 index 000000000..ad2d8fa20 --- /dev/null +++ b/src/res/de/items/Keks @@ -0,0 +1 @@ +Kleines trockenes Dauergeb�ck, m od. s; - u. -es, - u. -e diff --git a/src/res/de/items/Kröte b/src/res/de/items/Kröte new file mode 100644 index 000000000..8d2e33fca --- /dev/null +++ b/src/res/de/items/Kröte @@ -0,0 +1 @@ +Die Kr�te ist eine der seltensten Rassen Eresseas. Man munkelt, sie w�rde nur auf magische Weise entstehen. In einer uralten Abhandlung �ber Magie aus der Bibliothek der Akademie von Xontormia wird die Theorie aufgestellt, das die Kr�te die ins morphische Feld des Magiers �bertragene Manifestation eines implodierten Zauberfeldes sein k�nnte. Vieleicht deswegen ist die Kr�te auch gegen Zauber weitaus widerstandsf�higer als die normalen Rassen Eresseas, leider aber auch weitaus unmagischer als diese. Die Kr�te kann schon aufgrund ihrer Gr��e und der fehlenden H�nde nur unter Schwierigkeiten normale T�tigkeiten aus�ben. Der einzige Vorteil ihrer geringen Gr��e ist, dass sie sich leichter Verstecken kann. diff --git a/src/res/de/items/Luchs b/src/res/de/items/Luchs new file mode 100644 index 000000000..f81430b66 --- /dev/null +++ b/src/res/de/items/Luchs @@ -0,0 +1 @@ +Der Luchs ist bekannt f�r seine Geschicklichkeit im Verbergen und Beobachten. Mit ein wenig Geduld kann er zu einem hervorragenden Sp�her ausgebildet werden. Im Kampf verteidigt er sich mit seinen scharfen Krallen und wei� seine Gewandheit zu nutzen (Schaden: 2d3, Angriff 4, Verteidigung 5, 20 Trefferpunkte). diff --git a/src/res/de/items/Mandelkern b/src/res/de/items/Mandelkern new file mode 100644 index 000000000..1bd140785 --- /dev/null +++ b/src/res/de/items/Mandelkern @@ -0,0 +1 @@ +(Prunus dulcis) [...] Die N�sse existieren in zwei Varianten, s�� und bitter. S��e Mandeln sind der bekannte e�bare Typ, der in Form von N�ssen gegessen, beim Kochen verwandt oder zu Mandel�l und Mandelmehl verarbeitet wird. diff --git a/src/res/de/items/Mantel der Unverletzlichkeit b/src/res/de/items/Mantel der Unverletzlichkeit new file mode 100644 index 000000000..44e464b84 --- /dev/null +++ b/src/res/de/items/Mantel der Unverletzlichkeit @@ -0,0 +1 @@ +Es hei�t, da�, in diesen Mantel gewandet, ein Krieger eine ganze Armee von Feinden niederk�mpfen k�nne. Nun, dies mag ein wenig �bertrieben sein, wahr ist auf jeden Fall, da� der Mantel den besten Schutz bietet, der auf Eressea zu finden ist. Vor allem sch�tzt er, anders als nichtmagische R�stungen, sowohl vor physischen als auch vor magischen Gewalten. Werden die anst�rmenden Kr�fte aber zu gro�, mu� auch der Mantel versagen. diff --git a/src/res/de/items/Nuß b/src/res/de/items/Nuß new file mode 100644 index 000000000..42b38d250 --- /dev/null +++ b/src/res/de/items/Nuß @@ -0,0 +1 @@ +Nu�, im umgangssprachlichen Sinne alle trockenen, hartschaligen Fr�chte oder Samen, die eine Schale besitzen, die sich leicht vom inneren, e�baren Kern entfernen l��t. In der botanischen Terminologie beschr�nkt sich die Bezeichnung Nu� auf eine einsamige Frucht, die aus einem Fruchtknoten (Ovarium) entstanden ist, dessen �u�ere W�nde sich verholzt haben und der sich nicht �ffnet, um seinen Samen zu entlassen. Solche echten N�sse k�nnen e�bar, aber auch ungenie�bar sein. Bekannte Beispiele sind Eicheln, Bucheckern, Kastanien und Haseln�sse. Beispiele f�r Fr�chte oder Samen, die vom Volksmund f�lschlich als N�sse bezeichnet werden, sind Mandeln und Waln�sse: Im botanischen Sinne sind dies Steinfr�chte, denen die fleischige �u�ere Schale entfernt wurde. Andere Beispiele f�r unechte N�sse sind Erdn�sse - in H�lsen eingeschlossene Samen - sowie Ro�kastanien und Paran�sse, bei denen es sich um von Kapseln umh�llte Samen handelt. diff --git a/src/res/de/items/Ring der Macht b/src/res/de/items/Ring der Macht new file mode 100644 index 000000000..50c0068b1 --- /dev/null +++ b/src/res/de/items/Ring der Macht @@ -0,0 +1 @@ +Ein Ring der Macht verst�rkt die Kraft des Magiers. Jeder Zauber wird, ohne das sich die Kosten erh�hen, so gezaubert als h�tte der Magier eine Stufe mehr. diff --git a/src/res/de/items/Ring der Unsichtbarkeit b/src/res/de/items/Ring der Unsichtbarkeit new file mode 100644 index 000000000..e2a95e4d9 --- /dev/null +++ b/src/res/de/items/Ring der Unsichtbarkeit @@ -0,0 +1 @@ +Dieses magische Artefakt wurde seit Urzeiten von den Elfen benutzt, auf der Jagd oder um sich vor Feinden zu verbergen. Doch auch andere Rassen haben nach der Begegnung mit den Elfenv�lkern den Wert des Rings schnell sch�tzen gelernt - schlie�lich macht er den Tr�ger f�r jedes noch so scharfe Auge unsichtbar - nur mit magischen Mitteln ist der Verborgene noch zu entdecken. diff --git a/src/res/de/items/Runenschwert b/src/res/de/items/Runenschwert new file mode 100644 index 000000000..f3211387c --- /dev/null +++ b/src/res/de/items/Runenschwert @@ -0,0 +1 @@ +Die r�tlich gl�hende Klinge dieser furchterregenden magischen Waffe ist mit dunklen Runen bedeckt. Nur die erfahrendsten Schwertk�mpfer verm�gen ihre Kraft zu z�hmen, doch in ihrer Hand vermag dem Runenschwert nichts zu widerstehen - selbst magische R�stungen durchdringt es ohne Schwierigkeiten - und den Geist des K�mpfers f�llt es mit untersch�tterlicher Zuversicht. diff --git a/src/res/de/items/Schildstein b/src/res/de/items/Schildstein new file mode 100644 index 000000000..5c148b6a6 --- /dev/null +++ b/src/res/de/items/Schildstein @@ -0,0 +1 @@ +Geformt aus dem seltenen Feuerrubin vermag dieses Artefakt wahre Wunder zu vollbringen. In der Hand eines magisch Begabten vermag es ein Schild um eine ganze Armee zu legen, um sie zu sch�tzen vor magischen Attacken. Ja, f�rwahr eines der m�chtigsten Artefakte Eresseas, und jeder deiner Magier sollte eines mit sich f�hren, so du die M�glichkeit dazu hast. diff --git a/src/res/de/items/Schwinge des Greifen b/src/res/de/items/Schwinge des Greifen new file mode 100644 index 000000000..a158d4df2 --- /dev/null +++ b/src/res/de/items/Schwinge des Greifen @@ -0,0 +1 @@ +Dieses Flugger�t aus der Schmiede der Zwerge von Celeband galt wie die 'Ebene der Herausforderung' seit Urzeiten als verschollen, ja man zweifelte seine Existenz an. Die Sage �berliefert, das derjenige, der sie auf der Spitze des Turmes seiner Gesinnung benutzt, als einziger die 'Ebene der Herausforderungen' verlassen kann. diff --git a/src/res/de/items/Szepter der Tränen b/src/res/de/items/Szepter der Tränen new file mode 100644 index 000000000..223b03c50 --- /dev/null +++ b/src/res/de/items/Szepter der Tränen @@ -0,0 +1 @@ +Dieses magische Szepter, ein Geschenk Igjarjuks, sorgt f�r gro�e Verwirrung und Ged�chtnisverlust. Syntax: BENUTZE "Szepter der Tr�nen" diff --git a/src/res/de/items/Traumauge b/src/res/de/items/Traumauge new file mode 100644 index 000000000..ec43aceaf --- /dev/null +++ b/src/res/de/items/Traumauge @@ -0,0 +1 @@ +Dieses verzauberte Drachenauge mu� vor dem Abend einer Schlacht vom Heerf�hrer verzehrt werden. W�hrend der Nacht wird er dann Einblick in die Tr�ume der feindlichen Heerf�hrer erhalten und so m�glicherweise einen entscheidenden Vorteil im kommenden Gefecht erlangen. diff --git a/src/res/de/items/Tunnelwurm b/src/res/de/items/Tunnelwurm new file mode 100644 index 000000000..b4ea490fc --- /dev/null +++ b/src/res/de/items/Tunnelwurm @@ -0,0 +1 @@ +Diese aus den Tiefen Eresseas stammende gigantische Gesch�pf ist dem Leben im Untergrund hervorragend angepasst. Blind, taub und nicht besonders intelligent, aber mit seinen gewaltigen Kr�ften kann es ganze Berge versetzen oder W�lder roden. (Schaden: 3d20, Angriff 6, Verteidigung 1, R�stung 6, 300 Trefferpunkte) diff --git a/src/res/de/items/Warg b/src/res/de/items/Warg new file mode 100644 index 000000000..0c0a2d02d --- /dev/null +++ b/src/res/de/items/Warg @@ -0,0 +1 @@ +Diese gro�en W�lfe sind nicht alle so wild und b�se wie in den Legenden berichtet, und einige von ihnen schlie�en sich auch guten Magier bereitwillig an und sind ihnen dann treue Gef�hrten. (3 Angriffe, Schaden: 2d6, 1d4, 1d4, Angriff 6, Verteidigung 3, 25 Trefferpunkte). diff --git a/src/res/de/items/Zauberbeutel b/src/res/de/items/Zauberbeutel new file mode 100644 index 000000000..26aa53ebf --- /dev/null +++ b/src/res/de/items/Zauberbeutel @@ -0,0 +1,7 @@ +Dieser Beutel umschlie�t eine kleine Dimensionsfalte, in der bis +zu 200 Gewichtseinheiten transportiert werden k�nnen, ohne dass +sie auf das Traggewicht angerechnet werden. Pferde und andere +Lebewesen sowie besonders sperrige Dinge (Wagen und Katapulte) k�nnen +nicht in dem Beutel transportiert werden. Auch ist es nicht m�glich, +einen Zauberbeutel in einem anderen zu transportieren. Der Beutel +selber wiegt 1 GE. diff --git a/src/res/de/items/Zauberstab der Blitze b/src/res/de/items/Zauberstab der Blitze new file mode 100644 index 000000000..1d29fe03c --- /dev/null +++ b/src/res/de/items/Zauberstab der Blitze @@ -0,0 +1 @@ +Jeder Magier kann dann im Kampf Blitze verschleudern. Die Herstellung kostet 2000 Silber. diff --git a/src/res/de/items/Zauberstab der Teleportation b/src/res/de/items/Zauberstab der Teleportation new file mode 100644 index 000000000..1477817ec --- /dev/null +++ b/src/res/de/items/Zauberstab der Teleportation @@ -0,0 +1 @@ +Der Zauberstab erlaubt es jedem Magier, Einheiten zu sich zu teleportieren. Dazu gibt man dem Magier den Befehl 'ZAUBER TELEPORTATION x y Einheit ...'. Alle Zieleinheiten m�ssen in derselben Region 'x y' sein, und sie d�rfen sich nicht auf dem Ozean befinden. Wenn die Ziel-Einheiten nicht zur eigenen Partei geh�ren, m�ssen sie in dieser Woche mit dem Magier Kontakt aufgenommen haben. Das Gesamtgewicht aller Einheiten - Leute, Silber, Pferde und Ausr�stung - darf maximal 1000 dividiert durch die Entfernung zur Zielregion betragen. Der Zauberstab kostet 4000 Silber, und die Vorbereitungen f�r jede Teleportation kosten nochmals 50 Silber. diff --git a/src/res/de/items/Zauberstab des Feuers b/src/res/de/items/Zauberstab des Feuers new file mode 100644 index 000000000..8aa9f018d --- /dev/null +++ b/src/res/de/items/Zauberstab des Feuers @@ -0,0 +1 @@ +Im Kampf kann der Magier damit Feuerb�lle verschleudern. Der Benutzer mu� der Magie kundig sein. Der Stab kostet 3000 Silber. diff --git a/src/res/de/messages.txt b/src/res/de/messages.txt new file mode 100644 index 000000000..a899bf57e --- /dev/null +++ b/src/res/de/messages.txt @@ -0,0 +1,522 @@ +# Kommentare sind erlaubt. Endlich. +# $Id: messages.txt,v 1.1 2001/02/03 13:45:34 enno Exp $ + +# Fehlermeldungen: +msg_errors;errors:0;de;{string} +mistake;errors:0;de;{unit} in {region}: '{command}' - {error}. +error1;errors:0;de;{unit} in {region}: '{command}' - Auf dem Schiff befinden sich zuwenig erfahrene Seeleute. +error2;errors:2;de;{unit} in {region}: '{command}' - Auf hoher See kann man nicht bewachen. +error3;errors:3;de;{unit} in {region}: '{command}' - Beschreibung zu lang - gek�rzt. +error4;errors:0;de;{unit} in {region}: '{command}' - Das Geb�ude ist bereits fertig. +error5;errors:0;de;{unit} in {region}: '{command}' - Das Geb�ude geh�rt uns nicht. +error6;errors:0;de;{unit} in {region}: '{command}' - Das Geb�ude wurde nicht gefunden. +error7;errors:0;de;{unit} in {region}: '{command}' - Das geht nicht mehr. +error8;errors:1;de;{unit} in {region}: '{command}' - Das ist sinnlos. +error9;errors:0;de;{unit} in {region}: '{command}' - Das kann man nicht sabotieren. +error10;errors:1;de;{unit} in {region}: '{command}' - Das macht wenig Sinn. +error11;errors:0;de;{unit} in {region}: '{command}' - Das Schiff befindet sich auf hoher See. +error12;errors:0;de;{unit} in {region}: '{command}' - Das Schiff geh�rt uns nicht. +error13;errors:0;de;{unit} in {region}: '{command}' - Das Schiff hat sich bereits bewegt. +error14;errors:0;de;{unit} in {region}: '{command}' - Das Schiff ist auf hoher See. +error15;errors:0;de;{unit} in {region}: '{command}' - Das Schiff ist noch nicht fertig gebaut. +error16;errors:0;de;{unit} in {region}: '{command}' - Das Schiff ist schon fertig. +error17;errors:0;de;{unit} in {region}: '{command}' - Das Schiff ist zu schwer beladen, um fliegen zu k�nnen. +error18;errors:0;de;{unit} in {region}: '{command}' - Das Schiff ist zu schwer beladen, um in See zu stechen. +error19;errors:0;de;{unit} in {region}: '{command}' - Das Schiff mu� erst verlassen werden. +error20;errors:0;de;{unit} in {region}: '{command}' - Das Schiff wurde nicht gefunden. +error21;errors:0;de;{unit} in {region}: '{command}' - Dazu gibt es keine Informationen. +error22;errors:0;de;{unit} in {region}: '{command}' - Der Befehl wurde nicht erkannt. +error23;errors:0;de;{unit} in {region}: '{command}' - Der Belagerungszustand macht die Kontaktaufnahme unm�glich. +error24;errors:0;de;{unit} in {region}: '{command}' - Der Belagerungszustand macht Spionage unm�glich. +error25;errors:0;de;{unit} in {region}: '{command}' - Der Fluch verhindert das. +error26;errors:0;de;{unit} in {region}: '{command}' - Die Anzahl zu kaufender Produkte fehlt. +error27;errors:0;de;{unit} in {region}: '{command}' - Die Anzahl zu verkaufender Produkte fehlt. +error28;errors:0;de;{unit} in {region}: '{command}' - Die Bauern sind schlecht gelaunt. +error29;errors:0;de;{unit} in {region}: '{command}' - Die Beschreibung von Monumenten kann man nicht ver�ndern. +error30;errors:0;de;{unit} in {region}: '{command}' - Die Botschaft enth�lt keinen Text. +error31;errors:0;de;{unit} in {region}: '{command}' - Die Burg wurde nicht gefunden. +error32;errors:0;de;{unit} in {region}: '{command}' - Die Einheit befindet sich nicht an Bord unseres Schiffes. +error33;errors:0;de;{unit} in {region}: '{command}' - Die Einheit befindet sich nicht in unserer Burg. +error34;errors:0;de;{unit} in {region}: '{command}' - Die Einheit darf nicht an Bord kommen. +error35;errors:0;de;{unit} in {region}: '{command}' - Die Einheit hat diese Kr�uter nicht. +error36;errors:0;de;{unit} in {region}: '{command}' - Die Einheit hat diesen Gegenstand nicht. +error37;errors:0;de;{unit} in {region}: '{command}' - Die Einheit hat diesen Trank nicht. +error38;errors:0;de;{unit} in {region}: '{command}' - Die Einheit hat keine Kr�uter. +error39;errors:0;de;{unit} in {region}: '{command}' - Die Einheit hat keine Spionage gelernt. +error40;errors:0;de;{unit} in {region}: '{command}' - Die Einheit hat keinen Kontakt mit uns aufgenommen. +error41;errors:0;de;{unit} in {region}: '{command}' - Die Einheit hat nicht genug Silber. +error42;errors:0;de;{unit} in {region}: '{command}' - Die Einheit hat nicht genug Wagenlenker oder zuviel andere Fracht, um die Wagen aufzuladen. +error43;errors:0;de;{unit} in {region}: '{command}' - Die Einheit hat soetwas nicht. +error44;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist auf hoher See. +error45;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist eine der unsrigen. +error46;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist in keiner Taverne. +error47;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist mit uns alliiert. +error48;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist nicht bewaffnet und kampff�hig. +error49;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist nicht der Eigent�mer. +error50;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist nicht erfahren genug daf�r. +error51;errors:0;de;{unit} in {region}: '{command}' - Die Einheit hat nicht genug Silber. +error52;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist vom Kampf ersch�pft. +error53;errors:0;de;{unit} in {region}: '{command}' - Die Einheit kann keine Tr�nke herstellen. +error54;errors:0;de;{unit} in {region}: '{command}' - Die Einheit kann nicht handeln. +error55;errors:0;de;{unit} in {region}: '{command}' - Die Einheit kann sich nicht fortbewegen. +error56;errors:0;de;{unit} in {region}: '{command}' - Die Einheit kann soviele Pferde nicht b�ndigen. +error57;errors:0;de;{unit} in {region}: '{command}' - Die Einheit tr�gt zuviel Gewicht, um sich bewegen zu k�nnen. +error58;errors:0;de;{unit} in {region}: '{command}' - Die Einheit wei� nicht, wie man gaukelt. +error59;errors:0;de;{unit} in {region}: '{command}' - Die Einheit wei� nichts �ber Botanik. +# Liefere +error63;errors:4;de;{unit} in {region}: '{command}' - Die Einheit wurde nicht gefunden. +# +error64;errors:0;de;{unit} in {region}: '{command}' - Die Einheit wurde nicht gefunden. +error65;errors:0;de;{unit} in {region}: '{command}' - Die Lernkosten k�nnen nicht bezahlt werden. +error66;errors:0;de;{unit} in {region}: '{command}' - Die Partei wurde nicht gefunden. +error67;errors:0;de;{unit} in {region}: '{command}' - Die Pferde w�rden ertrinken. +error70;errors:0;de;{unit} in {region}: '{command}' - Die Region wird von Nichtalliierten bewacht. +error71;errors:0;de;{unit} in {region}: '{command}' - Die Richtung wurde nicht erkannt. +error72;errors:0;de;{unit} in {region}: '{command}' - Die Ziel-Einheit hat keinen Kontakt mit uns aufgenommen. +error73;errors:0;de;{unit} in {region}: '{command}' - Die Zieleinheit hat uns nicht kontaktiert. +error74;errors:0;de;{unit} in {region}: '{command}' - Eine hungernde Einheit kann niemanden weggeben. +error75;errors:0;de;{unit} in {region}: '{command}' - Die Einheit nimmt niemanden an. +error76;errors:0;de;{unit} in {region}: '{command}' - Diesen Gegenstand kann man nicht benutzen. +error77;errors:0;de;{unit} in {region}: '{command}' - Dieses Talent wurde nicht erkannt. +error78;errors:0;de;{unit} in {region}: '{command}' - Ein Fluch verhindert die �bergabe. +error79;errors:0;de;{unit} in {region}: '{command}' - Ein Schiff oder eine Burg mu� angegeben werden. +error80;errors:0;de;{unit} in {region}: '{command}' - Einheit ist nicht bewaffnet und kampff�hig. +error81;errors:0;de;{unit} in {region}: '{command}' - Einheit mu� zuerst die Region bewachen. +error82;errors:0;de;{unit} in {region}: '{command}' - Es gibt keine Abstimmung mit dieser Nummer. +error83;errors:0;de;{unit} in {region}: '{command}' - Es konnte kein Bauer gefangen werden. +error84;errors:0;de;{unit} in {region}: '{command}' - Es wurde kein Name angegeben. +error85;errors:0;de;{unit} in {region}: '{command}' - Es wurde keine EMail-Adresse angegeben. +error86;errors:0;de;{unit} in {region}: '{command}' - Falsches Passwort. +error87;errors:0;de;{unit} in {region}: '{command}' - F�r das Elixier ben�tigt man Drachenblut. +error88;errors:0;de;{unit} in {region}: '{command}' - F�r den Schiffbau braucht man Holz. +error89;errors:0;de;{unit} in {region}: '{command}' - Geldgebot fehlt. +error90;errors:0;de;{unit} in {region}: '{command}' - Die Einheit hat keinen FAHRE-Befehl. +error91;errors:0;de;{unit} in {region}: '{command}' - Hier gibt es keine Mallornb�ume. +error92;errors:0;de;{unit} in {region}: '{command}' - Hier gibt es keinen normalen Wald. +error93;errors:0;de;{unit} in {region}: '{command}' - Hier gibt es schon einen Hafen. +error94;errors:0;de;{unit} in {region}: '{command}' - Hier kann man keine Stra�e bauen. +error95;errors:0;de;{unit} in {region}: '{command}' - Illusionen k�nnen eine Region nicht bewachen. +error96;errors:0;de;{unit} in {region}: '{command}' - In dieser Einheit gibt es niemanden, den man transferieren k�nnte. +error97;errors:0;de;{unit} in {region}: '{command}' - In Gletschern k�nnen keine Insekten rekrutiert werden. +error98;errors:0;de;{unit} in {region}: '{command}' - Insekten k�nnen im Winter nur in W�sten rekrutiert werden. +error99;errors:0;de;{unit} in {region}: '{command}' - Kann die zu transportierende Einheit nicht finden. +error100;errors:0;de;{unit} in {region}: '{command}' - Keiner hier ist gelernter Schiffbauer. +error101;errors:0;de;{unit} in {region}: '{command}' - Keiner hier kann ein Geb�ude errichten. +error102;errors:0;de;{unit} in {region}: '{command}' - Keiner hier kann handeln. +error103;errors:0;de;{unit} in {region}: '{command}' - Keiner hier kann Stra�en bauen. +error104;errors:0;de;{unit} in {region}: '{command}' - Laen kann nur einem Bergwerk abgebaut werden. +error105;errors:0;de;{unit} in {region}: '{command}' - Leere Einheiten k�nnen nicht �bergeben werden. +error106;errors:0;de;{unit} in {region}: '{command}' - Magier m�ssen zum studieren allein sein. +error107;errors:0;de;{unit} in {region}: '{command}' - Man braucht mindestens zwei Pferde, um sie zu z�chten. +error108;errors:0;de;{unit} in {region}: '{command}' - Es sind keine Kr�uter zu finden. +error109;errors:0;de;{unit} in {region}: '{command}' - Man mu� angeben, ob eine Burg, ein Schiff, eine Einheit, eine Region oder eine Partei benannt werden soll. +error110;errors:0;de;{unit} in {region}: '{command}' - Man mu� angeben, ob eine Burg, ein Schiff, eine Region oder eine Einheit beschrieben werden soll. +error111;errors:0;de;{unit} in {region}: '{command}' - Nachricht zu lang - gek�rzt. +error112;errors:0;de;{unit} in {region}: '{command}' - Namen d�rfen keine Klammern enthalten. +error113;errors:0;de;{unit} in {region}: '{command}' - Nichts angegeben, was wir �bergeben sollen. +error114;errors:0;de;{unit} in {region}: '{command}' - Nummer ist nicht im g�ltigen Bereich. +error115;errors:0;de;{unit} in {region}: '{command}' - Nummer ist schon belegt. +error116;errors:0;de;{unit} in {region}: '{command}' - Nummer kann nicht vergeben werden. +error117;errors:0;de;{unit} in {region}: '{command}' - Nur die EMail-Adresse angeben! +error118;errors:0;de;{unit} in {region}: '{command}' - Nur Elfen k�nnen diese B�gen herstellen. +error119;errors:0;de;{unit} in {region}: '{command}' - Ohne eine Burg gibt es keinen Markt. +error120;errors:0;de;{unit} in {region}: '{command}' - Personen k�nnen nur an Menschen �bergeben werden. +error122;errors:0;de;{unit} in {region}: '{command}' - Pferde kann man nur in einer Pferdezucht z�chten. +error123;errors:0;de;{unit} in {region}: '{command}' - So etwas hat die Einheit nicht. +error124;errors:0;de;{unit} in {region}: '{command}' - So etwas kann man nicht auf dem Markt kaufen. +error125;errors:0;de;{unit} in {region}: '{command}' - So etwas kann man nicht machen. +error126;errors:0;de;{unit} in {region}: '{command}' - So etwas kann man nicht verkaufen. +error127;errors:0;de;{unit} in {region}: '{command}' - So viele Fremde kann Deine Partei nicht aufnehmen. +error128;errors:0;de;{unit} in {region}: '{command}' - So viele Fremde kann die Partei nicht aufnehmen. +error129;errors:0;de;{unit} in {region}: '{command}' - So viele Leute kann die Partei nicht aufnehmen. +error130;errors:0;de;{unit} in {region}: '{command}' - Syntax: MAGIEGEBIET <1-5>. +error131;errors:0;de;{unit} in {region}: '{command}' - Um in Gletschern Stra�en bauen zu k�nnen, mu� zuerst ein Tunnel errichtet werden. +error132;errors:0;de;{unit} in {region}: '{command}' - Um in S�mpfen Stra�en bauen zu k�nnen, mu� zuerst ein Damm errichtet werden. +error133;errors:0;de;{unit} in {region}: '{command}' - Um in W�sten Stra�en bauen zu k�nnen, mu� zuerst eine Karawanserei errichtet werden. +error134;errors:0;de;{unit} in {region}: '{command}' - Unbekannte Meldungs-Option. +error137;errors:0;de;{unit} in {region}: '{command}' - Unbekannter Hilfe-Modus. +error138;errors:0;de;{unit} in {region}: '{command}' - Uns geh�rt nichts, was man abrei�en oder versenken k�nnte. +error139;errors:0;de;{unit} in {region}: '{command}' - Unterschiedliche Typen k�nnen nicht gemischt werden. +error140;errors:0;de;{unit} in {region}: '{command}' - Die Einheit befindet sich weder in einer Burg noch in einem Schiff. +error141;errors:0;de;{unit} in {region}: '{command}' - Die Einheit hat nicht mehr genug Kristalle f�r so viele Personen. +error142;errors:0;de;{unit} in {region}: '{command}' - Die Einheit hat zuwenig Silber, um zu rekrutieren. +error143;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist auf einem Schiff. +error144;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist auf keinem Schiff. +error145;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist in keiner Burg. +error146;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist nicht der Kapit�n des Schiffes. +error147;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist nicht Burgherr der gr��ten Burg in der Region. +error148;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist nicht der Burgherr. +error149;errors:0;de;{unit} in {region}: '{command}' - Wohin soll die Botschaft gehen? +error150;errors:0;de;{unit} in {region}: '{command}' - Zum Pflanzen braucht man mindestens Kr�uterkunde 6. +error151;errors:0;de;{unit} in {region}: '{command}' - Zum Stra�enbau braucht man Steine. +error60;errors:0;de;{unit} in {region}: '{command}' - Die Einheit wird belagert. +error135;errors:0;de;{unit} in {region}: '{command}' - Unbekannte Option. +error69;errors:0;de;{unit} in {region}: '{command}' - Die Region wird bewacht. +error152;errors:0;de;{unit} in {region}: '{command}' - Die Einheit springt �ber Bord und ertrinkt. +error153;errors:0;de;{unit} in {region}: '{command}' - Die Einheit schlie�t sich den Bauern an. +error154;errors:0;de;{unit} in {region}: '{command}' - Hochqualifizierte Personen weigern sich, f�r andere Parteien zu arbeiten. +error155;errors:0;de;{unit} in {region}: '{command}' - Zuviele Magier in der Partei. +error156;errors:0;de;{unit} in {region}: '{command}' - Zuviele Alchemisten in der Partei. +error157;errors:0;de;{unit} in {region}: '{command}' - Die Partei hat ein anderes Magiegebiet. +error158;errors:0;de;{unit} in {region}: '{command}' - Magier arbeiten grunds�tzlich nur alleine! +error159;errors:0;de;{unit} in {region}: '{command}' - Es konnten keine Personen �bergeben werden. +error160;errors:0;de;{unit} in {region}: '{command}' - Es konnten keine Luxusg�ter gekauft werden. +error161;errors:0;de;{unit} in {region}: '{command}' - Die Einheit besitzt den Trank nicht. +error162;errors:0;de;{unit} in {region}: '{command}' - Der Heiltrank wird automatisch bei Bedarf benutzt. +error163;errors:0;de;{unit} in {region}: '{command}' - Die Nestw�rme kann nur von Insektenv�lkern benutzt werden. +error164;errors:2;de;{unit} in {region}: '{command}' - Die Einheit benutzte einen Nestw�rmetrank. +error165;errors:0;de;{unit} in {region}: '{command}' - Der Trank bekommt der Einheit nicht. +error166;errors:0;de;{unit} in {region}: '{command}' - Diese Rasse kann eine Burg nicht belagern. +error167;errors:0;de;{unit} in {region}: '{command}' - Die Einheit geht nicht zu den Bauern. +error168;errors:0;de;{unit} in {region}: '{command}' - Es konnten keine Luxusg�ter verkauft werden. +error169;errors:0;de;{unit} in {region}: '{command}' - Diesen Zauber kennt die Einheit nicht. +error170;errors:0;de;{unit} in {region}: '{command}' - Die Bauern nehmen dieses gro�z�gige Geschenk nicht an. +error171;errors:0;de;{unit} in {region}: '{command}' - Diesen Kampfzauber gibt es nicht. +error172;errors:0;de;{unit} in {region}: '{command}' - Es wurde kein Zauber angegeben. +error173;errors:0;de;{unit} in {region}: '{command}' - Selbst in der Bibliothek von Xontormia konnte dieser Spruch nicht gefunden werden. +error174;errors:0;de;{unit} in {region}: '{command}' - Dieser Zauber ist nur im Kampf sinnvoll. +error175;errors:0;de;{unit} in {region}: '{command}' - Diesen Spruch kann man nicht auf einem sich bewegenden Schiff stehend zaubern. +error176;errors:0;de;{unit} in {region}: '{command}' - Diesen Spruch kann man nicht in die Ferne richten. +error177;errors:0;de;{unit} in {region}: '{command}' - Diesen Spruch kann der Vertraute nicht zaubern. +error178;errors:0;de;{unit} in {region}: '{command}' - Es wurde kein Magiegebiet angegeben. +error179;errors:0;de;{unit} in {region}: '{command}' - Dieses Magiegebiet kann die Einheit nicht lernen. +error180;errors:0;de;{unit} in {region}: '{command}' - Der Zauber schl�gt fehl. +error181;errors:0;de;{unit} in {region}: '{command}' - Dazu mu� sich der Magier in der Burg oder an Bord des Schiffes befinden. +error182;errors:0;de;{unit} in {region}: '{command}' - Das Schiff kann in diese Richtung nicht ablegen. +error183;errors:0;de;{unit} in {region}: '{command}' - Der Magier befindet sich nicht auf einem Schiff. +error184;errors:0;de;{unit} in {region}: '{command}' - Die Einheit bewegt sich nicht. +error185;errors:0;de;{unit} in {region}: '{command}' - Der Zauber scheint ungew�hnlich schwach zu sein. Irgendetwas hat die magischen Energien abgeleitet. +error186;errors:0;de;{unit} in {region}: '{command}' - Dieser Zauber kann nur auf Land gelegt werden. +error187;errors:0;de;{unit} in {region}: '{command}' - Hier gibt es bereits gute Stra�en. +error188;errors:0;de;{unit} in {region}: '{command}' - Dieser Zauber kann nicht im Sumpf gezaubert werden. +error189;errors:0;de;{unit} in {region}: '{command}' - Selbst der m�chtigste Magier der Welt k�nnte keinen Ozean austrocknen lassen. +error190;errors:0;de;{unit} in {region}: '{command}' - Der Zauber funktioniert nur in der materiellen Welt. +error191;errors:0;de;{unit} in {region}: '{command}' - Der Zauber funktioniert nur in W�ldern. +error192;errors:0;de;{unit} in {region}: '{command}' - Die Wege zur Geisterwelt scheinen blockiert zu sein. +error193;errors:0;de;{unit} in {region}: '{command}' - Der Zauber funktioniert nur in der Geisterwelt. +error194;errors:0;de;{unit} in {region}: '{command}' - Die Zielregion wurde nicht korrekt angegeben. +error195;errors:0;de;{unit} in {region}: '{command}' - Dorthin f�hrt kein Weg. +error196;errors:0;de;{unit} in {region}: '{command}' - Das ist keine Waldregion. +error197;errors:0;de;{unit} in {region}: '{command}' - Um einen Heimstein zu erschaffen, mu� der Zauberer in einer Burg sein. +error198;errors:0;de;{unit} in {region}: '{command}' - Die Flammen finden keine Nahrung. Das Feuer erlischt, ohne Schaden anzurichten. +error199;errors:0;de;{unit} in {region}: '{command}' - Der Magier hat bereits einen Vertrauten. +error200;errors:0;de;{unit} in {region}: '{command}' - Die maximale Aura reicht nicht f�r diesen Zauber. +error201;errors:0;de;{unit} in {region}: '{command}' - Rasse und Zieleinheit wurden vergessen. +error202;errors:0;de;{unit} in {region}: '{command}' - Das ist keine g�ltige Rasse. +error203;errors:0;de;{unit} in {region}: '{command}' - Das Ziel wurde vergessen. +error204;errors:0;de;{unit} in {region}: '{command}' - In einer Region ohne B�ume kann man diesen Zauber nicht wirken. +error205;errors:0;de;{unit} in {region}: '{command}' - Dieser Zauber gelingt nur in einer Ozeanregion. +error206;errors:0;de;{unit} in {region}: '{command}' - Auf dem Geb�ude liegt bereits so ein Zauber. +error207;errors:0;de;{unit} in {region}: '{command}' - Zu dieser Einheit kann keine Aura �bertragen werden. +error208;errors:0;de;{unit} in {region}: '{command}' - Auraangabe fehlerhaft. +error209;errors:0;de;{unit} in {region}: '{command}' - Syntax Error. +error210;errors:0;de;{unit} in {region}: '{command}' - Es ist zu gef�hrlich, ein sturmgepeitschtes Schiff fliegen zu lassen. +error211;errors:0;de;{unit} in {region}: '{command}' - Auf dem Schiff liegt bereits so ein Zauber. +error212;errors:0;de;{unit} in {region}: '{command}' - Der Magier befindet sich nicht auf einem Schiff. +error213;errors:0;de;{unit} in {region}: '{command}' - Parameter nicht korrekt angegeben. +error214;errors:0;de;{unit} in {region}: '{command}' - Einheit ist kein Magier. +error215;errors:0;de;{unit} in {region}: '{command}' - Von hier aus kann man die astrale Ebene nicht erreichen. +error216;errors:0;de;{unit} in {region}: '{command}' - Hier gibt es keine Verbindung zur astralen Welt. +error217;errors:0;de;{unit} in {region}: '{command}' - Dieser Zauber kann nur im Astralraum gezaubert werden. +error218;errors:0;de;{unit} in {region}: '{command}' - Die materielle Welt ist hier nicht sichtbar. +error220;errors:0;de;{unit} in {region}: '{command}' - Im astralen Nebel konnte niemand entdeckt werden. +error221;errors:0;de;{unit} in {region}: '{command}' - So etwas kann man nicht bauen. +error222;errors:0;de;{unit} in {region}: '{command}' - Zeige alle was? +error223;errors:0;de;{unit} in {region}: '{command}' - Hungernde Einheiten k�nnen nicht bewachen. +error224;errors:0;de;{unit} in {region}: '{command}' - Hungernde Einheiten k�nnen nicht zaubern. +error225;errors:0;de;{unit} in {region}: '{command}' - Hungernde Soldaten k�mpfen nicht. +error226;errors:0;de;{unit} in {region}: '{command}' - Einheiten in den hinteren Reihen k�nnen nicht angreifen. +error227;errors:0;de;{unit} in {region}: '{command}' - Daf�r braucht ein Einheit mindestens Kr�uterkunde 7. +error228;errors:0;de;{unit} in {region}: '{command}' - Nur normale Personen k�nnen Steuern eintreiben. +error229;errors:0;de;{unit} in {region}: '{command}' - Ein Vertrauter wird beschworen, verschwindet jedoch wieder, als er keine Verbindung zu seinem Element herstellen kann. +error230;errors:0;de;{unit} in {region}: '{command}' - Dorthin kann die Einheit uns nicht transportieren. +error231;errors:0;de;{unit} in {region}: '{command}' - Die Einheit oder ihre Tiere w�rden dort nicht �berleben. +error232;errors:0;de;{unit} in {region}: '{command}' - Schwimmer k�nnen keine Geb�ude betreten. +error233;errors:0;de;{unit} in {region}: '{command}' - Schwimmer k�nnen keine Schiffe betreten. +error234;errors:0;de;{unit} in {region}: '{command}' - Die Einheit ist mit Ausschiffen besch�ftigt.. +error235;errors:0;de;{unit} in {region}: '{command}' - F�r das Geb�ude wurde noch kein Unterhalt bezahlt. +error236;errors:0;de;{unit} in {region}: '{command}' - Das Geb�ude ist noch nicht fertig gebaut. +error237;errors:0;de;{unit} in {region}: '{command}' - Die Region befindet sich in Aufruhr. +error238;errors:0;de;{unit} in {region}: '{command}' - Hier k�nnen nur Orks rekrutiert werden. +error239;errors:0;de;{unit} in {region}: '{command}' - Soll eine Einheit oder ein Schiff eine neue Nummer bekommen? +error240;errors:0;de;{unit} in {region}: '{command}' - Soll eine Einheit oder ein Schiff verfolgt werden? +error241;errors:0;de;{unit} in {region}: '{command}' - Die Partei mu� mindestens 100 Wochen alt sein. +error242;errors:0;de;{unit} in {region}: '{command}' - Die Einheit mu� sich an Land befinden. +error243;errors:0;de;{unit} in {region}: '{command}' - Keine g�ltige Rasse angegeben. +error244;errors:0;de;{unit} in {region}: '{command}' - Die Einheit hat schon einen Namen. +error245;errors:0;de;{unit} in {region}: '{command}' - Das Schiff hat schon einen Namen. +error246;errors:0;de;{unit} in {region}: '{command}' - Das Geb�ude hat schon einen Namen. +error247;errors:0;de;{unit} in {region}: '{command}' - Die Partei hat schon einen Namen. +error248;errors:0;de;{unit} in {region}: '{command}' - Die Partei mu� mindestens 10 Runden alt sein. +error249;errors:0;de;{unit} in {region}: '{command}' - Das Schiff kann nicht aufs offene Meer hinaus segeln. +error250;errors:0;de;{unit} in {region}: '{command}' - Nicht genug Karma. +error251;errors:0;de;{unit} in {region}: '{command}' - Diese Kraft haben uns die G�tter schon gew�hrt. +error252;errors:0;de;{unit} in {region}: '{command}' - Was und wieviel soll geopfert werden? +error253;errors:0;de;{unit} in {region}: '{command}' - Der Magier ist nicht stark genug, sich den G�ttern zu opfern. +error254;errors:0;de;{unit} in {region}: '{command}' - Auraangabe fehlerhaft oder zuwenig Aura. +error255;errors:0;de;{unit} in {region}: '{command}' - Soetwas kann man nicht opfern. +error256;errors:0;de;{unit} in {region}: '{command}' - Um soetwas kann man nicht beten. +error257;errors:0;de;{unit} in {region}: '{command}' - Ung�ltiges Locale. +error258;errors:0;de;{unit} in {region}: '{command}' - Die Zieleinheit ist ung�ltig. +error259;errors:0;de;{unit} in {region}: '{command}' - Der Befehl ist nur auf Einheiten innerhalb des selben Geb�udes oder Schiffes anwendbar. +error260;errors:0;de;{unit} in {region}: '{command}' - Der Besitzer eines Schiffes oder Geb�udes kann nicht neu sortiert werden. +error261;errors:0;de;{unit} in {region}: '{command}' - Vor der Besitzer eines Schiffes oder Geb�udes kann nicht sortiert werden. +error262;errors:0;de;{unit} in {region}: '{command}' - Die Partei kann keine weiteren Wyrme besitzen. +error263;errors:0;de;{unit} in {region}: '{command}' - Dieses Gut wird hier produziert. +error264;errors:0;de;{unit} in {region}: '{command}' - Dieses Gut hat die Einheit nicht. +error265;errors:0;de;{unit} in {region}: '{command}' - Dieser Gegenstand funktioniert nur in der normalen Welt. +error266;errors:0;de;{unit} in {region}: '{command}' - Dieser Gegenstand funktioniert nur in der Eingangshalle. +error267;errors:0;de;{unit} in {region}: '{command}' - Nur eine Einzelperson kann das Ticket benutzen. +error268;errors:0;de;{unit} in {region}: '{command}' - Hier kann man nichts �bergeben. +error269;errors:0;de;{unit} in {region}: '{command}' - Hier kann man nicht zaubern. +error270;errors:0;de;{unit} in {region}: '{command}' - Hier kann man niemanden bestehlen. +error271;errors:0;de;{unit} in {region}: '{command}' - Hier kann man niemanden angreifen. +error272;errors:0;de;{unit} in {region}: '{command}' - Pferde m�ssen leider drau�en bleiben. +error273;errors:0;de;{unit} in {region}: '{command}' - Hier kann man nicht unterrichten. +error274;errors:0;de;{unit} in {region}: '{command}' - Die Einheit kann nicht unterrichten. +error275;errors:0;de;{unit} in {region}: '{command}' - Hier kann man keine Geb�ude errichten. +error276;errors:0;de;{unit} in {region}: '{command}' - Hier kann man keine Schiffe bauen. +error277;errors:0;de;{unit} in {region}: '{command}' - Das kann die Einheit nicht. +error278;errors:0;de;{unit} in {region}: '{command}' - Der Name des Geb�udes kann nicht ge�ndert werden. +error279;errors:0;de;{unit} in {region}: '{command}' - Die Beschreibung des Geb�udes kann nicht ge�ndert werden. +error280;errors:0;de;{unit} in {region}: '{command}' - Dazu muss erst die Spezialeigenschaft erworben werden. +error281;errors:0;de;{unit} in {region}: '{command}' - Gegen welche Rasse soll der Jihad ausgerufen werden? +error282;errors:0;de;{unit} in {region}: '{command}' - Gegen diese Rasse kann kein Jihad ausgerufen werden. +error283;events:0;de;{unit} in {region}: '{command}' - Das Passwort darf nur Buchstaben und Ziffern enthalten. + +# Meldungen und Ereignisse +msg_event;events:0;de;{string} +drown_on_ship;events:0;de;{unit} ertrinkt beim Untergang der {ship} in {region}. +siege;events:0;de;{unit} belagert {building}. Dabei richten die Katapulte Zerst�rungen von {destruction} Gr��enpunkten an. +recruit;events:0;de;{unit} in {region} rekrutiert {amount} {$of want}Personen. +givedumb;events:0;de;{unit} gibt {recipient} {amount} Dumpfbackenbrot: {discover}. +givecommand;events:0;de;{unit} gibt das Kommando an {receipient}. +forget;events:0;de;{unit} vergi�t {skill}. +entermaelstrom;events:0;de;Die {ship} f�hrt in den Mahlstrom von {region} und nimmt {damage} Schaden{$sink sink}. +storm;events:0;de;Die {ship} wird in {region} von St�rmen abgetrieben{$sink sink}. +shipconf;events:0;de;Die {ship} verliert im Sturm die Orientierung. +shipnoconf;events:0;de;Die {ship} ist wieder auf Kurs. +shipsink;events:0;de;Die {ship} ist zu stark besch�digt und sinkt. +errusingpotion;events:0;de;{unit}: '{command}' - Die Einheit benutzt bereits {using}. +starvation;events:0;de;{unit} verliert in {region} {dead} Personen durch Unterern�hrung. +malnourish;events:0;de;{unit} wird durch unzureichende Nahrung geschw�cht. +dumbeffect;events:0;de;{unit} vergi�t durch Dumpfbackenbrot {days} Tage des Talentes {skill}. +donation;events:0;de;{from} spendete {amount} Silber an {to}. +pest;events:0;de;Hier w�tete die Pest, und {dead} Bauern starben. +usepotion;events:4;de;{unit} benutzt {potion}. +spydetect;events:0;de;{target} f�hlt sich durch {$unit spy} beobachtet. +spyfail;events:0;de;{spy} gelang es nicht, etwas �ber {target} herauszufinden. +stealfail;events:0;de;{unit} gelang es nicht, sich nahe genug an {target} heranzuschleichen. +stealdetect;events:0;de;{unit} f�hlt sich bebachtet. +stealfatal;events:0;de;{unit} wurde beim versuchten Diebstahl ertappt. +thiefdiscover;events:0;de;{target} ertappte {unit} beim versuchten Diebstahl. +stealeffect;events:0;de;{unit} wurde in {region} beklaut. +newbieimmunity;events:1;de;Deine Partei ist noch {turns} Wochen immun gegen Angriffe. +changebanner;events:3;de;Das Banner wurde auf '{value}' ge�ndert. +changemail;events:1;de;Die Adresse wurde auf '{value}' ge�ndert. +changepasswd;events:1;de;Das Passwort wurde auf '{value}' ge�ndert. +eatpeasants;events:0;de;{unit} verspeiste {amount} Bauern. +absorbpeasants;events:0;de;{unit} t�tete {amount} Bauern. +fleescared;events:0;de;{amount} Bauern flohen aus Furcht vor {unit}. +warnillusiondissolve;events:1;de;{unit} wird sich bald verfl�chtigen. +illusiondissolve;events:0;de;{unit} hat sich unbemerkt verfl�chtigt. +illusionantimagic;events:0;de;{unit} marschiert in eine Antimagiezone und l�st sich auf. +shipdestroy;events:0;de;{unit} in {region} versenkt die {ship}. +orcified;events:0;de;Vor den vielen Orks in {region} fliehen die anderen Einwohner. +deorcified;events:0;de;Langsam kehren andere V�lker nach {region} zur�ck. +piratenovictim;events:0;de;Die {ship} in {region} kann keine Schiffe aufbringen. +piratesawvictim;events:0;de;Die {ship} in {region} entdeckt ein Opfer im {dir}. +itemcloak;events:0;de;{mage} legt einen Schleier um die Ausr�stung von {target}. +scunicorn;events:0;de;{unit} schlie�en sich {amount} {type} an. +buildroad;events:1;de;{unit} erweitert in {region} das Stra�ennetz um {size}. +destroy;events:1;de;{unit} zerst�rt {building}. +researchherb;events:0;de;{unit} in {region} stellt fest, da� es hier {amount} {herb} gibt. +researchherb_none;events:0;de;{unit} in {region} kann keine Kr�uter finden. +destroy_road;events:0;de;{unit} rei�t die Stra�e zwischen {from} und {to} ein. +desertion;events:0;de;{unit} in {region} desertiert. +volcanostartsmoke;events:0;de;Aus dem Vulkankrater von {region} steigt pl�tzlich Rauch. +volcanostopsmoke;events:0;de;Aus dem Vulkankrater von {region} steigt kein Rauch mehr. +volcano_dead;events:0;de;Beim Vulkanausbruch in {region} sterben {dead} Personen in {unit}. +volcanooutbreak;events:0;de;Der Vulkan in {regionv} bricht aus. Die Lavamassen verw�sten {regionn}. +volcanooutbreaknn;events:0;de;Der Vulkan in {region} bricht aus. +phunger;events:0;de;An Unterern�hrung sterben {dead} Bauern. +renamed_seen;events:0;de;{renamed} in {region} bekommt von {renamer} einen Spitznamen. +renamed_notseen;events:0;de;{renamed} in {region} bekommt einen Spitznamen. +renamed_ship_seen;events:0;de;Die {ship} in {region} bekommt von {renamer} einen Spitznamen. +renamed_ship_notseen;events:0;de;Die {ship} in {region} bekommt einen Spitznamen. +renamed_building_seen;events:0;de;{building} in {region} bekommt von {renamer} einen Spitznamen. +renamed_building_notseen;events:0;de;{building} in {region} bekommt einen Spitznamen. +renamed_faction_seen;events:0;de;Die Partei bekommt von {renamer} in {region} einen Spitznamen. +renamed_faction_notseen;events:0;de;Die Partei bekommt einen Spitznamen. +orcgrowth;events:3;de;{unit} vermehrt sich um {amount} {race}. +undeadrise;events:0;de;In {region} erhoben sich die Toten aus den Gr�bern. +entrise;events:0;de;In {region} erschienen die Herren der B�ume. + +# Bewegung +msg_movement;movement:0;de;{string} +fogblock;movement:0;de;{unit} konnte von {region} nicht nach {$dir direction} ausreisen, der Nebel war zu dicht. +moveblocked;movement:0;de;{unit} entdeckt, da� es keinen Weg nach {$dir direction} gibt. +followfail;movement:0;de;{follower} konnte {unit} nicht folgen. +followdetect;movement:0;de;{follower} ist {unit} gefolgt. +leavefail;movement:0;de;{unit} konnte aus {region} nicht ausreisen. +moveblockedbyguard;movement:0;de;{unit} wurde in {region} von {faction} aufgehalten. +sailfail;movement:0;de;Die {ship} konnte {region} nicht verlassen. +detectforbidden;movement:0;de;{unit} weigert sich, nach {region} zu reisen. +detectforbiddendir;movement:0;de;{unit} weigert sich, nach {$dir direction} zu reisen. +sailforbidden;movement:0;de;Die Mannschaft der {ship} weigert sich, nach {region} zu reisen. +sailforbiddendir;movement:0;de;Die Mannschaft der {ship} weigert sich, nach {$dir direction} zu reisen. +sailnolanding;movement:0;de;Die {ship} konnte in {region} nicht einreisen, die K�ste ist zu gef�hrlich f�r das Schiff. +sailnolandingstorm;movement:0;de;Die Mannschaft der {ship} kann in letzter Sekunde verhindern, da� das Schiff auf Land aufl�uft. +detectocean;movement:0;de;{unit} entdeckt, da� {region} Ozean ist. +detectoceandir;movement:0;de;{unit} entdeckt da� im {$dir direction} Ozean ist. +travel;movement:3;de;{unit} {$travel mode} von {start} nach {end}.{$travelthru regions} +transport;movement:1;de;{unit} transportiert {target} von {start} nach {end}. +firewall_damage;movement:0;de;{unit} erleidet beim Durchqueren der Feuerwand nach {region} schwere Verbrennungen. +firewall_death;movement:0;de;{unit} stirbt beim Versuch, die Feuerwand nach {region} zu durchqueren. + +# Produktion/Rohstoffe: +msg_production;production:0;de;{string} +buildship;production:3;de;{unit} baut f�r {size} an {ship} weiter. +buildbuilding;production:3;de;{unit} baut f�r {size} an {building} weiter. +manufacture;production:3;de;{unit} in {region} produziert {amount} {$of wanted}{resource}. +# seit NEW_ITEMS nicht mehr:" aus {materials}." +produce;production:3;de;{unit} in {region} produziert {amount} {$of wanted}{resource}. +emptyeog;production:0;de;Die Laenader in {region} ist ersch�pft. +unveileog;production:0;de;{unit} in {region} entdeckt eine Laenader. +plant;production:2;de;{unit} pflanzt in {region} {amount} {herb}. +raised;production:3;de;{unit} z�chtet {amount} Pferde. +herbfound;production:2;de;{unit} in {region} findet {amount} {herb}. + +# Wirtschaft und Handel +msg_economy;economy:0;de;{string} +give;economy:0;de;{unit} �bergibt {amount} {resource} an {target}. +income;economy:0;de;{unit} verdient in {region} {amount} {$of wanted}. +income_tax;economy:4;de;{unit} treibt in {region} {amount} Steuern ein. +income_tax_reduced;economy:2;de;{unit} treibt in {region} {amount} statt {wanted} Steuern ein. +income_steal;economy:3;de;{unit} klaut in {region} {amount} Silber. +income_steal_reduced;economy:1;de;{unit} klaut in {region} {amount} statt {wanted} Silber. +income_magic;economy:3;de;{unit} verdient in {region} {amount} Silber durch Zauberei. +income_magic_reduced;economy:1;de;{unit} verdient in {region} {amount} statt {wanted} Silber durch Zauberei. +income_entertainment;economy:4;de;{unit} verdient in {region} {amount} Silber durch Unterhaltung. +income_entertainment_reduced;economy:2;de;{unit} verdient in {region} {amount} statt {wanted} Silber durch Unterhaltung. +income_work;economy:4;de;{unit} arbeitet in {region} f�r einen Lohn von {amount} Silber. +income_work_reduced;economy:1;de;{unit} arbeitet in {region} f�r einen Lohn von {amount} statt {wanted} Silber. +income_trade;economy:4;de;{unit} verdient in {region} {amount} Silber durch den Verkauf von Luxusg�tern. +income_tradetax;economy:4;de;{unit} verdient am Handel in {region} Steuern in H�he von {amount} Silber. +maintenance;economy:4;de;{unit} bezahlt den Unterhalt von {building}. +maintenancefail;economy:0;de;{unit} kann den Unterhalt von {building} nicht bezahlen. +maintenancespecialfail;economy:0;de;{unit} fehlt {item} f�r den Betrieb von {building}. +buy;economy:4;de;{unit} bezahlt {money} Silber f�r den Kauf von Luxusg�tern. +buyamount;economy:4;de;{unit} kauft {amount} {resource}. +sellamount;economy:4;de;{unit} verkauft {amount} {resource}. + + +# Lehren und Lernen +msg_study;study:0;de;{string} +teach;study:1;de;{teacher} lehrt {student} {skill}. +teachdumb;study:0;de;{teacher} kann durch Dumpfbackenbrot nur {amount} Sch�ler lehren. +studycost;study:4;de;{unit} in {region} verbraucht {cost} Silber f�r das Studium von {skill}. + +# Magie und Effekte +msg_magic;magic:0;de;{string} +regenaura;magic:2;de;{unit} in {region} regeneriert {amount} Aura. +effectstrength;magic:0;de;{mage} erh�ht die K�rperkraft von {target} betr�chtlich. +regionmagic_effect;magic:0;de;{unit} in {region}: '{command}' - {unit} gelingt es die Region zu verzaubern +objmagic_effect;magic:0;de;{unit} in {region}: '{command}' - {unit} verzaubert {target} +weakmagic;magic:0;de;{unit} in {region}: '{command}' - Der Zauber von {unit} war viel zu schwach und l�st sich gleich wieder auf. +magic_fumble;magic:0;de;{unit} in {region}: '{command}' - Der Magier verf�ngt sich in seinem eigenen Zauber. +patzer2;magic:0;de;{unit} in {region} hat rasende Kopfschmerzen und kann sich nicht mehr richtig konzentrieren. Irgendwas bei diesem Zauber ist f�rchterlich schiefgelaufen. +patzer3;magic:0;de;Als {unit} in {region} versucht, {command} zu zaubern, scheint pl�tzlich ein Beben durch die magische Essenz zu laufen und ein furchtbarer Sog versucht {unit} in eine andere Dimension zu ziehen. Mit letzter Kraft gelingt es {unit} sich zu retten. +shock;magic:0;de;{mage} erleidet einen Schock {reason}. +spellunitnotfound;magic:0;de;{unit} in {region}: '{command}' - Einheit {id} wurde nicht gefunden. +spellbuildingnotfound;magic:0;de;{unit} in {region}: '{command}' - Geb�ude {id} wurde nicht gefunden. +spellshipnotfound;magic:0;de;{unit} in {region}: '{command}' - Schiff {id} wurde nicht gefunden. +spellunitresists;magic:0;de;{unit} in {region}: '{command}' - Einheit {id} widersteht dem Zauber. +spellbuildingresists;magic:0;de;{unit} in {region}: '{command}' - Geb�ude {id} konnte nicht verzaubert werden. +spellshipresists;magic:0;de;{unit} in {region}: '{command}' - Schiff {id} konnte nicht verzaubert werden. +spellregionresists;magic:0;de;{unit} in {region}: '{command}' - Die Region konnte nicht verzaubert werden. +analyse_region_nospell;magic:0;de;{mage} meint, das auf {region} kein Zauber liegt. +analyse_unit_nospell;magic:0;de;{mage} meint, das auf {target} kein Zauber liegt. +analyse_building_nospell;magic:0;de;{mage} meint, das auf {building} kein Zauber liegt. +analyse_ship_nospell;magic:0;de;{mage} meint, das auf {ship} kein Zauber liegt. +analyse_region_fail;magic:0;de;{mage} meint, das auf {region} ein Zauber liegt, konnte aber �ber den Zauber nichts herausfinden. +analyse_unit_fail;magic:0;de;{mage} meint, das {unit} verzaubert ist, konnte aber �ber den Zauber nichts herausfinden. +analyse_building_fail;magic:0;de;{mage} meint, das auf {building} ein Zauber liegt, konnte aber �ber den Zauber nichts herausfinden. +analyse_ship_fail;magic:0;de;{mage} meint, das auf {ship} ein Zauber liegt, konnte aber �ber den Zauber nichts herausfinden. +analyse_region_noage;magic:0;de;{mage} fand heraus, das auf {region} der Zauber {spell} liegt, dessen Kraft ausreicht, um noch Jahrhunderte bestehen zu bleiben. +analyse_unit_noage;magic:0;de;{mage} fand heraus, das auf {unit} der Zauber {spell} liegt, dessen Kraft ausreicht, um noch Jahrhunderte bestehen zu bleiben. +analyse_building_noage;magic:0;de;{mage} fand heraus, das auf {building} der Zauber {spell} liegt, dessen Kraft ausreicht, um noch Jahrhunderte bestehen zu bleiben. +analyse_ship_noage;magic:0;de;{mage} fand heraus, das auf {ship} der Zauber {spell} liegt, dessen Kraft ausreicht, um noch Jahrhunderte bestehen zu bleiben. +analyse_region_age;magic:0;de;{mage} fand heraus, das auf {region} der Zauber {spell} liegt, der noch etwa {months} Wochen bestehen bleibt. +analyse_unit_age;magic:0;de;{mage} fand heraus, das auf {unit} der Zauber {spell} liegt, der noch etwa {months} Wochen bestehen bleibt. +analyse_building_age;magic:0;de;{mage} fand heraus, das auf {building} der Zauber {spell} liegt, der noch etwa {months} Wochen bestehen bleibt. +analyse_ship_age;magic:0;de;{mage} fand heraus, das auf {ship} der Zauber {spell} liegt, der noch etwa {months} Wochen bestehen bleibt. +teleport_success;magic:0;de;{unit} wurde von {source} nach {target} teleportiert. +stealaura_fail;magic:0;de;{unit} konnte {target} keine Aura entziehen. +stealaura_fail_detect;magic:0;de;{unit} f�hlt sich einen Moment seltsam geschw�cht. +stealaura_detect;magic:0;de;{unit} f�hlt seine magischen Kr�fte schwinden und verliert {aura} Aura. +auratransfer_success;magic:0;de;{unit} transferiert {aura} Aura auf {target}. +wind_effect;magic:0;de;{$mage mage} erfleht den Segen der G�tter des Windes und des Wassers f�r {ship}. +path_effect;magic:0;de;{$mage mage} sorgt f�r trockene Stra�en in {region}. +ent_effect;magic:0;de;{$mage mage} belebt {amount} B�ume. +maelstrom_effect;magic:0;de;{$mage mage} beschw�rt die M�chte des Wassers und ein gigantischer Strudel bildet sich. +harvest_effect;magic:0;de;{$mage mage} segnet in einem kurzen Ritual die Felder. +growtree_effect;magic:0;de;{$mage mage} erschuf einen heiligen Hain von {amount} B�umen. +rust_effect;magic:0;de;{$mage mage} legt einen Rosthauch auf {target}. {amount} Waffen wurden vom Rost zerfressen. +rust_fail;magic:0;de;{$mage mage} legt einen Rosthauch auf {target}, doch der Rosthauch fand keine Nahrung. +heat_effect;magic:0;de;{$mage mage} belegt {target} mit einem K�lteschutz. +sparkle_effect;magic:0;de;{$mage mage} belegt {target} mit einem Zauber. +drought_effect;magic:0;de;{$mage mage} ruft das Feuer der Sonne auf {region} herab. +fumblecurse;magic:0;de;{unit} in {region} wird von einem Unbekannten verflucht. +deathcloud_effect;magic:0;de;{$mage mage} beschw�rt einen Giftelementar in {region}. +destroy_magic_effect;magic:0;de;{unit} in {region}: '{command}' - Der Magier zerst�rt {succ} Fl�che auf {target}. +destroy_magic_noeffect;magic:0;de;{unit} in {region}: '{command}' - Der Magier konnte keinen Fluch zerst�ren. +magicboost_effect;magic:0;de;{unit} in {region}: '{command}' - Die Sph�ren des Chaos geben dem Magier einen Teil ihrer Kraft. +use_antimagiccrystal;magic:0;de;{unit} benutzt in {region} einen Antimagiekristall. +use_tacticcrystal;magic:0;de;{unit} benutzt in {region} ein Traumauge. +magiccreate_effect;magic:0;de;{unit} in {region}: '{command}' - {unit} erschafft {amount} {item} +summondragon;magic:0;de;{unit} in {region}: '{command}' - {unit} ruft Drachen nach {region} +sp_migranten;magic:0;de;{unit} in {region}: '{command}' - {target} wird von uns aufgenommen. +sp_migranten_fail1;magic:0;de;{unit} in {region}: '{command}' - {target} ist von unserer Art, das Ritual w�re verschwendete Aura +icastle_create;magic:0;de;{unit} in {region}: '{command}' - Der Magier erschafft ein Traumgeb�ude. +sp_raisepeasantmob_effect;magic:0;de;{$mage mage} wiegelt in {region} die Bauern zum Aufstand auf. +firewall_effect;magic:0;de;{mage} erschafft in {region} eine Wand aus Feuer. +wisps_effect;magic:0;de;{mage} ruft Irrlichter in {region}. +becomewyrm;magic;2;de;{mage} verwandelt sich in einen Wyrm. + +# K�mpfe +msg_battle;battle:0;de;{string} +killsandhits;battle:0;de;{unit} erzielte {hits} Treffer und t�tete {kills} Gegner. +casualties;battle:0;de;{unit} verlor {fallen} Personen, {alive} �berlebten und {run} flohen nach {runto}. + +# Parteispecials und Prayer-Effects +new_fspecial;events:0;de;Die G�tter gew�hren uns die Kraft eines {special}. +new_fspecial_level;events:0;de;Die G�tter gew�hren uns die Kraft eines {special}({level}). +pray_success;events:0;de;Die G�tter erh�ren {unit}. +setjihad;events:0;de;Wir erkl�ren allen {race} den heiligen Krieg. + +# Eisberge +iceberg_drift;events:0;de;Der Eisberg {region} treibt nach {dir}. +overrun_by_iceberg;events:0;de;Die {ship} wird bei einer Kollision mit einem Eisberg besch�digt. +overrun_by_iceberg_des;events:0;de;Die {ship} wird bei einer Kollision mit einem Eisberg zerst�rt. +iceberg_land;events:0;de;Der Eisberg {region} treibt an eine K�ste. +iceberg_create;events:0;de;Der Gletscher von {region} bricht und treibt davon. + +# Tempel der Schreie +praytoigjarjuk;events:0;de;{unit} sendet ein Sto�gebet an den Herrn der Schreie. +cryinpain;events:0;de;"AAAAAAAGHHHHHH!" - Ein Schrei durchzieht die Region, {unit} windet sich vor Schmerz. + +# Szepter der Tr�nen +wand_of_tears_effect;events:0;de;Ein bohrender Schmerz durchzuckt {unit}, Verwirrung macht sich breit. +wand_of_tears_usage;events:0;de;{unit} schwenkt sein Szepter und sorgt f�r Verwirrung und Chaos in der Region. + +# Ertrinkende +drown_amphibian_nodead;events:1;de;{unit} nimmt Schaden auf dem Wasser. +drown_amphibian_dead;events:0;de;{amount} Personen in {unit} ertrinken. +drown;events:0;de;{unit} ertrinkt. + +# Spezialplanes +error_pflnorecruit;errors:0;de;{unit} in {region}: '{command}' - In der Ebene der Herausforderung kann niemand rekrutiert werden. +buildingcrash;events;0;de;In {region} st�rzte {building} ein.{opfer} +nomaintenance;events;0;de;F�r das Geb�ude {building} konnte die ganze Woche kein Unterhalt bezahlt werden. +unitmessage;events;0;de;Eine Botschaft von {unit} aus {region}: '{message}'" diff --git a/src/res/de/newbie.txt b/src/res/de/newbie.txt new file mode 100644 index 000000000..94181be13 --- /dev/null +++ b/src/res/de/newbie.txt @@ -0,0 +1,26 @@ + +Willkommen bei Eressea +---------------------- + +Wir w�nschen dir viel Spa� bei diesem Spiel. Solltest du mit deinem ersten Zug +Probleme haben, weil dir vielleicht die Regeln noch unklar sind, so gibt es +mehrere Informationsquellen, die dir hoffentlich helfen k�nnen. + +Die wichtigste Hilfe f�r das Spiel ist nach wie vor die Anleitung, im Netz zu +finden unter http://www.eressea.kn-bremen.de/regeln/index.html. + +Eine Gruppe engagierter Mitspieler hat sich zum Ziel gesetzt, Neulingen zu +helfen. Diese Spieler k�nnen per EMail unter eressea-help@eressea.kn-bremen.de +werden. Um sich die Arbeit zu erleichtern, haben sie eine Sammlung h�ufiger +Fragen und der dazugeh�rigen Antworten (eine FAQ) zusammengestellt, die unter +http://pegasus.uni-paderborn.de/eressea-faq/ zu finden ist. Bitte konsultiere +diese, bevor du direkt eine Frage stellst. Die FAQ zu lesen kann auch ohne +unmittelbares Problem hilfreich sein. + +Im IRC (IRCnet, z.B. irc.uni-erlangen.de) finden sich hilfsbereite Spieler im +Channel #e-help und sind dort gern bereit, Neulingsfragen zu beantworten. +Bitte benutze diesen Channel daf�r, und nicht #eressea, welcher eigentlich nur +f�r Kommunikation zwischen den Parteien gedacht ist. + +Viel Spa� w�nscht +Dein Eressea-Team diff --git a/src/res/de/strings.txt b/src/res/de/strings.txt new file mode 100644 index 000000000..fa54f1e5f --- /dev/null +++ b/src/res/de/strings.txt @@ -0,0 +1,352 @@ +# Terraintypen +maelstrom;de;Mahlstrom +ocean;de;Ozean +plain;de;Ebene +forest;de;Wald +swamp;de;Sumpf +desert;de;W�ste +highland;de;Hochland +mountain;de;Berge +glacier;de;Gletscher +firewall;de;Feuerwand +grassland;de;Steppe +volcano;de;Vulkan +fog;de;Nebel +iceberg;de;Eisberg +thickfog;de;Dichter Nebel +hell;de;Ebene aus Feuer und Dunkelheit +activevolcano;de;Aktiver Vulkan +hall1;de;Halle +corridor1;de;Gang +xmas_exit;de;Pforte +caldera;de;Krater + +maelstrom_trail;de;ein %s +ocean_trail;de;%s +plain_trail;de;die Ebene von %s +forest_trail;de;der Wald von %s +swamp_trail;de;der Sumpf von %s +desert_trail;de;die W�ste von %s +highland_trail;de;das Hochland von %s +mountain_trail;de;die Berge von %s +glacier_trail;de;der Gletscher von %s +firewall_trail;de;eine %s +grassland_trail;de;die Steppe von %s +volcano_trail;de;der Vulkan von %s +fog_trail;de;ein %s +iceberg_trail;de;der Eisberg von %s +thickfog_trail;de;%s +hell_trail;de;eine %s +activevolcano_trail;de;ein %s +hall1_trail;de;die %s +corridor1_trail;de;die %s + +coal;de;Kohlenst�ck +coals;de;Kohlenst�cke + +# Himmelsrichtungen +west;de;Westen +northwest;de;Nordwesten +northeast;de;Nordosten +east;de;Osten +southwest;de;S�dwesten +southeast;de;S�dosten + +# Verschiedenes +unknownunit;de;eine unbekannte Einheit + +# Meldungssektionen +section_events;de;Meldungen und Ereignisse +section_errors;de;Warnungen und Fehler +section_economy;de;Wirtschaft und Handel +section_production;de;Rohstoffe und Produktion +section_magic;de;Magie und Artefakte +section_movement;de;Reisen und Bewegung +section_study;de;Lehren und Lernen +section_battle;de;K�mpfe + +# Geb�udetypen +fortress_generic;de;Burg +lighthouse;de;Leuchtturm +mine;de;Bergwerk +quarry;de;Steinbruch +harbour;de;Hafen +academy;de;Akademie +magictower;de;Magierturm +smithy;de;Schmiede +sawmill;de;S�gewerk +stables;de;Pferdezucht +monument;de;Monument +dam;de;Damm +caravan;de;Karawanserei +tunnel;de;Tunnel +inn;de;Taverne +stonecircle;de;Steinkreis +blessedstonecircle;de;Gesegneter Steinkreis +illusion;de;Traumschl��chen +generic;de;Struktur + +#Testgeb�ude +temple;de;Tempel + +#Testitem +wand;de;Zauberstab +wands;de;Zauberst�be +wand_of_tears;de;Szepter der Tr�nen +wands_of_tears;de;Szepter der Tr�nen + +# Burgausbaustufen +site;de;Grundmauern +fortification;de;Befestigung +tower;de;Turm +castle;de;Burg +fortress;de;Festung +citadel;de;Zitadelle + +# Items +herb;de;Kraut +herbbag;de;Kr�uterbeutel +vial;de;Phiole +vials;de;Phiolen + +# Resourcen +money;de;Silber +moneys;de;Silber +hp;de;Trefferpunkt +hps;de;Trefferpunkte +aura;de;Aura +auras;de;Aura +permaura;de;permanente Aura +permauras;de;permanente Aura +peasant;de;Bauer +peasants;de;Bauern +unit;de;Einheit +units;de;Einheiten +person;de;Person +persons;de;Personen + +#items +iron;de;Eisen +irons;de;Eisen +log;de;Holz +logs;de;Holz +stone;de;Stein +stones;de;Steine +cart;de;Wagen +carts;de;Wagen +catapult;de;Katapult +catapults;de;Katapulte +sword;de;Schwert +swords;de;Schwerter +spear;de;Speer +spears;de;Speere +mallornspear;de;Mallornspeer +mallornspears;de;Mallornspeere +crossbow;de;Armbrust +crossbows;de;Armbr�ste +mallorncrossbow;de;Mallornarmbrust +mallorncrossbows;de;Mallornarmbr�ste +bow;de;Bogen +bows;de;B�gen +mallornbow;de;Mallornbogen +mallornbows;de;Mallornb�gen +# more items +chainmail;de;Kettenhemd +chainmails;de;Kettenhemden +plate;de;Plattenpanzer +plates;de;Plattenpanzer +balm;de;Balsam +spice;de;Gew�rz +spices;de;Gew�rze +jewel;de;Juwel +jewels;de;Juwelen +myrrh;de;Myrrhe +oil;de;�l +silk;de;Seide +incense;de;Weihrauch +firesword;de;Flammenschwert +fireswords;de;Flammenschwerter +shieldstone;de;Schildstein +shieldstones;de;Schildsteine +greatsword;de;Bih�nder +axe;de;Kriegsaxt +axes;de;Kriegs�xte +greatbow;de;Elfenbogen +greatbows;de;Elfenb�gen +laensword;de;Laenschwert +laenswords;de;Laenschwerter +laenshield;de;Laenschild +laenshields;de;Laenschilde +laenmail;de;Laenkettenhemd +laenmails;de;Laenkettenhemden +laen;de;Laen +shield;de;Schild +shields;de;Schilde +halberd;de;Hellebarde +halberds;de;Hellebarden +lance;de;Lanze +lances;de;Lanzen +mallornlance;de;Mallornlanze +mallornlances;de;Mallornlanzen +mallorn;de;Mallorn +cookie;de;Keks +cookies;de;Kekse +apple;de;Apfel +apples;de;�pfel +nut;de;Nu� +nuts;de;N�sse +almond;de;Mandelkern +almonds;de;Mandelkerne +dragonblood;de;Drachenblut +fairyboot;de;Feenstiefel +healingpotion;de;Heiltrank +healingpotions;de;Heiltr�nke +antimagic;de;Antimagiekristall +antimagics;de;Antimagiekristalle +toadslime;de;Tiegel mit Kr�tenschleim +amulet;de;Amulett +amulets;de;Amulette +ao_daemon;de;Auge des D�mon +ao_daemons;de;Augen des D�mon +griphonwing;de;Schwinge des Greifen +griphonwings;de;Schwingen des Greifen +ao_chastity;de;Amulett der Keuschheit +ao_chastitys;de;Amulette der Keuschheit +aoh;de;Amulett der Heilung +aohs;de;Amulette der Heilung +aog;de;Amulett des Treffens +aogs;de;Amulette des Treffens +aots;de;Amulett des wahren Sehens +aotss;de;Amulette des wahren Sehens +aoc;de;Katzenamulett +aocs;de;Katzenamulette +roi;de;Ring der Unsichtbarkeit +rois;de;Ringe der Unsichtbarkeit +rop;de;Ring der Macht +rops;de;Ringe der Macht +roqf;de;Ring der flinken Finger +roqfs;de;Ringe der flinken Finger +horse;de;Pferd +horses;de;Pferde +magicherbbag;de;Magischer Kr�uterbeutel +magicherbbags;de;Magische Kr�uterbeutel +moneybag;de;Silberbeutel +moneychest;de;Silberkassette +dragonhoard;de;Drachenhort +dragonhead;de;Drachenkopf +dragonheads;de;Drachenk�pfe +eyeofdragon;de;Auge des Drachen +eyeofdragons;de;Augen des Drachen +rustysword;de;Schartiges Schwert +rustyswords;de;Schartige Schwerter +rustyshield;de;Rostiges Schild +rustyshields;de;Rostige Schilde +rustychainmail;de;Rostiges Kettenhemd +rustychainmails;de;Rostige Kettenhemden +soc;de;Magischer Kr�uterbeutel +socs;de;Magische Kr�uterbeutel +ror;de;Ring der Regeneration +rors;de;Ringe der Regeneration +aod;de;Amulett der Dunkelheit +aods;de;Amulette der Dunkelheit +magicbag;de;Zauberbeutel +dreameye;de;Traumauge +dreameyes;de;Traumaugen +seaserpenthead;de;Seeschlangenkopf +seaserpentheads;de;Seeschlangenk�pfe +aurafocus;de;Aurafocus +aurafocuses;de;Aurafocuse +presspass;de;Akkredition des Xontormia-Expre� +presspasses;de;Akkreditionen des Xontormia-Expre� +trollbelt;de;G�rtel der Trollst�rke +elvenhorse;de;Elfenpferd +elvenhorses;de;Elfenpferde +pegasus;de;Pegasus +pegasi;de;Pegasi +dolphin;de;Delphin +dolphins;de;Delphine +museumticket;de;Eintrittskarte des Gro�en Museum +museumtickets;de;Eintrittskarten des Gro�en Museum +museumexitticket;de;R�ckkehrticket des Gro�en Museum +museumexittickets;de;R�ckkehrtickets des Gro�en Museum + +# herb singular +h0;de;Flachwurz +h1;de;W�rziger Wagemut +h2;de;Eulenauge +h3;de;Gr�ner Spinnerich +h4;de;Blauer Baumringel +h5;de;Elfenlieb +h6;de;Gurgelkraut +h7;de;Knotiger Saugwurz +h8;de;Blasenmorchel +h9;de;Wasserfinder +h10;de;Kakteenschwitz +h11;de;Sandf�ule +h12;de;Windbeutel +h13;de;Fjordwuchs +h14;de;Alraune +h15;de;Steinbei�er +h16;de;Spaltwachs +h17;de;H�hlenglimm +h18;de;Eisblume +h19;de;Wei�er W�terich +h20;de;Schneekristall + +#herb plural +h0s;de;Flachwurz +h1s;de;W�rzige Wagemut +h2s;de;Eulenaugen +h3s;de;Gr�ne Spinneriche +h4s;de;Blaue Baumringel +h5s;de;Elfenlieb +h6s;de;Gurgelkr�uter +h7s;de;Knotige Saugwurze +h8s;de;Blasenmorcheln +h9s;de;Wasserfinder +h10s;de;Kakteenschwitze +h11s;de;Sandf�ulen +h12s;de;Windbeutel +h13s;de;Fjordwuchse +h14s;de;Alraunen +h15s;de;Steinbei�er +h16s;de;Spaltwachse +h17s;de;H�hlenglimme +h18s;de;Eisblumen +h19s;de;Wei�e W�teriche +h20s;de;Schneekristalle + +p0;de;Siebenmeilentee +p1;de;Goliathwasser +p2;de;Wasser des Lebens +p3;de;Schaffenstrunk +p4;de;Wundsalbe +p5;de;Bauernblut +p6;de;Gehirnschmalz +p7;de;Dumpfbackenbrot +p8;de;Nestw�rme +p9;de;Pferdegl�ck +p10;de;Berserkerblut +p11;de;Bauernlieb +p12;de;Trank der Wahrheit +p13;de;Elixier der Macht +p14;de;Heiltrank + +p0s;de;Siebenmeilentees +p1s;de;Goliathwasser +p2s;de;Wasser des Lebens +p3s;de;Schaffenstr�nke +p4s;de;Wundsalben +p5s;de;Bauernblut +p6s;de;Gehirnschmalz +p7s;de;Dumpfbackenbrote +p8s;de;Nestw�rme +p9s;de;Pferdegl�ck +p10s;de;Berserkerblut +p11s;de;Bauernlieb +p12s;de;Tr�nke der Wahrheit +p13s;de;Elixiere der Macht +p14s;de;Heiltr�nke + +# Spezialitems +lmsreward;de;G�rtel der Heldentaten diff --git a/src/res/en/messages.txt b/src/res/en/messages.txt new file mode 100644 index 000000000..5bcc54ebe --- /dev/null +++ b/src/res/en/messages.txt @@ -0,0 +1,364 @@ +error1;none:0;en;{unit} in {region}: '{command}' - There are not enough experienced sailors on board the ship. +error2;none:0;en;{unit} in {region}: '{command}' - You cannot guard off shore. +error3;none:0;en;{unit} in {region}: '{command}' - Description has been cut (too long). +error5;none:0;en;{unit} in {region}: '{command}' - The building is not ours. +error6;none:0;en;{unit} in {region}: '{command}' - Building could not be found. +error7;none:0;en;{unit} in {region}: '{command}' - This is not possible any longer. +error8;none:0;en;{unit} in {region}: '{command}' - That is useless. +error9;none:0;en;{unit} in {region}: '{command}' - That cannot be sabotaged. +error10;none:0;en;{unit} in {region}: '{command}' - That does not make much sense. +error11;none:0;en;{unit} in {region}: '{command}' - The ship is still off shore. +error12;none:0;en;{unit} in {region}: '{command}' - The ship is not ours. +error13;none:0;en;{unit} in {region}: '{command}' - The ship has moved already. +error14;none:0;en;{unit} in {region}: '{command}' - The ship is off shore. +error15;none:0;en;{unit} in {region}: '{command}' - The ship has not yet been completed. +error16;none:0;en;{unit} in {region}: '{command}' - The ship is already completed. +error18;none:0;en;{unit} in {region}: '{command}' - The ship is too heavily loaded to sail. +error19;none:0;en;{unit} in {region}: '{command}' - First you have to leave the ship. +error20;none:0;en;{unit} in {region}: '{command}' - The ship could not be found. +error21;none:0;en;{unit} in {region}: '{command}' - There is no information available for the request. +error22;none:0;en;{unit} in {region}: '{command}' - Order was unrecognizable. +error23;none:0;en;{unit} in {region}: '{command}' - Contact was not possible due to siege. +error24;none:0;en;{unit} in {region}: '{command}' - Espionage was not possible due to siege. +error25;none:0;en;{unit} in {region}: '{command}' - The escape prevented that from happening. +error26;none:0;en;{unit} in {region}: '{command}' - The amount of items to buy is missing. +error27;none:0;en;{unit} in {region}: '{command}' - The amount of items for sale is missing. +error29;none:0;en;{unit} in {region}: '{command}' - The description of a monument can not be changed anymore. +error30;none:0;en;{unit} in {region}: '{command}' - The message does not contain text. +error31;none:0;en;{unit} in {region}: '{command}' - The castle could not be found. +error32;none:0;en;{unit} in {region}: '{command}' - The unit is not on board our ship. +error33;none:0;en;{unit} in {region}: '{command}' - The unit is not in our castle. +error34;none:0;en;{unit} in {region}: '{command}' - This unit has no permission to come on board. +error35;none:0;en;{unit} in {region}: '{command}' - The unit does not have these herbs. +error36;none:0;en;{unit} in {region}: '{command}' - The unit does not have this item. +error37;none:0;en;{unit} in {region}: '{command}' - The unit does not have this potion. +error38;none:0;en;{unit} in {region}: '{command}' - The unit does not have any herbs. +error39;none:0;en;{unit} in {region}: '{command}' - The unit has not yet learned espionage. +error40;none:0;en;{unit} in {region}: '{command}' - The unit did not contact us. +error41;none:0;en;{unit} in {region}: '{command}' - The unit does not have enough silver. +error42;none:0;en;{unit} in {region}: '{command}' - The unit does not have enough coachmen or too much freights to lad the wagons. +error43;none:0;en;{unit} in {region}: '{command}' - The unit does not have this. +error44;none:0;en;{unit} in {region}: '{command}' - The unit is off shore. +error45;none:0;en;{unit} in {region}: '{command}' - This unit is one of our own. +error46;none:0;en;{unit} in {region}: '{command}' - The unit is not in a tavern. +error47;none:0;en;{unit} in {region}: '{command}' - This unit is one of our allies. +error48;none:0;en;{unit} in {region}: '{command}' - The unit is not armed and fighting fit. +error49;none:0;en;{unit} in {region}: '{command}' - The unit is not he owner. +error50;none:0;en;{unit} in {region}: '{command}' - The unit is not experienced enough to do this. +error51;none:0;en;{unit} in {region}: '{command}' - The unit does not have enough silver. +error52;none:0;en;{unit} in {region}: '{command}' - The unit is exhausted from battle. +error53;none:0;en;{unit} in {region}: '{command}' - The unit cannot make potions. +error54;none:0;en;{unit} in {region}: '{command}' - The unit cannot trade. +error55;none:0;en;{unit} in {region}: '{command}' - The unit cannot move. +error56;none:0;en;{unit} in {region}: '{command}' - The unit cannot tame that many horses. +error57;none:0;en;{unit} in {region}: '{command}' - The unit is too heavily loaded to move. +error58;none:0;en;{unit} in {region}: '{command}' - The unit does not know how to entertain. +error59;none:0;en;{unit} in {region}: '{command}' - The unit does not know anything about herbalism. +error60;none:0;en;{unit} in {region}: '{command}' - The unit is under siege. +error64;none:0;en;{unit} in {region}: '{command}' - The unit could not be found. +error65;none:0;en;{unit} in {region}: '{command}' - Tuition was too high to be paid. +error66;none:0;en;{unit} in {region}: '{command}' - The party could not be found. +error67;none:0;en;{unit} in {region}: '{command}' - The horses would drown. +error69;none:0;en;{unit} in {region}: '{command}' - The region is guarded. +error70;none:0;en;{unit} in {region}: '{command}' - This region is guarded by a non allied party. +error71;none:0;en;{unit} in {region}: '{command}' - Direction could not be recognized. +error72;none:0;en;{unit} in {region}: '{command}' - The target-unit did not contact us. +error73;none:0;en;{unit} in {region}: '{command}' - The target-unit did not contact us. +error74;none:0;en;{unit} in {region}: '{command}' - This unit cannot give away anybody. +error75;none:0;en;{unit} in {region}: '{command}' - This unit does not take anybody. +error76;none:0;en;{unit} in {region}: '{command}' - This item cannot be used. +error77;none:0;en;{unit} in {region}: '{command}' - Talent could not be recognized. +error78;none:0;en;{unit} in {region}: '{command}' - A curse prevented the transfer from happening. +error79;none:0;en;{unit} in {region}: '{command}' - A ship or a castle must be supplied. +error80;none:0;en;{unit} in {region}: '{command}' - The unit is not armed and fighting fit. +error81;none:0;en;{unit} in {region}: '{command}' - first, the unit must guard the region. +error82;none:0;en;{unit} in {region}: '{command}' - There is no agreement with this number. +error83;none:0;en;{unit} in {region}: '{command}' - No peasant could be caught. +error84;none:0;en;{unit} in {region}: '{command}' - No name was supplied. +error85;none:0;en;{unit} in {region}: '{command}' - No email-address was supplied. +error86;none:0;en;{unit} in {region}: '{command}' - Wrong password. +error88;none:0;en;{unit} in {region}: '{command}' - You need wood to build a ship. +error89;none:0;en;{unit} in {region}: '{command}' - Money offer is missing. +error90;none:0;en;{unit} in {region}: '{command}' - The unit does not have a RIDE-order. +error91;none:0;en;{unit} in {region}: '{command}' - There are no Mallorn trees here. +error92;none:0;en;{unit} in {region}: '{command}' - There is no normal forest in this region. +error93;none:0;en;{unit} in {region}: '{command}' - There is already a port in this region. +error94;none:0;en;{unit} in {region}: '{command}' - You cannot build a road here. +error95;none:0;en;{unit} in {region}: '{command}' - Illusions cannot guard a region. +error96;none:0;en;{unit} in {region}: '{command}' - Nobody in this unit can be transferred. +error97;none:0;en;{unit} in {region}: '{command}' - Insects cannot be recruited in glaciers. +error98;none:0;en;{unit} in {region}: '{command}' - In winter, insects can be recruited only in deserts. +error99;none:0;en;{unit} in {region}: '{command}' - Could not find the unit to be transported. +error100;none:0;en;{unit} in {region}: '{command}' - Nobody here is a skilled ship builder. +error101;none:0;en;{unit} in {region}: '{command}' - Nobody here can construct a building. +error102;none:0;en;{unit} in {region}: '{command}' - Nobody here can trade. +error103;none:0;en;{unit} in {region}: '{command}' - Nobody here can build roads. +error104;none:0;en;{unit} in {region}: '{command}' - Laen can be excavated only in a mine. +error105;none:0;en;{unit} in {region}: '{command}' - Empty units can not be handed over. +error106;none:0;en;{unit} in {region}: '{command}' - When studying, magicians need to be alone. +error107;none:0;en;{unit} in {region}: '{command}' - You need at least two horses to breed more. +error108;none:0;en;{unit} in {region}: '{command}' - No herbs could be found. +error109;none:0;en;{unit} in {region}: '{command}' - Specify if a castle, a ship, a region or a unit is supposed to be named. +error110;none:0;en;{unit} in {region}: '{command}' - Specify if description is for a castle, a ship, a region or a unit. +error111;none:0;en;{unit} in {region}: '{command}' - Message has been cut (too long).. +error112;none:0;en;{unit} in {region}: '{command}' - Names may not contain parenthesis. +error113;none:0;en;{unit} in {region}: '{command}' - Item to be handed over was not supplied. +error114;none:0;en;{unit} in {region}: '{command}' - Number is not valid. +error115;none:0;en;{unit} in {region}: '{command}' - Number is already in use. +error116;none:0;en;{unit} in {region}: '{command}' - Number can not be assigned. +error117;none:0;en;{unit} in {region}: '{command}' - Submit only email-address, please! +error118;none:0;en;{unit} in {region}: '{command}' - Only Elves can make these bows. +error119;none:0;en;{unit} in {region}: '{command}' - There is no market place without a castle. +error120;none:0;en;{unit} in {region}: '{command}' - Characters can be given only to Human parties. +error121;none:0;en;{unit} in {region}: '{command}' - Characters can be given only to Human parties. +error122;none:0;en;{unit} in {region}: '{command}' - You can breed horses only in a stable. +error123;none:0;en;{unit} in {region}: '{command}' - The unit does not have such a thing. +error124;none:0;en;{unit} in {region}: '{command}' - You cannot buy that on a market place. +error125;none:0;en;{unit} in {region}: '{command}' - You cannot produce this. +error126;none:0;en;{unit} in {region}: '{command}' - You cannot sell this. +error127;none:0;en;{unit} in {region}: '{command}' - Your party cannot hire so many strangers. +error128;none:0;en;{unit} in {region}: '{command}' - The party cannot hire so many strangers. +error129;none:0;en;{unit} in {region}: '{command}' - The party cannot hire so many strangers. +error130;none:0;en;{unit} in {region}: '{command}' - Syntax: MAGIC SPHERE <1-5>. +error131;none:0;en;{unit} in {region}: '{command}' - You've got to build a tunnel before building roads through glaciers. +error132;none:0;en;{unit} in {region}: '{command}' - You've got to build a dam before building roads through swamps. +error133;none:0;en;{unit} in {region}: '{command}' - You've got to build a caravansary before building roads through deserts. +error134;none:0;en;{unit} in {region}: '{command}' - Unknown Report-Option. +error135;none:0;en;{unit} in {region}: '{command}' - Unknown Option. +error137;none:0;en;{unit} in {region}: '{command}' - Unknown Help- Mode. +error138;none:0;en;{unit} in {region}: '{command}' - We do not have anything that could be demolished. +error139;none:0;en;{unit} in {region}: '{command}' - Different types do not mix. +error140;none:0;en;{unit} in {region}: '{command}' - The unit is neither in a castle nor on board a ship. +error142;none:0;en;{unit} in {region}: '{command}' - The unit does not have enough silver for recruiting. +error143;none:0;en;{unit} in {region}: '{command}' - The unit is on board a ship. +error144;none:0;en;{unit} in {region}: '{command}' - The unit is not on board a ship. +error145;none:0;en;{unit} in {region}: '{command}' - The unit is not in a castle. +error146;none:0;en;{unit} in {region}: '{command}' - The unit is not captain of a ship. +error147;none:0;en;{unit} in {region}: '{command}' - The unit is not in command of the largest castle in the region. +error148;none:0;en;{unit} in {region}: '{command}' - The unit is not in command of a castle. +error149;none:0;en;{unit} in {region}: '{command}' - Who is supposed to get this message? +error150;none:0;en;{unit} in {region}: '{command}' - At least Herbalism 6 is needed for planting. +error151;none:0;en;{unit} in {region}: '{command}' - You need stones to build a road. +error152;none:0;en;{unit} in {region}: '{command}' - The unit jumps over board and drowns. +error153;none:0;en;{unit} in {region}: '{command}' - The unit joins the local peasants. +error154;none:0;en;{unit} in {region}: '{command}' - Highly qualified people refuse to work for other parties. +error155;none:0;en;{unit} in {region}: '{command}' - Too many magicians in the party. +error156;none:0;en;{unit} in {region}: '{command}' - Too many alchemists in the party. +error157;none:0;en;{unit} in {region}: '{command}' - The party has a different magic sphere. +error158;none:0;en;{unit} in {region}: '{command}' - Magicians always work alone! +error159;none:0;en;{unit} in {region}: '{command}' - No person could be handed over. +error160;none:0;en;{unit} in {region}: '{command}' - No luxury items could be bought. +error161;none:0;en;{unit} in {region}: '{command}' - The unit does not have this potion. +error162;none:0;en;{unit} in {region}: '{command}' - This healing potion will be automatically used when needed. +error165;none:0;en;{unit} in {region}: '{command}' - The unit disagreed with the potion. +error166;none:0;en;{unit} in {region}: '{command}' - This race cannot siege a castle. +error167;none:0;en;{unit} in {region}: '{command}' - The unit does not go to the peasants. +error168;none:0;en;{unit} in {region}: '{command}' - No luxury items could be sold. +error169;none:0;en;{unit} in {region}: '{command}' - The unit does not know this spell. +error170;none:0;en;{unit} in {region}: '{command}' - The peasants did not accept this gracious gift. +error171;none:0;en;{unit} in {region}: '{command}' - This combat spell does not exist. +error172;none:0;en;{unit} in {region}: '{command}' - There was no spell supplied. +error173;none:0;en;{unit} in {region}: '{command}' - Even in the Xontormia Library, this spell could not be found. +error174;none:0;en;{unit} in {region}: '{command}' - this spell makes only sense in combat. +error175;none:0;en;{unit} in {region}: '{command}' - You cannot cast this spell while standing on a moving ship. +error176;none:0;en;{unit} in {region}: '{command}' - You cannot cast this spell on a distant target. +error178;none:0;en;{unit} in {region}: '{command}' - No magic sphere was supplied. +error179;none:0;en;{unit} in {region}: '{command}' - The unit cannot learn this magic sphere. +error180;none:0;en;{unit} in {region}: '{command}' - The spell fails. +error181;none:0;en;{unit} in {region}: '{command}' - To do this, the magician has to be in a castle or on board a ship. +error182;none:0;en;{unit} in {region}: '{command}' - The ship cannot leave in this direction. +error183;none:0;en;{unit} in {region}: '{command}' - The magician is not on board a ship. +error184;none:0;en;{unit} in {region}: '{command}' - The unit does not move. +error186;none:0;en;{unit} in {region}: '{command}' - This spell works only ashore. +error187;none:0;en;{unit} in {region}: '{command}' - There are already sufficient roads here. +error188;none:0;en;{unit} in {region}: '{command}' - You cannot cast this spell in a swamp. +error190;none:0;en;{unit} in {region}: '{command}' - This spell works only in the material world. +error191;none:0;en;{unit} in {region}: '{command}' - This spell works only in forests. +error194;none:0;en;{unit} in {region}: '{command}' - Target region was supplied incorrectly. +error195;none:0;en;{unit} in {region}: '{command}' - No way is leading in this direction. +error196;none:0;en;{unit} in {region}: '{command}' - This is not a forest region. +error200;none:0;en;{unit} in {region}: '{command}' - Magician's maximum Aura is not high enough for this spell. +error201;none:0;en;{unit} in {region}: '{command}' - Race and target unit have not been supplied. +error202;none:0;en;{unit} in {region}: '{command}' - This is not a valid race. +error203;none:0;en;{unit} in {region}: '{command}' - No target has been supplied. +error204;none:0;en;{unit} in {region}: '{command}' - You cannot cast this spell in a region without trees. +error205;none:0;en;{unit} in {region}: '{command}' - This spell works only in an ocean region. +error207;none:0;en;{unit} in {region}: '{command}' - You cannot pass aura on to this unit. +error208;none:0;en;{unit} in {region}: '{command}' - wrong Aura values. +error209;none:0;en;{unit} in {region}: '{command}' - Syntax Error. +error211;none:0;en;{unit} in {region}: '{command}' - The ship is already under this spell. +error212;none:0;en;{unit} in {region}: '{command}' - The magician is not on board a ship. +error213;none:0;en;{unit} in {region}: '{command}' - Incorrect parameter. +error214;none:0;en;{unit} in {region}: '{command}' - Unit is not a magician. +error221;none:0;en;{unit} in {region}: '{command}' - You cannot build such a thing. +error222;none:0;en;{unit} in {region}: '{command}' - Show all what? +error223;none:0;en;{unit} in {region}: '{command}' - Starving units cannot guard. +error224;none:0;en;{unit} in {region}: '{command}' - Starving units cannot cast spells. +error225;none:0;en;{unit} in {region}: '{command}' - Starving units do not fight. +error226;none:0;en;{unit} in {region}: '{command}' - Units cannot attack from the second row. +error227;none:0;en;{unit} in {region}: '{command}' - The unit needs at least herbalism 7 to do this. +error228;none:0;en;{unit} in {region}: '{command}' - Only normal characters can collect taxes. +error230;none:0;en;{unit} in {region}: '{command}' - The unit cannot transport us to this place. +error231;none:0;en;{unit} in {region}: '{command}' - The unit or its animals would not survive there. +error232;none:0;en;{unit} in {region}: '{command}' - Swimmers cannot enter a building. +error233;none:0;en;{unit} in {region}: '{command}' - Swimmers cannot enter ships. +error234;none:0;en;{unit} in {region}: '{command}' - The unit is busy disembarking. +error235;none:0;en;{unit} in {region}: '{command}' - Maintenance has not been paid yet. +error236;none:0;en;{unit} in {region}: '{command}' - The building is not finished yet. +error238;none:0;en;{unit} in {region}: '{command}' - You can recruit only Orcs here. +error239;none:0;en;{unit} in {region}: '{command}' - Is this unit or ship supposed to get a new number? +error240;none:0;en;{unit} in {region}: '{command}' - Is this unit or ship supposed to be followed? +error244;none:0;en;{unit} in {region}: '{command}' - The unit is already named. +error245;none:0;en;{unit} in {region}: '{command}' - The ship is already named. +error246;none:0;en;{unit} in {region}: '{command}' - The building is already named. +error247;none:0;en;{unit} in {region}: '{command}' - The faction is already named. +error248;none:0;en;{unit} in {region}: '{command}' - The faction has to be 10 turns old. +mistake;none:0;en;{unit} in {region}: '{command}' - {error}. +drown_on_ship;none:0;en;{unit} drowns when {ship} in {region} sinks. +buildship;none:0;en;{unit} builds {size} more on {ship}. +buildbuilding;none:0;en;{unit} builds {size} more on {building}. +siege;none:0;en;{building} is under siege by {unit}. During siege, catapults caused {destruction} points destruction. +give;none:0;en;{unit} hands {amount} {resource} to {target}. +recruit;none:0;en;{unit} in {region} recruits {amount} {$of want} people. +message;none:0;en;{string} +givecommand;none:0;en;{unit} hands command over to {receipient}. +forget;none:0;en;{unit} forgets {skill}. +income;none:0;en;{unit} earns {amount} {$of wanted}in {region}. +income_tax;none:0;en;{unit} collects {amount} taxes in {region}. +income_tax_reduced;none:0;en;{unit} collects only {amount} taxes instead of {wanted} in {region}. +income_steal;none:0;en;{unit} steals {amount} Silver in {region}. +income_steal_reduced;none:0;en;{unit} steals only {amount} silver instead of {wanted} in {region}. +income_entertainment;none:0;en;{unit} earns {amount} in {region} with entertainment. +income_entertainment_reduced;none:0;en;{unit} earns only {amount} instead of {wanted} in {region} with entertainment. +income_work;none:0;en;{unit} works in {region} for a wage of {amount} Silver. +income_work_reduced;none:0;en;{unit} works in {region} for a wage of only {amount} Silver instead of {wanted}. +income_trade;none:0;en;{unit} earned {amount} Silver in {region} by selling luxury items. +income_tradetax;none:0;en;{unit} collected {amount} Silver trade tax in {region}. +manufacture;none:0;en;{unit} in {region} produces {amount} {$of wanted}{resource}. +# seit NEW_ITEMS nicht mehr:" from {materials}." +produce;none:0;en;{unit} in {region} produces {amount} {$of wanted}{resource}. +storm;none:0;en;The {ship} in {region} drifts {$sink sink} in heavy storm. +shipsink;none:0;en;The {ship} suffers too heavy damage and sinks. +moveblocked;none:0;en;{unit} discovered that there is no path to {$dir direction}. +errusingpotion;none:0;en;{unit}: '{command}' - The unit already uses {using}. +maintenance;none:0;en;{unit} pays the maintenance for {building}. +maintenancefail;none:0;en;{unit} cannot pay the maintenance for {building}. +buy;none:0;en;{unit} pays {money} Silver for luxury items. +buyamount;none:0;en;{unit} buys {amount} {resource}. +plant;none:0;en;{unit} plants {amount} {herb} in {region}. +raised;none:0;en;{unit} breeds {amount} horses. +followfail;none:0;en;{follower} could not follow {unit}. +followdetect;none:0;en;{follower} followed {unit}. +leavefail;none:0;en;{unit} could not leave {region}. +moveblockedbyguard;none:0;en;{unit} was kept in {region} by {faction}. +sailfail;none:0;en;The {ship} could not leave {region}. +starvation;none:0;en;{unit} looses {dead} people due to starvation in {region}. +malnourish;none:0;en;{unit} is weakened due to malnourishment. +donation;none:0;en;{from} donates {amount} Silver to {to}. +pest;none:0;en;The region is visited by the plague and {dead} peasants died. +# west;none:0;en;West. +# northwest;none:0;en;Northwest. +# northeast;none:0;en;Northeast. +# east;none:0;en;East. +# southwest;none:0;en;Southwest. +# southeast;none:0;en;Southeast. +usepotion;none:0;en;{unit} uses {potion}. +regenaura;none:0;en;{unit} regenerates {amount} aura in {region}. +teach;none:0;en;{teacher} teaches {student} {skill}. +spydetect;none:0;en;{target} feels watched by {$unit spy}. +# unknownunit;none:0;en;an unknown disease. +spyfail;none:0;en;{spy} could not find out anything about {target}. +stealfail;none:0;en;{unit} could not sneak close enough to {target}. +stealdetect;none:0;en;{unit} feels watched. +stealfatal;none:0;en;{unit} was caught in attempted theft. +thiefdiscover;none:0;en;{target} caught {unit} in attempted theft. +stealeffect;none:0;en;{unit} was robbed in {region}. +newbieimmunity;none:0;en;Your party is immune against assaults for {turns} more weeks. +changebanner;none:0;en;Banner has been changed to '{value}'. +changemail;none:0;en; Address has been changed to '{value}'. +changepasswd;none:0;en;The password has been changed to '{value}'. +eatpeasants;none:0;en;{unit} ate {amount} peasants. +fleescared;none:0;en;{amount} peasants fled in fear of {unit}. +warnillusiondissolve;none:0;en;{unit} will dissolve soon. +illusiondissolve;none:0;en;{unit} has dissolved without a trace. +detectforbidden;none:0;en;{unit} refuses to travel to {region}. +detectforbiddendir;none:0;en;{unit} refuses to travel to the{$dir direction}. +sailforbidden;none:0;en;The crew of the {ship} refuses to travel to {region}. +sailforbiddendir;none:0;en; The crew of the {ship} refuses to travel to the{$dir direction}. +sailnolanding;none:0;en;The {ship} could not berth in {region}. The coast is too dangerous for the vessel. +sailnolandingstorm;none:0;en;In the very last moment, the crew of the {ship} saved the ship from grounding. +detectocean;none:0;en;{unit} discovered that {region} is Ocean. +detectoceandir;none:0;en;{unit} discovered that an Ocean lies in the {$dir direction}. +analyse_region_nospell;none:0;en;It appears to {mage} that {region} is not charmed. +analyse_unit_nospell;none:0;en;It appears to {mage} that {target} is not charmed. +analyse_building_nospell;none:0;en;It appears to {mage} that {building} is not charmed. +analyse_ship_nospell;none:0;en;It appears to {mage} that {ship} is not charmed. +analyse_region_fail;none:0;en;It appears to {mage} that {region} is charmed, but no details have been revealed. +analyse_unit_fail;none:0;en;It appears to {mage} that {unit} is charmed, but no details have been revealed. +analyse_building_fail;none:0;en;It appears to {mage} that {building} is charmed, but no details have been revealed. +analyse_ship_fail;none:0;en;It appears to {mage} that {ship} is charmed, but no details have been revealed. +analyse_region_noage;none:0;en;{mage} found out that {region} is charmed with {spell}, which will last for centuries. +analyse_unit_noage;none:0;en;{mage} found out that {unit} is charmed with {spell}, which will last for centuries. +analyse_building_noage;none:0;en;{mage} found out that {building} is charmed with {spell}, which will last for centuries. +analyse_ship_noage;none:0;en;{mage} found out that {ship} is charmed with {spell}, which will last for centuries. +analyse_region_age;none:0;en;{mage} found out that {region} is charmed with {spell}, which will last for, about {months} more weeks. +analyse_unit_age;none:0;en;{mage} found out that {unit} is charmed with {spell} that willlast for about {months} more weeks. +analyse_building_age;none:0;en;{mage} found out that {building} is charmed with {spell}, which will last for, about {months} more weeks. +analyse_ship_age;none:0;en;{mage} found out that {ship} is charmed with {spell}, which will last for, about {months} more weeks. +auratransfer_success;none:0;en;{unit} transfers {aura} Aura to {target}. +sellamount;none:0;en;{unit} sells {amount} {resource}. +herbfound;none:0;en;{unit} in {region} finds {amount} {herb}. +battle;none:0;en;{string} +travel;none:0;en;{unit} {$travel mode} from {start} to {end}.{$travelthru regions} +transport;none:0;en;{unit} transported {target} from {start} to {end}. +buildroad;none:0;en;{unit} extends the road network in {region} by {size}. +destroy;none:0;en;{unit} destroys {building}. +casualties;none:0;en;{unit} lost {fallen} people: {alive} survived and {run} fled to {runto}. +studycost;none:0;en;{unit} spends {cost} silver in {region} to study {skill}. +researchherb;none:0;en;{unit} found out that {amount} {herb} grow in {region}. +researchherb_none;none:0;en;{unit} could not find any herbs in {region}. +spellunitnotfound;none:0;en;{unit} in {region}: '{command}' - Unit {id} could not be located. +spellbuildingnotfound;none:0;en;{unit} in {region}: '{command}' - Building {id} could not be located. +spellshipnotfound;none:0;en;{unit} in {region}: '{command}' - Ship {id} could not be located. +spellunitresists;none:0;en;{unit} in {region}: '{command}' - unit {id} resists the spell. +spellbuildingresists;none:0;en;{unit} in {region}: '{command}' - Building {id} could not be charmed. +spellshipresists;none:0;en;{unit} in {region}: '{command}' - Ship {id} could not be charmed. +spellregionresists;none:0;en;{unit} in {region}: '{command}' - The region could not be charmed. +magiccreate_effect;none:0;en;{unit} in {region}: '{command}' - {unit} creates {amount} {item}. +shipdestroy;none:0;en;{unit} sunk {ship} in {region}. +orcified;none:0;en;People {region} flee from an Orc superiority. +deorcified;none:0;en;Little by little, people return to {region}. +piratenovictim;none:0;en;The {ship} could not capture other ships in {region}. +piratesawvictim;none:0;en;The {ship} in {region} made {dir} a target. + +firewall_damage;none:0;en;{unit} steps through the wall of fire into {region} and receives severe burn damage. +firewall_death;none:0;en;{unit} dies trying to cross the wall of fire into {region}. +firewall_effect;none:0;en;{mage} creates a wall of fire in {region}. +wisps_effect;none:0;en;{mage} summons wisps in {region}. +destroy_road;none:0;en;{unit} demolishes the road between {from} and {to}. +desertion;none:0;en;{unit} in {region} abandons your cause. +volcanostartsmoke;none:0;en;Columns of smoke are released by the volcano of {region}. +volcanostopsmoke;none:0;en;The volcano of {region} stops releasing smoke. +volcano_dead;none:0;en;{dead} people in {unit} perisch when the volcano in {region} breaks out. +volcanooutbreak;none:0;en;The volcano in {regionv} breaks out. The lava devastates {regionn}. +volcanooutbreaknn;none:0;en;The volcano in {region} breaks out. +phunger;none:0;en;{dead} peasants starve. +new_fspecial;events:0;en;The Gods grant us the powers of {special}. +new_fspecial_level;events:0;en;The Gods grant us the powers of {special} ({level}). +pray_success;events:0;en;The Gods have listened to {unit}. + +# K�mpfe +msg_battle;battle:0;en;{string} + +# +# Eisberge +iceberg_drift;events:0;en;The iceberg {region} drifts {dir}. +overrun_by_iceberg;events:0;en;The {ship} has been damaged by a collision with an iceberg. +overrun_by_iceberg_des;events:0;en;The {ship} has been destroyed by a collision with an iceberg. +iceberg_land;events:0;en;The iceberg {region} drifts onto a coast. +iceberg_create;events:0;en;The glacier in {region} breaks up and drifts away. + +# Ertrinkende +drown_amphibian_nodead;events:1;en;{unit} is taking damage on the water. +drown_amphibian_dead;events:0;en;{amount} members of {unit} drown. +drown;events:0en;{unit} drowns. diff --git a/src/res/en/strings.txt b/src/res/en/strings.txt new file mode 100644 index 000000000..3f9d416b7 --- /dev/null +++ b/src/res/en/strings.txt @@ -0,0 +1,157 @@ +west;en;West +northwest;en;Northwest +northeast;en;Northeast +east;en;East +southwest;en;Southwest +southeast;en;Southeast +unknownunit;en;an unknown unit +section_events;en;Messages and Events +section_errors;en;Warnings and Errors +section_economy;en;Economy and Trade +section_production;en;Resources and Production +section_magic;en;Magic and Artefacts +section_movement;en;Movement and Travel +section_study;en;Learning and Teaching +section_battle;en;Battles + +# Items +herb;en;herb +herbbag;en;herbbag +vial;en;vial +vials;en;vials + +# Resourcen +money;en;money +moneys;en;moneys +hp;en;hp +hps;en;hps +aura;en;aura +auras;en;auras +permaura;en;permaura +permauras;en;permauras +peasant;en;peasant +peasants;en;peasants + +#items +iron;en;iron +irons;en;irons +log;en;log +logs;en;logs +stone;en;stone +stones;en;stones +cart;en;cart +carts;en;carts +catapult;en;catapult +catapults;en;catapults +sword;en;sword +swords;en;swords +spear;en;spear +spears;en;spears +crossbow;en;crossbow +crossbows;en;crossbows +bow;en;bow +bows;en;bows +# more items +chainmail;en;chainmail +chainmails;en;chainmails +plate;en;plate +plates;en;plates +balm;en;balm +spice;en;spice +jewel;en;jewel +jewels;en;jewels +myrrh;en;myrrh +oil;en;oil +silk;en;silk +incense;en;incense +firesword;en;firesword +fireswords;en;fireswords +shieldstone;en;shieldstone +shieldstones;en;shieldstones +greatsword;en;great sword +greatswords;en;great swords +axe;en;axe +axes;en;axes +greatbow;en;great bow +greatbows;en;great bows +laensword;en;laen sword +laenswords;en;laen swords +laenshield;en;laen shield +laenshields;en;laen shields +laenmail;en;laen chainmail +laenmails;en;laen chainmails +laen;en;laen +shield;en;shield +shields;en;shields +halberd;en;halberd +halberds;en;halberds +lance;en;lance +lances;en;lances +mallorn;en;mallorn +cookie;en;cookie +cookies;en;cookies +apple;en;apple +apples;en;apples +nut;en;nut +nuts;en;nuts +almond;en;almond +almonds;en;almonds +dragonblood;en;dragonblood +fairyboot;en;fairyboot +healingpotion;en;healingpotion +healingpotions;en;healingpotions +antimagic;en;antimagic cristal +antimagics;en;antimagic cristals +toadslime;en;toadslime +amulet;en;amulet +amulets;en;amulets +aoh;en;amulet of healing +aohs;en;amulets of healing +aog;en;amulet of gathering +aogs;en;amulets of gathering +aots;en;amulet of true seeing +aotss;en;amulets of true seeing +aoc;en;amulet of the kitten +aocs;en;amulets of the kitten +roi;en;ring of invisibility +rois;en;rings of invisibility +rop;en;ring of power +rops;en;rings of power +roqf;en;ring of quick fingers +roqfs;en;rings of quick fingers +horse;en;horse +horses;en;horses +herbbag;en;herbbag +herbbags;en;herbbags +moneybag;en;moneybag +moneychest;en;moneychest +dragonhoard;en;dragonhoard +dragonhead;en;dragonhead +dragonheads;en;dragonheads +eyeofdragon;en;eye of dragon +eyeofdragons;en;eye of dragons +rustysword;en;rusty sword +rustyswords;en;rusty swords +rustyshield;en;rusty shield +rustyshields;en;rusty shields +rustychainmail;en;rustychainmail +rustychainmails;en;rustychainmails +soc;en;sack of holding +socs;en;sacks of holding +ror;en;ring of regeneration +rors;en;rings of regeneration +aod;en;amulet of darkness +aods;en;amulets of darkness +magicbag;en;magic bag +dreameye;en;dreameye +dreameyes;en;dreameyes +seaserpenthead;en;seaserpenthead +seaserpentheads;en;seaserpentheads +aurafocus;en;aurafocus +aurafocuses;en;aurafocuses +presspass;en;presspass +presspasses;en;presspasses +trollbelt;en;trollbelt + +# Spezialitems +lmsreward;en;Belt of Heroic Legends