Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
2.7 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================
#ifndef TF_AUTORP_H
#define TF_AUTORP_H
#ifdef _WIN32
#pragma once
#endif
#include "igamesystem.h"
#include "utlvector.h"
#include "utlmap.h"
enum matchresult_t
{
MATCHES_NOT,
MATCHES_SINGULAR,
MATCHES_PLURAL,
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CTFAutoRP : public CAutoGameSystem
{
public:
CTFAutoRP() : CAutoGameSystem( "CTFAutoRP" )
{
m_pDataFileKV = NULL;
m_pWordTable = new CUtlSymbolTable( 0, 32, true );
}
void ParseDataFile( void );
void ApplyRPTo( char *pBuf, int iBufSize );
private:
struct wordreplacement_t
{
int iChance;
int iPrePendCount;
CUtlVector<const char*> a_pszPrepended; // Words that prepend the replacement
CUtlVector<const char*> a_pszReplacements; // Words that replace the original word
CUtlVector<const char*> a_pszPluralReplacements; // If the match was a plural match, use these replacements instead, if they exist. Otherwise, use a_pszReplacements.
CUtlVector<CUtlSymbol> m_Words; // Word that matches this replacement
CUtlVector<CUtlSymbol> m_Plurals; // Word that must come before to match this replacement, for double word replacements (i.e. "it is" -> "'tis")
CUtlVector<CUtlSymbol> m_PrevWords; // Word that must come before to match this replacement, for double word replacements (i.e. "it is" -> "'tis")
};
struct replacementcheck_t
{
char szWord[128];
int iWordLen;
char szPrevWord[128];
int iPrevLen;
bool bUsedPrevWord;
};
private:
const char *GetRandomPre( void );
const char *GetRandomPost( void );
void ModifySpeech( const char *pszInText, char *pszOutText, int iOutLen, bool bGeneratePreAndPost, bool bInPrePost );
matchresult_t WordMatches( wordreplacement_t *pRep, replacementcheck_t *pCheck );
bool ReplaceWord( replacementcheck_t *pCheck, char *szRep, int iRepSize, bool bSymbols, bool bWordListOnly );
bool PerformReplacement( const char *pszReplacement, replacementcheck_t *pRepCheck, char *szStoredWord, int iStoredWordSize, char *pszOutText, int iOutLen );
private:
// Database
KeyValues *m_pDataFileKV;
// Storage of all replacement blocks
CUtlVector<wordreplacement_t> m_a_Replacements;
CUtlSymbolTable *m_pWordTable;
// Extra lists for random selection
CUtlVector<const char*> m_a_pszPrependedWords;
CUtlVector<const char*> m_a_pszAppendedWords;
// Current application
CUtlVector<const char*> *m_pszCurrentList;
int m_iCurrentReplacement;
};
extern CTFAutoRP *AutoRP( void );
#endif // TF_AUTORP_H