forked from github/server
- Patch von pre-split-2 nach pre-split-3
- Target 'Conversion' für Visual C++ 6.0 gebaut. - Einige Rassenabhängigkeiten aus dem Kernel entfernt (Trolle, Tränke) - messages lokalisiert - resourcen-verzeichnis umgestellt. - einheitlicher Prefix für Rassen-Flags - coding.txt um ein paar absätze erweitert - resourcenverzeichnis kann mit -r angegeben werden (default ist weiterhin "./res") - eigenschaft, ohne waffen zu attackieren als rassenflag 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.
This commit is contained in:
parent
db13b7a220
commit
1e7daf179b
108 changed files with 3276 additions and 915 deletions
src
askalon
common
attributes
gamecode
items
kernel
alchemy.cbattle.cbuild.cbuilding.ccombatspells.ccurse.ccurse.heressea.ceressea.hitem.citem.hkernel-6.dspmagic.cmovement.crace.crace.hregion.cregion.hsave.cskill.cskill.hspell.cunit.cunit.h
modules
races
spells
triggers
util
doc
eressea-6.opteressea
header.txtmapper
res/de/items
AdlerAmulett der HeilungAmulett des TodesAmulett des wahren SehensAntimagiekristallApfelAuge des DrachenAuge des DämonEinhornElfenpferdFeenstiefelFlammenschwertKeksKröteLuchsMandelkernMantel der UnverletzlichkeitNußRing der MachtRing der UnsichtbarkeitRunenschwertSchildsteinSchwinge des GreifenSzepter der TränenTraumaugeTunnelwurmWargZauberbeutel
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
/* ------------------------------------------------------------- */
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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) */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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++;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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, */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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},
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
|
|
26
src/config.h
26
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
|
||||
|
||||
/**** ****
|
||||
|
|
|
@ -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).
|
||||
|
||||
|
|
111
src/doc/triggers.txt
Normal file
111
src/doc/triggers.txt
Normal file
|
@ -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.
|
BIN
src/eressea-6.opt
Normal file
BIN
src/eressea-6.opt
Normal file
Binary file not shown.
|
@ -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>
|
||||
|
|
File diff suppressed because it is too large
Load diff
11
src/eressea/items.c
Normal file
11
src/eressea/items.c
Normal file
|
@ -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();
|
||||
}
|
|
@ -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)
|
||||
|
|
14
src/eressea/korrektur.h
Normal file
14
src/eressea/korrektur.h
Normal file
|
@ -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);
|
|
@ -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();
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
25
src/eressea/spells.c
Normal file
25
src/eressea/spells.c
Normal file
|
@ -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();
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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 $
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
1
src/res/de/items/Adler
Normal file
1
src/res/de/items/Adler
Normal file
|
@ -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).
|
1
src/res/de/items/Amulett der Heilung
Normal file
1
src/res/de/items/Amulett der Heilung
Normal file
|
@ -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.
|
1
src/res/de/items/Amulett des Todes
Normal file
1
src/res/de/items/Amulett des Todes
Normal file
|
@ -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
|
1
src/res/de/items/Amulett des wahren Sehens
Normal file
1
src/res/de/items/Amulett des wahren Sehens
Normal file
|
@ -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.
|
1
src/res/de/items/Antimagiekristall
Normal file
1
src/res/de/items/Antimagiekristall
Normal file
|
@ -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.
|
1
src/res/de/items/Apfel
Normal file
1
src/res/de/items/Apfel
Normal file
|
@ -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.
|
1
src/res/de/items/Auge des Drachen
Normal file
1
src/res/de/items/Auge des Drachen
Normal file
|
@ -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.
|
1
src/res/de/items/Auge des Dämon
Normal file
1
src/res/de/items/Auge des Dämon
Normal file
|
@ -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...
|
1
src/res/de/items/Einhorn
Normal file
1
src/res/de/items/Einhorn
Normal file
|
@ -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).
|
1
src/res/de/items/Elfenpferd
Normal file
1
src/res/de/items/Elfenpferd
Normal file
|
@ -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.
|
1
src/res/de/items/Feenstiefel
Normal file
1
src/res/de/items/Feenstiefel
Normal file
|
@ -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.
|
1
src/res/de/items/Flammenschwert
Normal file
1
src/res/de/items/Flammenschwert
Normal file
|
@ -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.
|
1
src/res/de/items/Keks
Normal file
1
src/res/de/items/Keks
Normal file
|
@ -0,0 +1 @@
|
|||
Kleines trockenes Dauergebäck, m od. s; - u. -es, - u. -e
|
1
src/res/de/items/Kröte
Normal file
1
src/res/de/items/Kröte
Normal file
|
@ -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.
|
1
src/res/de/items/Luchs
Normal file
1
src/res/de/items/Luchs
Normal file
|
@ -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).
|
1
src/res/de/items/Mandelkern
Normal file
1
src/res/de/items/Mandelkern
Normal file
|
@ -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.
|
1
src/res/de/items/Mantel der Unverletzlichkeit
Normal file
1
src/res/de/items/Mantel der Unverletzlichkeit
Normal file
|
@ -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.
|
1
src/res/de/items/Nuß
Normal file
1
src/res/de/items/Nuß
Normal file
|
@ -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.
|
1
src/res/de/items/Ring der Macht
Normal file
1
src/res/de/items/Ring der Macht
Normal file
|
@ -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.
|
1
src/res/de/items/Ring der Unsichtbarkeit
Normal file
1
src/res/de/items/Ring der Unsichtbarkeit
Normal file
|
@ -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.
|
1
src/res/de/items/Runenschwert
Normal file
1
src/res/de/items/Runenschwert
Normal file
|
@ -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.
|
1
src/res/de/items/Schildstein
Normal file
1
src/res/de/items/Schildstein
Normal file
|
@ -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.
|
1
src/res/de/items/Schwinge des Greifen
Normal file
1
src/res/de/items/Schwinge des Greifen
Normal file
|
@ -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.
|
1
src/res/de/items/Szepter der Tränen
Normal file
1
src/res/de/items/Szepter der Tränen
Normal file
|
@ -0,0 +1 @@
|
|||
Dieses magische Szepter, ein Geschenk Igjarjuks, sorgt für große Verwirrung und Gedächtnisverlust. Syntax: BENUTZE "Szepter der Tränen"
|
1
src/res/de/items/Traumauge
Normal file
1
src/res/de/items/Traumauge
Normal file
|
@ -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.
|
1
src/res/de/items/Tunnelwurm
Normal file
1
src/res/de/items/Tunnelwurm
Normal file
|
@ -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)
|
1
src/res/de/items/Warg
Normal file
1
src/res/de/items/Warg
Normal file
|
@ -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).
|
7
src/res/de/items/Zauberbeutel
Normal file
7
src/res/de/items/Zauberbeutel
Normal file
|
@ -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.
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue