📄 npcengine.c
字号:
/* ---------------------------------------------------------------------- * * npcEngine.c * * by Jamis Buck (jgb3@email.byu.edu) * * NPC generation functions for the Dungeons & Dragons(tm) API. This file * is in the public domain. * ---------------------------------------------------------------------- */#include <string.h>#include <ctype.h>#include <stdlib.h>#include <stdio.h>#include "dndconst.h"#include "dndutil.h"#include "npcEngine.h"#include "grammar.h"#include "gameutil.h"#define PREFERRED_CLASS_CHANCE ( 75 )#define COMMON ( 20 )#define UNCOMMON ( 8 )#define RARE ( 2 )#define NEVER ( 0 )typedef struct __raceabilities__ RACEABILITIES;typedef struct __abilityscore__ ABILITYSCORE;typedef struct __preferredfeats__ PREFERREDFEATS;typedef struct __preferredweapons__ PREFERREDWEAPONS;typedef struct __preferredspells__ PREFERREDSPELLS;struct __raceabilities__ { int ability; int weight;};struct __abilityscore__ { int ability; int score;};struct __preferredfeats__ { int feat; int weight;};struct __preferredweapons__ { int weapon; int weight;};struct __preferredspells__ { int spell; int weight;};static const int allLanguages[] = { lnABYSSAL, lnAQUAN, lnAURAN, lnCELESTIAL, lnCOMMON, lnDRACONIC, lnDWARVEN, lnELVEN, lnGNOME, lnGOBLIN, lnGIANT, lnGNOLL, lnHALFLING, lnIGNAN, lnINFERNAL, lnORC, lnSYLVAN, lnTERRAN, lnUNDERCOMMON, 0 };static const int allSkills[] = { skALCHEMY, skANIMALEMPATHY, skAPPRAISE, skBALANCE, skBLUFF, skCLIMB, skCONCENTRATION, skCRAFT, skDECIPHERSCRIPT, skDIPLOMACY, skDISABLEDEVICE, skDISGUISE, skESCAPEARTIST, skFORGERY, skGATHERINFORMATION, skHANDLEANIMAL, skHEAL, skHIDE, skINNUENDO, skINTIMIDATE, skINTUITDIRECTION, skJUMP, skKNOWLEDGE_ARCANA, skKNOWLEDGE_RELIGION, skKNOWLEDGE_NATURE, skKNOWLEDGE, skLISTEN, skMOVESILENTLY, skOPENLOCK, skPERFORM, skPICKPOCKET, skPROFESSION, skREADLIPS, skRIDE, skSCRY, skSEARCH, skSENSEMOTIVE, skSPEAKLANGUAGE, skSPELLCRAFT, skSPOT, skSWIM, skTUMBLE, skUSEMAGICDEVICE, skUSEROPE, skWILDERNESSLORE, 0 };static const int simpleWeapons[] = { wpGAUNTLET, wpUNARMED, wpDAGGER, wpDAGGER_PUNCHING, wpGAUNTLET_SPIKED, wpMACE_LIGHT, wpSICKLE, wpCLUB, wpHALFSPEAR, wpMACE_HEAVY, wpMORNINGSTAR, wpQUARTERSTAFF, wpSHORTSPEAR, wpCROSSBOW_LIGHT, wpDART, wpSLING, wpCROSSBOW_HEAVY, wpJAVELIN, 0 };static const int martialWeapons[] = { wpAXE_THROWING, wpHAMMER_LIGHT, wpHANDAXE, wpLANCE_LIGHT, wpPICK_LIGHT, wpSAP, wpSWORD_SHORT, wpBATTLEAXE, wpFLAIL_LIGHT, wpLANCE_HEAVY, wpLONGSWORD, wpPICK_HEAVY, wpRAPIER, wpSCIMITAR, wpTRIDENT, wpWARHAMMER, wpFALCHION, wpFLAIL_HEAVY, wpGLAIVE, wpGREATAXE, wpGREATCLUB, wpGREATSWORD, wpGUISARME, wpHALBERD, wpLONGSPEAR, wpRANSEUR, wpSCYTHE, wpSHORTBOW, wpSHORTBOW_COMPOSITE, wpLONGBOW, wpLONGBOW_COMPOSITE, 0 };static const int exoticWeapons[] = { wpKUKRI, wpKAMA, wpNUNCHAKU, wpSIANGHAM, wpSWORD_BASTARD, wpWARAXE_DWARVEN, wpHAMMER_GNOMEHOOKED, wpAXE_ORCDOUBLE, wpCHAIN_SPIKED, wpFLAIL_DIRE, wpSWORD_TWOBLADED, wpURGOSH_DWARVEN, wpCROSSBOW_HAND, wpSHURIKEN, wpWHIP, wpCROSSBOW_REPEATING, wpNET, 0 };static const int schoolsOfMagic[] = { ssUNIVERSAL, ssABJURATION, ssCONJURATION, ssDIVINATION, ssENCHANTMENT, ssEVOCATION, ssILLUSION, ssNECROMANCY, ssTRANSMUTATION, 0 };static const int requiredSkills[] = { skSPOT, skLISTEN, skHIDE, skMOVESILENTLY, 0 };/* preferred feat designations */static PREFERREDFEATS barbarianFeats[] = { { ftALERTNESS, COMMON }, { ftAMBIDEXTERITY, UNCOMMON*2 }, { ftARMORPROFICIENCY_HEAVY, RARE }, { ftBLINDFIGHT, COMMON }, { ftCOMBATREFLEXES, COMMON }, { ftDODGE, UNCOMMON*2 }, { ftMOBILITY, UNCOMMON }, { ftSPRINGATTACK, RARE }, { ftENDURANCE, COMMON }, { ftWEAPONPROFICIENCY_EXOTIC, RARE }, { ftEXPERTISE, RARE }, { ftIMPROVEDDISARM, RARE }, { ftIMPROVEDTRIP, RARE }, { ftWHIRLWINDATTACK, RARE }, { ftGREATFORTITUDE, UNCOMMON }, { ftIMPROVEDCRITICAL, UNCOMMON }, { ftIMPROVEDINITIATIVE, RARE*2 }, { ftIMPROVEDUNARMEDSTRIKE, RARE }, { ftDEFLECTARROWS, RARE }, { ftSTUNNINGFIST, RARE }, { ftIRONWILL, UNCOMMON }, { ftLEADERSHIP, RARE }, { ftLIGHTNINGREFLEXES, UNCOMMON }, { ftMOUNTEDCOMBAT, RARE*2 }, { ftMOUNTEDARCHERY, RARE }, { ftTRAMPLE, RARE*2 }, { ftRIDEBYATTACK, RARE*2 }, { ftSPIRITEDCHARGE, RARE }, { ftPOINTBLANKSHOT, RARE }, { ftFARSHOT, RARE }, { ftPRECISESHOT, RARE }, { ftRAPIDSHOT, RARE }, { ftSHOTONTHERUN, RARE }, { ftPOWERATTACK, COMMON*2 }, { ftCLEAVE, COMMON }, { ftIMPROVEDBULLRUSH, UNCOMMON }, { ftSUNDER, RARE*2 }, { ftGREATCLEAVE, COMMON }, { ftQUICKDRAW, UNCOMMON }, { ftRUN, COMMON }, { ftSHIELDPROFICIENCY, RARE }, { ftSKILLFOCUS, RARE }, { ftTOUGHNESS, RARE*2 }, { ftTRACK, UNCOMMON }, { ftTWOWEAPONFIGHTING, RARE }, { ftIMPROVEDTWOWEAPONFIGHTING, RARE }, { ftWEAPONFINESSE, RARE }, { ftWEAPONFOCUS, UNCOMMON }, { 0, 0 }};static PREFERREDWEAPONS barbarianWeapons[] = { { wpGAUNTLET, RARE }, { wpUNARMED, RARE }, { wpDAGGER, RARE }, { wpDAGGER_PUNCHING, RARE }, { wpGAUNTLET_SPIKED, RARE }, { wpMACE_LIGHT, RARE*2 }, { wpSICKLE, RARE }, { wpCLUB, UNCOMMON }, { wpHALFSPEAR, UNCOMMON }, { wpMACE_HEAVY, UNCOMMON }, { wpMORNINGSTAR, UNCOMMON }, { wpQUARTERSTAFF, RARE }, { wpSHORTSPEAR, UNCOMMON }, { wpCROSSBOW_LIGHT, RARE }, { wpDART, RARE }, { wpSLING, RARE }, { wpCROSSBOW_HEAVY, RARE }, { wpJAVELIN, RARE*2 }, { wpAXE_THROWING, RARE }, { wpHAMMER_LIGHT, RARE }, { wpHANDAXE, RARE }, { wpLANCE_LIGHT, RARE }, { wpPICK_LIGHT, RARE }, { wpSAP, RARE }, { wpSWORD_SHORT, UNCOMMON }, { wpBATTLEAXE, COMMON }, { wpFLAIL_LIGHT, UNCOMMON }, { wpLANCE_HEAVY, RARE }, { wpLONGSWORD, COMMON*2 }, { wpPICK_HEAVY, RARE }, { wpRAPIER, RARE }, { wpSCIMITAR, UNCOMMON }, { wpTRIDENT, RARE }, { wpWARHAMMER, COMMON }, { wpFALCHION, RARE }, { wpFLAIL_HEAVY, UNCOMMON }, { wpGLAIVE, RARE }, { wpGREATAXE, COMMON }, { wpGREATCLUB, COMMON }, { wpGREATSWORD, COMMON }, { wpGUISARME, RARE }, { wpHALBERD, RARE }, { wpLONGSPEAR, UNCOMMON }, { wpRANSEUR, RARE }, { wpSCYTHE, RARE }, { wpSHORTBOW, UNCOMMON }, { wpSHORTBOW_COMPOSITE, UNCOMMON }, { wpLONGBOW, UNCOMMON }, { wpLONGBOW_COMPOSITE, UNCOMMON }, { 0, 0 }};static PREFERREDFEATS bardFeats[] = { { ftALERTNESS, COMMON }, { ftAMBIDEXTERITY, UNCOMMON }, { ftARMORPROFICIENCY_HEAVY, RARE }, { ftBLINDFIGHT, UNCOMMON }, { ftCOMBATCASTING, COMMON }, { ftCOMBATREFLEXES, UNCOMMON }, { ftDODGE, COMMON }, { ftMOBILITY, COMMON }, { ftSPRINGATTACK, UNCOMMON }, { ftENDURANCE, RARE }, { ftGREATFORTITUDE, RARE }, { ftIMPROVEDCRITICAL, RARE }, { ftIMPROVEDINITIATIVE, UNCOMMON }, { ftIRONWILL, RARE }, { ftLEADERSHIP, RARE }, { ftLIGHTNINGREFLEXES, RARE }, { ftMOUNTEDCOMBAT, RARE }, { ftMOUNTEDARCHERY, RARE }, { ftTRAMPLE, RARE }, { ftRIDEBYATTACK, RARE }, { ftSPIRITEDCHARGE, RARE }, { ftPOINTBLANKSHOT, UNCOMMON }, { ftFARSHOT, RARE }, { ftPRECISESHOT, RARE }, { ftRAPIDSHOT, UNCOMMON }, { ftSHOTONTHERUN, RARE }, { ftPOWERATTACK, RARE }, { ftCLEAVE, RARE }, { ftSUNDER, RARE }, { ftQUICKDRAW, RARE }, { ftRUN, UNCOMMON }, { ftSKILLFOCUS, COMMON }, { ftSPELLFOCUS, UNCOMMON }, { ftSPELLPENETRATION, RARE }, { ftTOUGHNESS, RARE*2 }, { ftTRACK, RARE }, { ftTWOWEAPONFIGHTING, RARE }, { ftWEAPONFINESSE, UNCOMMON }, { ftWEAPONFOCUS, RARE }, { ftBREWPOTION, UNCOMMON*2 }, { ftCRAFTMAGICARMSANDARMOR, UNCOMMON }, { ftCRAFTROD, UNCOMMON }, { ftCRAFTSTAFF, UNCOMMON }, { ftCRAFTWAND, UNCOMMON }, { ftCRAFTWONDROUSITEM, UNCOMMON*2 }, { ftFORGERING, UNCOMMON }, { ftSCRIBESCROLL, UNCOMMON*2 }, { ftEMPOWERSPELL, RARE }, { ftENLARGESPELL, RARE }, { ftEXTENDSPELL, RARE }, { ftHEIGHTENSPELL, RARE }, { ftMAXIMIZESPELL, RARE }, { ftSILENTSPELL, RARE }, { ftSTILLSPELL, RARE }, { 0, 0 }};static PREFERREDWEAPONS bardWeapons[] = { { wpGAUNTLET, RARE }, { wpUNARMED, RARE }, { wpDAGGER, COMMON }, { wpDAGGER_PUNCHING, RARE }, { wpGAUNTLET_SPIKED, RARE }, { wpMACE_LIGHT, RARE*2 }, { wpSICKLE, RARE }, { wpCLUB, RARE }, { wpHALFSPEAR, RARE }, { wpMACE_HEAVY, UNCOMMON }, { wpMORNINGSTAR, UNCOMMON }, { wpQUARTERSTAFF, UNCOMMON }, { wpSHORTSPEAR, UNCOMMON }, { wpCROSSBOW_LIGHT, RARE }, { wpDART, RARE }, { wpSLING, RARE }, { wpCROSSBOW_HEAVY, RARE }, { wpJAVELIN, RARE }, { wpSAP, COMMON }, { wpSWORD_SHORT, UNCOMMON }, { wpLONGSWORD, COMMON*2 }, { wpRAPIER, UNCOMMON }, { wpSHORTBOW, UNCOMMON }, { wpSHORTBOW_COMPOSITE, UNCOMMON }, { wpLONGBOW, UNCOMMON }, { wpLONGBOW_COMPOSITE, UNCOMMON }, { wpWHIP, RARE }, { 0, 0 }};static PREFERREDSPELLS prefBardSpells[] = { { spBLINDNESSDEAFNESS, RARE }, { spBLINK, UNCOMMON }, { spBLUR, UNCOMMON }, { spCHARMMONSTER, COMMON }, { spCHARMPERSON, COMMON }, { spCLAIRAUDIENCECLAIRVOYANCE, UNCOMMON }, { spCURECRITICALWOUNDS, COMMON }, { spCURELIGHTWOUNDS, COMMON }, { spCUREMODERATEWOUNDS, COMMON },
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -