From 8a2870cac2b98bf536616b487ce9a1ebac7eb0c5 Mon Sep 17 00:00:00 2001 From: Walter Julius Hennecke Date: Tue, 7 Oct 2014 21:27:31 +0200 Subject: [PATCH] Added weapon config parser function for hyperspanner. --- code/game/bg_lex.h | 1 + code/game/bg_lex.lex | 4 ++ code/game/bg_lex.yy.c | 4 ++ code/game/g_weapon.c | 86 ++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 94 insertions(+), 1 deletion(-) diff --git a/code/game/bg_lex.h b/code/game/bg_lex.h index 3e30c43..27fd0db 100644 --- a/code/game/bg_lex.h +++ b/code/game/bg_lex.h @@ -107,6 +107,7 @@ typedef enum { LSYM_WCONF_TIME, LSYM_WCONF_VELOCITY, LSYM_WCONF_SPLASH, + LSYM_WCONF_RATE, LSYM_POINT, LSYM_UNKNOWN diff --git a/code/game/bg_lex.lex b/code/game/bg_lex.lex index a5065c6..6223079 100644 --- a/code/game/bg_lex.lex +++ b/code/game/bg_lex.lex @@ -1136,6 +1136,10 @@ bgLexSymbol bgLex_textToSymbol(char* text) { return LSYM_WCONF_SPLASH; } + if(strcmp("rate", text) == 0) { + return LSYM_WCONF_RATE; + } + return LSYM_UNKNOWN; } diff --git a/code/game/bg_lex.yy.c b/code/game/bg_lex.yy.c index 412b9ae..c7317b4 100644 --- a/code/game/bg_lex.yy.c +++ b/code/game/bg_lex.yy.c @@ -3546,6 +3546,10 @@ bgLexSymbol bgLex_textToSymbol(char* text) { return LSYM_WCONF_SPLASH; } + if(strcmp("rate", text) == 0) { + return LSYM_WCONF_RATE; + } + return LSYM_UNKNOWN; } diff --git a/code/game/g_weapon.c b/code/game/g_weapon.c index a6c0bf8..acb6307 100644 --- a/code/game/g_weapon.c +++ b/code/game/g_weapon.c @@ -663,7 +663,91 @@ static qboolean G_Weapon_ParseConfigDisruptor(bgLex* lexer) { } static qboolean G_Weapon_ParseConfigHyperspanner(bgLex* lexer) { - return qfalse; + G_LogFuncBegin(); + + G_Assert(lexer, qfalse); + + bgLex_lex(lexer); + if (lexer->morphem.type == LMT_SYMBOL && lexer->morphem.data.symbol == LSYM_POINT) { + bgLex_lex(lexer); + if (lexer->morphem.type == LMT_SYMBOL) { + if (lexer->morphem.data.symbol == LSYM_WCONF_PRIMARY) { + bgLex_lex(lexer); + if (lexer->morphem.type != LMT_SYMBOL || lexer->morphem.data.symbol != LSYM_POINT) { + G_Logger(LL_ERROR, "Expected '.' at weapons.cfg:%d:%d!\n", lexer->morphem.line, lexer->morphem.column); + G_LogFuncEnd(); + return qfalse; + } + bgLex_lex(lexer); + if (lexer->morphem.type != LMT_SYMBOL) { + G_Logger(LL_ERROR, "Unexpected token at weapons.cfg:%d:%d!\n", lexer->morphem.line, lexer->morphem.column); + G_LogFuncEnd(); + return qfalse; + } + switch (lexer->morphem.data.symbol) { + case LSYM_WCONF_RATE: + bgLex_lex(lexer); + if (lexer->morphem.type == LMT_INT) { + weaponConfig.hyperspanner.primary.rate = lexer->morphem.data.numInteger; + G_LogFuncEnd(); + return qtrue; + } else { + G_Logger(LL_ERROR, "Expected integer value at weapons.cfg:%d:%d!\n", lexer->morphem.line, lexer->morphem.column); + G_LogFuncEnd(); + return qfalse; + } + break; + default: + G_Logger(LL_ERROR, "Unexpected token at weapons.cfg:%d:%d!\n", lexer->morphem.line, lexer->morphem.column); + G_LogFuncEnd(); + return qfalse; + } + } else if (lexer->morphem.data.symbol == LSYM_WCONF_SECONDARY) { + bgLex_lex(lexer); + if (lexer->morphem.type != LMT_SYMBOL || lexer->morphem.data.symbol != LSYM_POINT) { + G_Logger(LL_ERROR, "Expected '.' at weapons.cfg:%d:%d!\n", lexer->morphem.line, lexer->morphem.column); + G_LogFuncEnd(); + return qfalse; + } + bgLex_lex(lexer); + if (lexer->morphem.type != LMT_SYMBOL) { + G_Logger(LL_ERROR, "Unexpected token at weapons.cfg:%d:%d!\n", lexer->morphem.line, lexer->morphem.column); + G_LogFuncEnd(); + return qfalse; + } + switch (lexer->morphem.data.symbol) { + case LSYM_WCONF_RATE: + bgLex_lex(lexer); + if (lexer->morphem.type == LMT_INT) { + weaponConfig.hyperspanner.secondary.rate = lexer->morphem.data.numInteger; + G_LogFuncEnd(); + return qtrue; + } else { + G_Logger(LL_ERROR, "Expected integer value at weapons.cfg:%d:%d!\n", lexer->morphem.line, lexer->morphem.column); + G_LogFuncEnd(); + return qfalse; + } + break; + default: + G_Logger(LL_ERROR, "Unexpected token at weapons.cfg:%d:%d!\n", lexer->morphem.line, lexer->morphem.column); + G_LogFuncEnd(); + return qfalse; + } + } else { + G_Logger(LL_ERROR, "Unexpected token at weapons.cfg:%d:%d!\n", lexer->morphem.line, lexer->morphem.column); + G_LogFuncEnd(); + return qfalse; + } + } else { + G_Logger(LL_ERROR, "Unexpected token at weapons.cfg:%d:%d!\n", lexer->morphem.line, lexer->morphem.column); + G_LogFuncEnd(); + return qfalse; + } + } else { + G_Logger(LL_ERROR, "Expected '.' at weapons.cfg:%d:%d!\n", lexer->morphem.line, lexer->morphem.column); + G_LogFuncEnd(); + return qfalse; + } } static qboolean G_Weapon_ParseConfigTR116(bgLex* lexer) {