mirror of
https://github.com/scummvm/scummvm.git
synced 2025-04-02 10:52:32 -04:00
1751 lines
61 KiB
C++
1751 lines
61 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* Copyright (C) 2006-2010 - Frictional Games
|
|
*
|
|
* This file is part of Penumbra Overture.
|
|
*/
|
|
|
|
#include "hpl1/penumbra-overture/GameScripts.h"
|
|
#include "hpl1/engine/engine.h"
|
|
|
|
#include "hpl1/penumbra-overture/AttackHandler.h"
|
|
#include "hpl1/penumbra-overture/Credits.h"
|
|
#include "hpl1/penumbra-overture/DemoEndText.h"
|
|
#include "hpl1/penumbra-overture/EffectHandler.h"
|
|
#include "hpl1/penumbra-overture/FadeHandler.h"
|
|
#include "hpl1/penumbra-overture/GameArea.h"
|
|
#include "hpl1/penumbra-overture/GameDamageArea.h"
|
|
#include "hpl1/penumbra-overture/GameEnemy.h"
|
|
#include "hpl1/penumbra-overture/GameEntity.h"
|
|
#include "hpl1/penumbra-overture/GameForceArea.h"
|
|
#include "hpl1/penumbra-overture/GameItem.h"
|
|
#include "hpl1/penumbra-overture/GameLadder.h"
|
|
#include "hpl1/penumbra-overture/GameLamp.h"
|
|
#include "hpl1/penumbra-overture/GameLink.h"
|
|
#include "hpl1/penumbra-overture/GameLiquidArea.h"
|
|
#include "hpl1/penumbra-overture/GameMessageHandler.h"
|
|
#include "hpl1/penumbra-overture/GameMusicHandler.h"
|
|
#include "hpl1/penumbra-overture/GameObject.h"
|
|
#include "hpl1/penumbra-overture/GameSaveArea.h"
|
|
#include "hpl1/penumbra-overture/GameStickArea.h"
|
|
#include "hpl1/penumbra-overture/GameSwingDoor.h"
|
|
#include "hpl1/penumbra-overture/GraphicsHelper.h"
|
|
#include "hpl1/penumbra-overture/Init.h"
|
|
#include "hpl1/penumbra-overture/Inventory.h"
|
|
#include "hpl1/penumbra-overture/MainMenu.h"
|
|
#include "hpl1/penumbra-overture/MapHandler.h"
|
|
#include "hpl1/penumbra-overture/Notebook.h"
|
|
#include "hpl1/penumbra-overture/NumericalPanel.h"
|
|
#include "hpl1/penumbra-overture/Player.h"
|
|
#include "hpl1/penumbra-overture/PlayerHelper.h"
|
|
#include "hpl1/penumbra-overture/RadioHandler.h"
|
|
#include "hpl1/penumbra-overture/SaveHandler.h"
|
|
|
|
#include "hpl1/penumbra-overture/GlobalInit.h"
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// SCRIPT FUNCTIONS
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
///////// HELPERS ////////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
#define GAME_ENTITY_BEGIN(asName) \
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName); \
|
|
if (pEntity == NULL) { \
|
|
Warning("Couldn't find game entity '%s'\n", asName.c_str()); \
|
|
return; \
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
tWString *gsTempString = nullptr;
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AddToTempString(tString asString) {
|
|
*gsTempString += cString::To16Char(asString);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, AddToTempString, string)
|
|
|
|
static void AddToTempStringTrans(tString asCat, tString asEntry) {
|
|
cInit *mpInit = gpInit;
|
|
*gsTempString += kTranslate(asCat, asEntry);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, AddToTempStringTrans, string, string)
|
|
|
|
static void AddToTempStringAction(tString asAction) {
|
|
cInit *mpInit = gpInit;
|
|
iAction *pAction = gpInit->mpGame->GetInput()->GetAction(asAction);
|
|
if (pAction) {
|
|
tWString sString = kTranslate("ButtonNames", pAction->GetInputName());
|
|
if (sString != _W(""))
|
|
*gsTempString += sString;
|
|
else
|
|
*gsTempString += cString::To16Char(pAction->GetInputName());
|
|
} else {
|
|
*gsTempString += kTranslate("ButtonNames", "None");
|
|
}
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, AddToTempStringAction, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
///////// GENERAL GAME ////////////////////////////////////
|
|
|
|
static void ResetGame() {
|
|
gpInit->mpGame->ResetLogicTimer();
|
|
|
|
gpInit->mpMapHandler->SetCurrentMapName("");
|
|
gpInit->mpMainMenu->SetActive(true);
|
|
}
|
|
SCRIPT_DEFINE_FUNC(void, ResetGame)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void StartCredits() {
|
|
gpInit->mpCredits->SetActive(true);
|
|
}
|
|
SCRIPT_DEFINE_FUNC(void, StartCredits)
|
|
|
|
static void StartDemoEndText() {
|
|
gpInit->mpDemoEndText->SetActive(true);
|
|
}
|
|
SCRIPT_DEFINE_FUNC(void, StartDemoEndText)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void ClearSavedMaps() {
|
|
gpInit->mpSaveHandler->ClearSavedMaps();
|
|
}
|
|
SCRIPT_DEFINE_FUNC(void, ClearSavedMaps)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static tString GetActionKeyString(tString asAction) {
|
|
iAction *pAction = gpInit->mpGame->GetInput()->GetAction(asAction);
|
|
if (pAction) {
|
|
return pAction->GetInputName();
|
|
}
|
|
|
|
return "ActionNotFound";
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(string, GetActionKeyString, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AddMessageTrans(tString asTransCat,
|
|
tString asTransName) {
|
|
cInit *mpInit = gpInit;
|
|
gpInit->mpGameMessageHandler->Add(kTranslate(asTransCat, asTransName));
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, AddMessageTrans, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AddMessage(tString asMessage) {
|
|
gpInit->mpGameMessageHandler->Add(cString::To16Char(asMessage));
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, AddMessage, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AddMessageTempString() {
|
|
gpInit->mpGameMessageHandler->Add(*gsTempString);
|
|
*gsTempString = _W("");
|
|
}
|
|
SCRIPT_DEFINE_FUNC(void, AddMessageTempString)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AddSubTitleTrans(tString asTransCat,
|
|
tString asTransName, float afTime) {
|
|
cInit *mpInit = gpInit;
|
|
gpInit->mpEffectHandler->GetSubTitle()->Add(kTranslate(asTransCat, asTransName), afTime, false);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, AddSubTitleTrans, string, string, float)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AddSubTitle(tString asMessage, float afTime) {
|
|
gpInit->mpEffectHandler->GetSubTitle()->Add(cString::To16Char(asMessage), afTime, false);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, AddSubTitle, string, float)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AddSubTitleTempString(float afTime) {
|
|
gpInit->mpEffectHandler->GetSubTitle()->Add(*gsTempString, afTime, false);
|
|
*gsTempString = _W("");
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, AddSubTitleTempString, float)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AddRadioMessage(tString asTransCat, tString asTransName,
|
|
tString asSound) {
|
|
cInit *mpInit = gpInit;
|
|
gpInit->mpRadioHandler->Add(kTranslate(asTransCat, asTransName), asSound);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, AddRadioMessage, string, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetRadioOnEndCallback(tString asFunc) {
|
|
gpInit->mpRadioHandler->SetOnEndCallback(asFunc);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, SetRadioOnEndCallback, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetInventoryMessage(tString asMessage) {
|
|
gpInit->mpInventory->SetMessage(cString::To16Char(asMessage));
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, SetInventoryMessage, string)
|
|
|
|
static void SetInventoryMessageTrans(tString asTransCat,
|
|
tString asTransName) {
|
|
cInit *mpInit = gpInit;
|
|
gpInit->mpInventory->SetMessage(kTranslate(asTransCat, asTransName));
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetInventoryMessageTrans, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetMessagesOverCallback(tString asFunction) {
|
|
gpInit->mpGameMessageHandler->SetOnMessagesOverCallback(asFunction);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, SetMessagesOverCallback, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void ChangeMap(tString asMapFile, tString asMapPos,
|
|
tString asStartSound, tString asStopSound,
|
|
float afFadeOutTime, float afFadeInTime,
|
|
tString asLoadTextCat, tString asLoadTextEntry) {
|
|
// if(gpInit->mpRadioHandler->IsActive()) return;
|
|
|
|
gpInit->mpMapHandler->ChangeMap(asMapFile, asMapPos, asStartSound, asStopSound,
|
|
afFadeOutTime, afFadeInTime,
|
|
asLoadTextCat, asLoadTextEntry);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_8(void, ChangeMap, string, string, string, string, float, float, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetMapGameName(tString asName) {
|
|
gpInit->mpMapHandler->SetMapGameName(cString::To16Char(asName));
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, SetMapGameName, string)
|
|
|
|
static void SetMapGameNameTrans(tString asTransCat, tString asTransEntry) {
|
|
cInit *mpInit = gpInit;
|
|
gpInit->mpMapHandler->SetMapGameName(kTranslate(asTransCat, asTransEntry));
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetMapGameNameTrans, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AddNotebookTaskText(tString asName, tString asText) {
|
|
gpInit->mpNotebook->AddTask(asName, cString::To16Char(asText));
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, AddNotebookTaskText, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AddNotebookTask(tString asName, tString asTransCat,
|
|
tString asTransEntry) {
|
|
cInit *mpInit = gpInit;
|
|
gpInit->mpNotebook->AddTask(asName, kTranslate(asTransCat, asTransEntry));
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, AddNotebookTask, string, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void RemoveNotebookTask(tString asName) {
|
|
gpInit->mpNotebook->RemoveTask(asName);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, RemoveNotebookTask, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AddNotebookNote(tString asNameCat, tString asNameEntry,
|
|
tString asTextCat, tString asTextEntry) {
|
|
cInit *mpInit = gpInit;
|
|
gpInit->mpNotebook->AddNote(kTranslate(asNameCat, asNameEntry), asTextCat, asTextEntry);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_4(void, AddNotebookNote, string, string, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void StartNumericalPanel(tString asName, int alCode1, int alCode2, int alCode3, int alCode4,
|
|
float afDifficulty, tString asCallback) {
|
|
gpInit->mpNumericalPanel->SetActive(true);
|
|
tIntVec vCode;
|
|
vCode.resize(4);
|
|
vCode[0] = alCode1;
|
|
vCode[1] = alCode2;
|
|
vCode[2] = alCode3;
|
|
vCode[3] = alCode4;
|
|
|
|
gpInit->mpNumericalPanel->SetUp(asName, asCallback);
|
|
gpInit->mpNumericalPanel->SetCode(vCode);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_7(void, StartNumericalPanel, string, int, int, int, int, float, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetInventoryActive(bool abX) {
|
|
gpInit->mpInventory->SetActive(abX);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, SetInventoryActive, bool)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void FadeIn(float afTime) {
|
|
gpInit->mpFadeHandler->FadeIn(afTime);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, FadeIn, float)
|
|
|
|
static void FadeOut(float afTime) {
|
|
gpInit->mpFadeHandler->FadeOut(afTime);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, FadeOut, float)
|
|
|
|
static bool IsFading() {
|
|
return gpInit->mpFadeHandler->IsActive();
|
|
}
|
|
SCRIPT_DEFINE_FUNC(bool, IsFading)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetWideScreenActive(bool abActive) {
|
|
gpInit->mpFadeHandler->SetWideScreenActive(abActive);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, SetWideScreenActive, bool)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AutoSave() {
|
|
if (gpInit->mpPlayer->GetHealth() <= 0)
|
|
return;
|
|
|
|
// TODO: Some other effect here.
|
|
// gpInit->mpGraphicsHelper->DrawLoadingScreen("other_saving.jpg");
|
|
// gpInit->mpSaveHandler->SaveGameToFile("save/auto.sav");
|
|
// gpInit->mpSaveHandler->AutoSave("Auto",5);
|
|
gpInit->mpEffectHandler->GetSaveEffect()->AutoSave();
|
|
}
|
|
SCRIPT_DEFINE_FUNC(void, AutoSave)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void StartFlash(float afFadeIn, float afWhite, float afFadeOut) {
|
|
gpInit->mpEffectHandler->GetFlash()->Start(afFadeIn, afWhite, afFadeOut);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, StartFlash, float, float, float)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetWaveGravityActive(bool abX) {
|
|
gpInit->mpEffectHandler->GetWaveGravity()->SetActive(abX);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, SetWaveGravityActive, bool)
|
|
|
|
static void SetupWaveGravity(float afMaxAngle, float afSwingLength,
|
|
float afGravitySize, tString asAxis) {
|
|
int lDir = cString::ToLowerCase(asAxis) == "x" ? 0 : 1;
|
|
|
|
gpInit->mpEffectHandler->GetWaveGravity()->Setup(cMath::ToRad(afMaxAngle), afSwingLength, afGravitySize, lDir);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_4(void, SetupWaveGravity, float, float, float, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetDepthOfFieldActive(bool abX, float afFadeTime) {
|
|
gpInit->mpEffectHandler->GetDepthOfField()->SetActive(abX, afFadeTime);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetDepthOfFieldActive, bool, float)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetupDepthOfField(float afNearPlane, float afFocalPlane, float afFarPlane) {
|
|
gpInit->mpEffectHandler->GetDepthOfField()->SetUp(afNearPlane, afFocalPlane, afFarPlane);
|
|
gpInit->mpEffectHandler->GetDepthOfField()->SetFocusBody(NULL);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, SetupDepthOfField, float, float, float)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void FocusOnEntity(tString asEntity) {
|
|
GAME_ENTITY_BEGIN(asEntity);
|
|
|
|
if (pEntity->GetBodyNum() == 0) {
|
|
Error("Entity %s had no bodies and can not be focus on.\n", pEntity->GetName().c_str());
|
|
return;
|
|
}
|
|
|
|
gpInit->mpEffectHandler->GetDepthOfField()->FocusOnBody(pEntity->GetBody(0));
|
|
gpInit->mpEffectHandler->GetDepthOfField()->SetFocusBody(NULL);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, FocusOnEntity, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetConstantFocusOnEntity(tString asEntity) {
|
|
if (asEntity == "") {
|
|
gpInit->mpEffectHandler->GetDepthOfField()->SetFocusBody(NULL);
|
|
return;
|
|
}
|
|
|
|
GAME_ENTITY_BEGIN(asEntity);
|
|
|
|
if (pEntity->GetBodyNum() == 0) {
|
|
Error("Entity %s had no bodies and can not be focus on.\n", pEntity->GetName().c_str());
|
|
return;
|
|
}
|
|
|
|
gpInit->mpEffectHandler->GetDepthOfField()->SetFocusBody(pEntity->GetBody(0));
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, SetConstantFocusOnEntity, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void PlayGameMusic(tString asFile, float afVolume, float afFadeStep,
|
|
bool abLoop, int alPrio) {
|
|
gpInit->mpMusicHandler->Play(asFile, abLoop, afVolume, afFadeStep, alPrio);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_5(void, PlayGameMusic, string, float, float, bool, int)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void StopGameMusic(float afFadeStep, int alPrio) {
|
|
gpInit->mpMusicHandler->Stop(afFadeStep, alPrio);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, StopGameMusic, float, int)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void StartScreenShake(float afAmount, float afTime, float afFadeInTime, float afFadeOutTime) {
|
|
gpInit->mpEffectHandler->GetShakeScreen()->Start(afAmount, afTime, afFadeInTime, afFadeOutTime);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_4(void, StartScreenShake, float, float, float, float)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void CreateLightFlashAtArea(tString asArea, float afRadius,
|
|
float afR, float afG, float afB, float afA,
|
|
float afAddTime, float afNegTime) {
|
|
cAreaEntity *pArea = gpInit->mpGame->GetScene()->GetWorld3D()->GetAreaEntity(asArea);
|
|
if (pArea == NULL) {
|
|
Error("Could not find area '%s'\n", asArea.c_str());
|
|
return;
|
|
}
|
|
|
|
gpInit->mpMapHandler->AddLightFlash(pArea->m_mtxTransform.GetTranslation(), afRadius,
|
|
cColor(afR, afG, afB, afA), afAddTime, afNegTime);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_8(void, CreateLightFlashAtArea, string, float, float, float, float, float, float, float)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
///////// ATTACK ////////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void CreateSplashDamage(tString asAreaName, float afRadius,
|
|
float afMinDamage, float afMaxDamge,
|
|
float afMinForce, float afMaxForce,
|
|
float afMaxImpulse, int alStrength) {
|
|
///////////////////
|
|
// Get area
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asAreaName);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Area) {
|
|
Warning("Couldn't find area entity '%s'\n", asAreaName.c_str());
|
|
return;
|
|
}
|
|
cGameArea *pArea = static_cast<cGameArea *>(pEntity);
|
|
|
|
gpInit->mpAttackHandler->CreateSplashDamage(pArea->GetBody(0)->GetWorldPosition(),
|
|
afRadius, afMinDamage, afMaxDamge,
|
|
afMinForce, afMaxForce, afMaxImpulse,
|
|
eAttackTargetFlag_Bodies |
|
|
eAttackTargetFlag_Player |
|
|
eAttackTargetFlag_Enemy,
|
|
1, alStrength);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_8(void, CreateSplashDamage, string, float, float, float, float, float, float, int)
|
|
//-----------------------------------------------------------------------
|
|
|
|
///////// GAME TIMER ////////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void CreateTimer(tString asName, float afTime, tString asCallback, bool abGlobal) {
|
|
gpInit->mpMapHandler->CreateTimer(asName, afTime, asCallback, abGlobal);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_4(void, CreateTimer, string, float, string, bool)
|
|
|
|
static void DestroyTimer(tString asName) {
|
|
cGameTimer *pTimer = gpInit->mpMapHandler->GetTimer(asName);
|
|
if (pTimer == NULL) {
|
|
Warning("Couldn't find timer '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
|
|
pTimer->mbDeleteMe = true;
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, DestroyTimer, string)
|
|
|
|
static void SetTimerPaused(tString asName, bool abPaused) {
|
|
cGameTimer *pTimer = gpInit->mpMapHandler->GetTimer(asName);
|
|
if (pTimer == NULL) {
|
|
Warning("Couldn't find timer '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
|
|
pTimer->mbPaused = abPaused;
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetTimerPaused, string, bool)
|
|
|
|
static void SetTimerTime(tString asName, float afTime) {
|
|
cGameTimer *pTimer = gpInit->mpMapHandler->GetTimer(asName);
|
|
if (pTimer == NULL) {
|
|
Warning("Couldn't find timer '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
|
|
pTimer->mfTime = afTime;
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetTimerTime, string, float)
|
|
|
|
static void AddTimerTime(tString asName, float afTime) {
|
|
cGameTimer *pTimer = gpInit->mpMapHandler->GetTimer(asName);
|
|
if (pTimer == NULL) {
|
|
Warning("Couldn't find timer '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
|
|
pTimer->mfTime += afTime;
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, AddTimerTime, string, float)
|
|
|
|
static float GetTimerTime(tString asName) {
|
|
cGameTimer *pTimer = gpInit->mpMapHandler->GetTimer(asName);
|
|
if (pTimer == NULL) {
|
|
Warning("Couldn't find timer '%s'\n", asName.c_str());
|
|
return 0.0f;
|
|
}
|
|
|
|
return pTimer->mfTime;
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(float, GetTimerTime, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
///////// PLAYER ////////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void GivePlayerDamage(float afAmount, tString asType) {
|
|
ePlayerDamageType type = ePlayerDamageType_BloodSplash;
|
|
tString sLowType = cString::ToLowerCase(asType);
|
|
|
|
if (sLowType == "bloodsplash")
|
|
type = ePlayerDamageType_BloodSplash;
|
|
else if (sLowType == "ice")
|
|
type = ePlayerDamageType_Ice;
|
|
else
|
|
Warning("Damage type %s does not exist!\n", asType.c_str());
|
|
|
|
gpInit->mpPlayer->Damage(afAmount, type);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, GivePlayerDamage, float, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetPlayerHealth(float afHealth) {
|
|
gpInit->mpPlayer->SetHealth(afHealth);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, SetPlayerHealth, float)
|
|
|
|
static float GetPlayerHealth() {
|
|
return gpInit->mpPlayer->GetHealth();
|
|
}
|
|
SCRIPT_DEFINE_FUNC(float, GetPlayerHealth)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetPlayerPose(tString asPose, bool abChangeDirectly) {
|
|
tString sPose = cString::ToLowerCase(asPose);
|
|
|
|
if (sPose == "stand") {
|
|
gpInit->mpPlayer->ChangeMoveState(ePlayerMoveState_Walk, abChangeDirectly);
|
|
} else if (sPose == "crouch") {
|
|
gpInit->mpPlayer->ChangeMoveState(ePlayerMoveState_Crouch, abChangeDirectly);
|
|
} else {
|
|
Warning("Player pose mode '%s' does not exist\n", asPose.c_str());
|
|
}
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetPlayerPose, string, bool)
|
|
|
|
static void SetPlayerActive(bool abActive) {
|
|
gpInit->mpPlayer->SetActive(abActive);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, SetPlayerActive, bool)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void StartPlayerLookAt(tString asEntityName, float afSpeedMul, float afMaxSpeed) {
|
|
///////////////////
|
|
// Get entity
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asEntityName);
|
|
if (pEntity == NULL) {
|
|
Warning("Couldn't find entity '%s'\n", asEntityName.c_str());
|
|
return;
|
|
}
|
|
if (pEntity->GetBody(0) == NULL) {
|
|
Warning("Couldn't find a body in entity '%s'\n", asEntityName.c_str());
|
|
return;
|
|
}
|
|
|
|
gpInit->mpPlayer->GetLookAt()->SetTarget(pEntity->GetBody(0)->GetWorldPosition(), afSpeedMul, afMaxSpeed);
|
|
gpInit->mpPlayer->GetLookAt()->SetActive(true);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, StartPlayerLookAt, string, float, float)
|
|
|
|
static void StopPlayerLookAt() {
|
|
gpInit->mpPlayer->GetLookAt()->SetActive(false);
|
|
}
|
|
SCRIPT_DEFINE_FUNC(void, StopPlayerLookAt)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void StartPlayerFearFilter(float afStrength) {
|
|
gpInit->mpPlayer->GetFearFilter()->SetActive(true);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, StartPlayerFearFilter, float)
|
|
|
|
static void StopPlayerFearFilter() {
|
|
gpInit->mpPlayer->GetFearFilter()->SetActive(false);
|
|
}
|
|
SCRIPT_DEFINE_FUNC(void, StopPlayerFearFilter)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetFlashlightDisabled(bool abDisabled) {
|
|
gpInit->mpPlayer->GetFlashLight()->SetDisabled(abDisabled);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, SetFlashlightDisabled, bool)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
///////// INVENTORY ////////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AddPickupCallback(tString asItem, tString asFunction) {
|
|
gpInit->mpInventory->AddPickupCallback(asItem, asFunction);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, AddPickupCallback, string, string)
|
|
|
|
static void AddUseCallback(tString asItem, tString asEntity, tString asFunction) {
|
|
gpInit->mpInventory->AddUseCallback(asItem, asEntity, asFunction);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, AddUseCallback, string, string, string)
|
|
|
|
static void AddCombineCallback(tString asItem1, tString asItem2, tString asFunction) {
|
|
gpInit->mpInventory->AddCombineCallback(asItem1, asItem2, asFunction);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, AddCombineCallback, string, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void RemovePickupCallback(tString asFunction) {
|
|
gpInit->mpInventory->RemovePickupCallback(asFunction);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, RemovePickupCallback, string)
|
|
|
|
static void RemoveUseCallback(tString asFunction) {
|
|
gpInit->mpInventory->RemoveUseCallback(asFunction);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, RemoveUseCallback, string)
|
|
|
|
static void RemoveCombineCallback(tString asFunction) {
|
|
gpInit->mpInventory->RemoveCombineCallback(asFunction);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, RemoveCombineCallback, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static bool HasItem(tString asName) {
|
|
// if(cString::ToLowerCase(asName)=="notebook") return gpInit->mpInventory->GetNoteBookActive();
|
|
|
|
return gpInit->mpInventory->GetItem(asName) != NULL;
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(bool, HasItem, string)
|
|
|
|
static void RemoveItem(tString asName) {
|
|
cInventoryItem *pItem = gpInit->mpInventory->GetItem(asName);
|
|
if (pItem) {
|
|
gpInit->mpInventory->RemoveItem(pItem);
|
|
} else {
|
|
Warning("Cannot find item '%s' in inventory\n", asName.c_str());
|
|
}
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, RemoveItem, string)
|
|
|
|
static void GiveItem(tString asName, tString asEntityFile, int alSlotIndex) {
|
|
gpInit->mpInventory->AddItemFromFile(asName, asEntityFile, alSlotIndex);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, GiveItem, string, string, int)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
///////// GAME ENTITY PROPERTIES //////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void ReplaceEntity(tString asName, tString asBodyName,
|
|
tString asNewName, tString asNewFile) {
|
|
GAME_ENTITY_BEGIN(asName)
|
|
|
|
if (pEntity->GetBodyNum() == 0) {
|
|
Error("Entity '%s' contains no bodies!\n", pEntity->GetName().c_str());
|
|
return;
|
|
}
|
|
|
|
iPhysicsBody *pBody = NULL;
|
|
|
|
if (asBodyName != "" && pEntity->GetBodyNum() > 1) {
|
|
for (int i = 0; i < pEntity->GetBodyNum(); ++i) {
|
|
tString sBodyName = cString::Sub(pEntity->GetBody(i)->GetName(), (int)asName.size() + 1);
|
|
if (sBodyName == asBodyName) {
|
|
pBody = pEntity->GetBody(i);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (pBody == NULL) {
|
|
Error("Body '%s' could not be found in entity '%s'!\n", asBodyName.c_str(), asName.c_str());
|
|
return;
|
|
}
|
|
} else {
|
|
pBody = pEntity->GetBody(0);
|
|
}
|
|
|
|
cMatrixf mtxTransform = pBody->GetWorldMatrix();
|
|
|
|
gpInit->mpMapHandler->RemoveGameEntity(pEntity);
|
|
|
|
cWorld3D *pWorld = gpInit->mpGame->GetScene()->GetWorld3D();
|
|
pWorld->CreateEntity(asNewName, mtxTransform, asNewFile, true);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_4(void, ReplaceEntity, string, string, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetGameEntityActive(tString asName, bool abX) {
|
|
GAME_ENTITY_BEGIN(asName)
|
|
|
|
pEntity->SetActive(abX);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetGameEntityActive, string, bool)
|
|
|
|
static bool GetGameEntityActive(tString asName) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName);
|
|
if (pEntity == NULL) {
|
|
Warning("Couldn't find game entity '%s'\n", asName.c_str());
|
|
return false;
|
|
}
|
|
|
|
return pEntity->IsActive();
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(bool, GetGameEntityActive, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void CreateGameEntityVar(tString asEntName, tString asVarName, int alVal) {
|
|
GAME_ENTITY_BEGIN(asEntName);
|
|
|
|
pEntity->CreateVar(asVarName, alVal);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, CreateGameEntityVar, string, string, int)
|
|
|
|
static void SetGameEntityVar(tString asEntName, tString asVarName, int alVal) {
|
|
GAME_ENTITY_BEGIN(asEntName);
|
|
|
|
pEntity->SetVar(asVarName, alVal);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, SetGameEntityVar, string, string, int)
|
|
|
|
static void AddGameEntityVar(tString asEntName, tString asVarName, int alVal) {
|
|
GAME_ENTITY_BEGIN(asEntName);
|
|
|
|
pEntity->AddVar(asVarName, alVal);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, AddGameEntityVar, string, string, int)
|
|
|
|
static int GetGameEntityVar(tString asEntName, tString asVarName) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asEntName);
|
|
if (pEntity == NULL) {
|
|
Warning("Couldn't find game entity '%s'\n", asEntName.c_str());
|
|
return 0;
|
|
}
|
|
|
|
return pEntity->GetVar(asVarName);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(int, GetGameEntityVar, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetGameEntityMaxExamineDist(tString asName, float afDist) {
|
|
GAME_ENTITY_BEGIN(asName)
|
|
|
|
pEntity->SetMaxExamineDist(afDist);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetGameEntityMaxExamineDist, string, float)
|
|
|
|
static void SetGameEntityMaxInteractDist(tString asName, float afDist) {
|
|
GAME_ENTITY_BEGIN(asName)
|
|
|
|
pEntity->SetMaxInteractDist(afDist);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetGameEntityMaxInteractDist, string, float)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetGameEntityDescriptionTrans(tString asName,
|
|
tString asTransCat,
|
|
tString asTransName) {
|
|
cInit *mpInit = gpInit;
|
|
GAME_ENTITY_BEGIN(asName)
|
|
|
|
pEntity->SetDescription(kTranslate(asTransCat, asTransName));
|
|
pEntity->SetShowDescritionOnce(false);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, SetGameEntityDescriptionTrans, string, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetGameEntityDescriptionOnceTrans(tString asName,
|
|
tString asTransCat,
|
|
tString asTransName) {
|
|
cInit *mpInit = gpInit;
|
|
GAME_ENTITY_BEGIN(asName)
|
|
|
|
pEntity->SetDescription(kTranslate(asTransCat, asTransName));
|
|
pEntity->SetShowDescritionOnce(true);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, SetGameEntityDescriptionOnceTrans, string, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetGameEntityDescription(tString asName, tString asMessage) {
|
|
GAME_ENTITY_BEGIN(asName)
|
|
|
|
pEntity->SetDescription(cString::To16Char(asMessage));
|
|
pEntity->SetShowDescritionOnce(false);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetGameEntityDescription, string, string)
|
|
|
|
static void SetGameEntityGameNameTrans(tString asName,
|
|
tString asTransCat,
|
|
tString asTransName) {
|
|
cInit *mpInit = gpInit;
|
|
GAME_ENTITY_BEGIN(asName)
|
|
|
|
pEntity->SetGameName(kTranslate(asTransCat, asTransName));
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, SetGameEntityGameNameTrans, string, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void ChangeEntityAnimation(tString asName,
|
|
tString asAnimation,
|
|
bool abLoop) {
|
|
GAME_ENTITY_BEGIN(asName)
|
|
|
|
pEntity->GetMeshEntity()->PlayName(asAnimation, abLoop, true);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, ChangeEntityAnimation, string, string, bool)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetEntityHealth(tString asName, float afHealth) {
|
|
GAME_ENTITY_BEGIN(asName)
|
|
|
|
pEntity->SetHealth(afHealth);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetEntityHealth, string, float)
|
|
|
|
static void DamageEntity(tString asName, float afDamage, int alStrength) {
|
|
GAME_ENTITY_BEGIN(asName)
|
|
|
|
pEntity->Damage(afDamage, alStrength);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, DamageEntity, string, float, int)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetDoorState(tString asName,
|
|
tString asState) {
|
|
/*iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName);
|
|
if(pEntity==NULL || pEntity->GetType() != eGameEntityType_Door)
|
|
{
|
|
Warning("Couldn't find door entity '%s'\n",asName.c_str());
|
|
return;
|
|
}
|
|
|
|
cGameDoor *pDoor = static_cast<cGameDoor*>(pEntity);
|
|
|
|
asState = cString::ToLowerCase(asState);
|
|
eGameDoorState DoorState;
|
|
|
|
if(asState == "open") DoorState = eGameDoorState_Open;
|
|
else if(asState == "closed") DoorState = eGameDoorState_Closed;
|
|
else if(asState == "opening") DoorState = eGameDoorState_Opening;
|
|
else if(asState == "closing") DoorState = eGameDoorState_Closing;
|
|
else{
|
|
Warning("Invalid door state '%s'\n",asState.c_str());
|
|
return;
|
|
}
|
|
|
|
pDoor->ChangeDoorState(DoorState);*/
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetDoorState, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetObjectInteractMode(tString asName, tString asMode) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Object) {
|
|
Warning("Couldn't find object entity '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
|
|
cGameObject *pObject = static_cast<cGameObject *>(pEntity);
|
|
|
|
pObject->SetInteractMode(cEntityLoader_GameObject::ToInteractMode(asMode.c_str()));
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetObjectInteractMode, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetupLink(tString asName,
|
|
tString asMapFile, tString asMapPos,
|
|
tString asStartSound, tString asStopSound,
|
|
float afFadeOutTime, float afFadeInTime) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Link) {
|
|
Warning("Couldn't find object entity '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
|
|
cGameLink *pLink = static_cast<cGameLink *>(pEntity);
|
|
|
|
pLink->msMapFile = asMapFile;
|
|
pLink->msMapPos = asMapPos;
|
|
pLink->msStartSound = asStartSound;
|
|
pLink->msStopSound = asStopSound;
|
|
pLink->mfFadeInTime = afFadeInTime;
|
|
pLink->mfFadeOutTime = afFadeOutTime;
|
|
pLink->msLoadTextCat = "";
|
|
pLink->msLoadTextEntry = "";
|
|
}
|
|
SCRIPT_DEFINE_FUNC_7(void, SetupLink, string, string, string, string, string, float, float)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetupLinkLoadText(tString asName,
|
|
tString asMapFile, tString asMapPos,
|
|
tString asStartSound, tString asStopSound,
|
|
float afFadeOutTime, float afFadeInTime,
|
|
tString asTextCat, tString asTextEntry) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Link) {
|
|
Warning("Couldn't find object entity '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
|
|
cGameLink *pLink = static_cast<cGameLink *>(pEntity);
|
|
|
|
pLink->msMapFile = asMapFile;
|
|
pLink->msMapPos = asMapPos;
|
|
pLink->msStartSound = asStartSound;
|
|
pLink->msStopSound = asStopSound;
|
|
pLink->mfFadeInTime = afFadeInTime;
|
|
pLink->mfFadeOutTime = afFadeOutTime;
|
|
pLink->msLoadTextCat = asTextCat;
|
|
pLink->msLoadTextEntry = asTextEntry;
|
|
}
|
|
SCRIPT_DEFINE_FUNC_9(void, SetupLinkLoadText, string, string, string, string, string, float, float, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetAreaCustomIcon(tString asName, tString asIcon) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Area) {
|
|
Warning("Couldn't find area entity '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
cGameArea *pArea = static_cast<cGameArea *>(pEntity);
|
|
|
|
eCrossHairState aCrosshair = eCrossHairState_None;
|
|
|
|
tString sIconName = cString::ToLowerCase(asIcon);
|
|
|
|
if (sIconName == "active")
|
|
aCrosshair = eCrossHairState_Active;
|
|
else if (sIconName == "inactive")
|
|
aCrosshair = eCrossHairState_Inactive;
|
|
else if (sIconName == "invalid")
|
|
aCrosshair = eCrossHairState_Invalid;
|
|
else if (sIconName == "grab")
|
|
aCrosshair = eCrossHairState_Grab;
|
|
else if (sIconName == "examine")
|
|
aCrosshair = eCrossHairState_Examine;
|
|
else if (sIconName == "pointer")
|
|
aCrosshair = eCrossHairState_Pointer;
|
|
else if (sIconName == "item")
|
|
aCrosshair = eCrossHairState_Item;
|
|
else if (sIconName == "doorlink")
|
|
aCrosshair = eCrossHairState_DoorLink;
|
|
else if (sIconName == "pickup")
|
|
aCrosshair = eCrossHairState_PickUp;
|
|
else if (sIconName == "none")
|
|
aCrosshair = eCrossHairState_None;
|
|
else
|
|
Warning("Icon type %s not found!\n", asIcon.c_str());
|
|
|
|
pArea->SetCustomIcon(aCrosshair);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetAreaCustomIcon, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AddEnemyPatrolNode(tString asEnemy, tString asNode, float afTime,
|
|
tString asAnimation) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asEnemy);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Enemy) {
|
|
Warning("Couldn't find enemy entity '%s'\n", asEnemy.c_str());
|
|
return;
|
|
}
|
|
iGameEnemy *pEnemy = static_cast<iGameEnemy *>(pEntity);
|
|
|
|
pEnemy->AddPatrolNode(asNode, afTime, asAnimation);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_4(void, AddEnemyPatrolNode, string, string, float, string)
|
|
|
|
/**
|
|
* Clears all the patrol nodes for the enemy
|
|
* \param asEnemy The Name of the enemy.
|
|
*/
|
|
static void ClearEnemyPatrolNodes(tString asEnemy) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asEnemy);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Enemy) {
|
|
Warning("Couldn't find enemy entity '%s'\n", asEnemy.c_str());
|
|
return;
|
|
}
|
|
iGameEnemy *pEnemy = static_cast<iGameEnemy *>(pEntity);
|
|
|
|
pEnemy->ClearPatrolNodes();
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, ClearEnemyPatrolNodes, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetEnemyDeathCallback(tString asEnemy, tString asFunction) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asEnemy);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Enemy) {
|
|
Warning("Couldn't find enemy entity '%s'\n", asEnemy.c_str());
|
|
return;
|
|
}
|
|
iGameEnemy *pEnemy = static_cast<iGameEnemy *>(pEntity);
|
|
|
|
pEnemy->SetOnDeathCallback(asFunction);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetEnemyDeathCallback, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetEnemyAttackCallback(tString asEnemy, tString asFunction) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asEnemy);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Enemy) {
|
|
Warning("Couldn't find enemy entity '%s'\n", asEnemy.c_str());
|
|
return;
|
|
}
|
|
iGameEnemy *pEnemy = static_cast<iGameEnemy *>(pEntity);
|
|
|
|
pEnemy->SetOnAttackCallback(asFunction);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetEnemyAttackCallback, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static float GetEnemyHealth(tString asEnemy) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asEnemy);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Enemy) {
|
|
Warning("Couldn't find enemy entity '%s'\n", asEnemy.c_str());
|
|
return 0;
|
|
}
|
|
iGameEnemy *pEnemy = static_cast<iGameEnemy *>(pEntity);
|
|
|
|
return pEnemy->GetHealth();
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(float, GetEnemyHealth, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetEnemyUseTriggers(tString asEnemy, bool abUseTriggers) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asEnemy);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Enemy) {
|
|
Warning("Couldn't find enemy entity '%s'\n", asEnemy.c_str());
|
|
return;
|
|
}
|
|
iGameEnemy *pEnemy = static_cast<iGameEnemy *>(pEntity);
|
|
|
|
pEnemy->SetUsesTriggers(abUseTriggers);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetEnemyUseTriggers, string, bool)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void ShowEnemyPlayer(tString asEnemy) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asEnemy);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Enemy) {
|
|
Warning("Couldn't find enemy entity '%s'\n", asEnemy.c_str());
|
|
return;
|
|
}
|
|
iGameEnemy *pEnemy = static_cast<iGameEnemy *>(pEntity);
|
|
|
|
pEnemy->SetLastPlayerPos(gpInit->mpPlayer->GetCharacterBody()->GetFeetPosition() +
|
|
cVector3f(0, 0.1f, 0));
|
|
pEnemy->ChangeState(STATE_HUNT);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_1(void, ShowEnemyPlayer, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetDoorLocked(tString asDoor, bool abLocked) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asDoor);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_SwingDoor) {
|
|
Warning("Couldn't find swing door entity '%s'\n", asDoor.c_str());
|
|
return;
|
|
}
|
|
cGameSwingDoor *pDoor = static_cast<cGameSwingDoor *>(pEntity);
|
|
|
|
pDoor->SetLocked(abLocked);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetDoorLocked, string, bool)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetupStickArea(tString asArea, bool abCanDeatch,
|
|
bool abMoveBody, bool abRotateBody,
|
|
bool abCheckCenterInArea, float afPoseTime,
|
|
tString asAttachSound, tString asDetachSound,
|
|
tString asAttachPS, tString asDetachPS,
|
|
tString asAttachFunc, tString asDetachFunc) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asArea);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_StickArea) {
|
|
Warning("Couldn't find stick area '%s'\n", asArea.c_str());
|
|
return;
|
|
}
|
|
cGameStickArea *pArea = static_cast<cGameStickArea *>(pEntity);
|
|
|
|
pArea->SetCanDeatch(abCanDeatch);
|
|
|
|
pArea->SetRotateBody(abRotateBody);
|
|
pArea->SetMoveBody(abMoveBody);
|
|
|
|
pArea->SetCheckCenterInArea(abCheckCenterInArea);
|
|
|
|
pArea->SetPoseTime(afPoseTime);
|
|
|
|
pArea->SetAttachSound(asAttachSound);
|
|
pArea->SetDetachSound(asDetachSound);
|
|
|
|
pArea->SetAttachPS(asAttachPS);
|
|
pArea->SetDetachPS(asDetachPS);
|
|
|
|
pArea->SetAttachFunction(asAttachFunc);
|
|
pArea->SetDetachFunction(asDetachFunc);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_12(void, SetupStickArea, string, bool, bool, bool, bool, float,
|
|
string, string, string, string, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void AllowAttachment() {
|
|
cGameStickArea::mbAllowAttachment = true;
|
|
}
|
|
SCRIPT_DEFINE_FUNC(void, AllowAttachment)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetLampLit(tString asName, bool abLit, bool abFade) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Lamp) {
|
|
Warning("Couldn't find lamp '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
cGameLamp *pLamp = static_cast<cGameLamp *>(pEntity);
|
|
|
|
pLamp->SetLit(abLit, abFade);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, SetLampLit, string, bool, bool)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetLampFlicker(tString asName, bool abFlicker) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Lamp) {
|
|
Warning("Couldn't find lamp '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
cGameLamp *pLamp = static_cast<cGameLamp *>(pEntity);
|
|
|
|
pLamp->SetFlicker(abFlicker);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetLampFlicker, string, bool)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetLampLitChangeCallback(tString asName, tString asCallback) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Lamp) {
|
|
Warning("Couldn't find lamp '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
cGameLamp *pLamp = static_cast<cGameLamp *>(pEntity);
|
|
|
|
pLamp->SetLitChangeCallback(asCallback);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, SetLampLitChangeCallback, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetupLadder(tString asName,
|
|
tString asAttachSound,
|
|
tString asClimbUpSound,
|
|
tString asClimbDownSound) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_Ladder) {
|
|
Warning("Couldn't find ladder '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
cGameLadder *pLadder = static_cast<cGameLadder *>(pEntity);
|
|
|
|
pLadder->SetAttachSound(asAttachSound);
|
|
pLadder->SetClimbUpSound(asClimbUpSound);
|
|
pLadder->SetClimbDownSound(asClimbDownSound);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_4(void, SetupLadder, string, string, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetupDamageArea(tString asName, float afDamage,
|
|
float afUpdatesPerSec, int alStrength,
|
|
bool abDisableObjects, bool abDisableEnemies) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_DamageArea) {
|
|
Warning("Couldn't find damage area '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
cGameDamageArea *pDamage = static_cast<cGameDamageArea *>(pEntity);
|
|
|
|
pDamage->SetDamage(afDamage);
|
|
pDamage->SetUpdatesPerSec(afUpdatesPerSec);
|
|
pDamage->SetStrength(alStrength);
|
|
pDamage->SetDisableObjects(abDisableObjects);
|
|
pDamage->SetDisableEnemies(abDisableEnemies);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_6(void, SetupDamageArea, string, float, float, int, bool, bool)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetupForceArea(tString asName,
|
|
float afMaxForce, float afConstant,
|
|
float afDestSpeed, float afMaxMass,
|
|
bool abMulWithMass, bool abForceAtPoint,
|
|
bool abAffectBodies, bool abAffectCharacters) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_ForceArea) {
|
|
Warning("Couldn't find force area '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
cGameForceArea *pForce = static_cast<cGameForceArea *>(pEntity);
|
|
|
|
pForce->SetMaxForce(afMaxForce);
|
|
pForce->SetConstant(afConstant);
|
|
pForce->SetDestSpeed(afDestSpeed);
|
|
pForce->SetMaxMass(afMaxMass);
|
|
pForce->SetMulWithMass(abMulWithMass);
|
|
pForce->SetForceAtPoint(abForceAtPoint);
|
|
pForce->SetAffectBodies(abAffectBodies);
|
|
pForce->SetAffectCharacters(abAffectCharacters);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_9(void, SetupForceArea, string, float, float, float, float, bool, bool, bool, bool)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetupLiquidArea(tString asName,
|
|
float afDensity, float afLinearViscosity,
|
|
float afAngularViscosity,
|
|
tString asPhysicsMaterial,
|
|
float fR, float fG, float fB,
|
|
bool abHasWaves) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_LiquidArea) {
|
|
Warning("Couldn't find liquid area '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
cGameLiquidArea *pLiquid = static_cast<cGameLiquidArea *>(pEntity);
|
|
|
|
pLiquid->SetDensity(afDensity);
|
|
pLiquid->SetLinearViscosity(afLinearViscosity);
|
|
pLiquid->SetAngularViscosity(afAngularViscosity);
|
|
|
|
pLiquid->SetPhysicsMaterial(asPhysicsMaterial);
|
|
|
|
pLiquid->SetColor(cColor(fR, fG, fB, 1));
|
|
|
|
pLiquid->SetHasWaves(abHasWaves);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_9(void, SetupLiquidArea, string, float, float, float, string, float, float, float, bool)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void SetupSaveArea(tString asName,
|
|
tString asMessageCat, tString asMessageEntry,
|
|
tString asSound) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asName);
|
|
if (pEntity == NULL || pEntity->GetType() != eGameEntityType_SaveArea) {
|
|
Warning("Couldn't find save area '%s'\n", asName.c_str());
|
|
return;
|
|
}
|
|
cGameSaveArea *pSave = static_cast<cGameSaveArea *>(pEntity);
|
|
|
|
pSave->SetMessageCat(asMessageCat);
|
|
pSave->SetMessageEntry(asMessageEntry);
|
|
pSave->SetSound(asSound);
|
|
}
|
|
SCRIPT_DEFINE_FUNC_4(void, SetupSaveArea, string, string, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
///////// GAME ENTITY CALLBACKS //////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static eGameCollideScriptType GetGameCollideScriptType(const tString &asType) {
|
|
tString sName = cString::ToLowerCase(asType);
|
|
|
|
if (sName == "enter")
|
|
return eGameCollideScriptType_Enter;
|
|
if (sName == "leave")
|
|
return eGameCollideScriptType_Leave;
|
|
if (sName == "during")
|
|
return eGameCollideScriptType_During;
|
|
|
|
Warning("Collide Type %s doesn't exist!\n", asType.c_str());
|
|
|
|
return eGameCollideScriptType_LastEnum;
|
|
}
|
|
|
|
//////////////////////////////
|
|
|
|
static void AddEntityCollideCallback(tString asType,
|
|
tString asDestName,
|
|
tString asEntityName,
|
|
tString asFuncName) {
|
|
if (cString::ToLowerCase(asDestName) == "player") {
|
|
eGameCollideScriptType type = GetGameCollideScriptType(asType);
|
|
|
|
if (type != eGameCollideScriptType_LastEnum)
|
|
gpInit->mpPlayer->AddCollideScript(type, asFuncName, asEntityName);
|
|
} else {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asDestName);
|
|
if (pEntity == NULL) {
|
|
Warning("Couldn't find entity '%s'\n", asDestName.c_str());
|
|
return;
|
|
}
|
|
|
|
eGameCollideScriptType type = GetGameCollideScriptType(asType);
|
|
|
|
if (type != eGameCollideScriptType_LastEnum)
|
|
pEntity->AddCollideScript(type, asFuncName, asEntityName);
|
|
}
|
|
}
|
|
SCRIPT_DEFINE_FUNC_4(void, AddEntityCollideCallback, string, string, string, string)
|
|
|
|
//////////////////////////////
|
|
|
|
static void RemoveEntityCollideCallback(tString asType,
|
|
tString asDestName,
|
|
tString asEntityName) {
|
|
if (cString::ToLowerCase(asDestName) == "player") {
|
|
eGameCollideScriptType type = GetGameCollideScriptType(asType);
|
|
|
|
if (type != eGameCollideScriptType_LastEnum)
|
|
gpInit->mpPlayer->RemoveCollideScript(type, asEntityName);
|
|
} else {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asDestName);
|
|
if (pEntity == NULL) {
|
|
Warning("Couldn't find entity '%s'\n", asDestName.c_str());
|
|
return;
|
|
}
|
|
|
|
eGameCollideScriptType type = GetGameCollideScriptType(asType);
|
|
|
|
if (type != eGameCollideScriptType_LastEnum) {
|
|
pEntity->RemoveCollideScript(type, asEntityName);
|
|
}
|
|
}
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, RemoveEntityCollideCallback, string, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static eGameEntityScriptType GetGameScriptType(const tString &asType) {
|
|
tString sName = cString::ToLowerCase(asType);
|
|
|
|
if (sName == "playerinteract")
|
|
return eGameEntityScriptType_PlayerInteract;
|
|
if (sName == "playerexamine")
|
|
return eGameEntityScriptType_PlayerExamine;
|
|
if (sName == "playerlook")
|
|
return eGameEntityScriptType_PlayerPick;
|
|
if (sName == "onupdate")
|
|
return eGameEntityScriptType_OnUpdate;
|
|
if (sName == "onbreak")
|
|
return eGameEntityScriptType_OnBreak;
|
|
|
|
Warning("Script type '%s' doesn't exist!\n", asType.c_str());
|
|
|
|
return eGameEntityScriptType_LastEnum;
|
|
}
|
|
|
|
/////////////////////
|
|
|
|
static void AddEntityCallback(tString asType,
|
|
tString asDestName,
|
|
tString asFuncName) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asDestName);
|
|
if (pEntity == NULL) {
|
|
Warning("Couldn't find entity '%s'\n", asDestName.c_str());
|
|
return;
|
|
}
|
|
|
|
eGameEntityScriptType type = GetGameScriptType(asType);
|
|
|
|
if (type != eGameEntityScriptType_LastEnum) {
|
|
pEntity->AddScript(type, asFuncName);
|
|
}
|
|
}
|
|
SCRIPT_DEFINE_FUNC_3(void, AddEntityCallback, string, string, string)
|
|
|
|
/////////////////////
|
|
|
|
static void RemoveEntityCallback(tString asType,
|
|
tString asDestName) {
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asDestName);
|
|
if (pEntity == NULL) {
|
|
Warning("Couldn't find entity '%s'\n", asDestName.c_str());
|
|
return;
|
|
}
|
|
|
|
eGameEntityScriptType type = GetGameScriptType(asType);
|
|
|
|
if (type != eGameEntityScriptType_LastEnum) {
|
|
pEntity->RemoveScript(type);
|
|
}
|
|
}
|
|
SCRIPT_DEFINE_FUNC_2(void, RemoveEntityCallback, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
///////// GAME SOUND //////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
static void CreateSoundEntityAt(tString asType, tString asDestName,
|
|
tString asSoundName, tString asSoundFile) {
|
|
cWorld3D *pWorld = gpInit->mpGame->GetScene()->GetWorld3D();
|
|
iPhysicsWorld *pPhysicsWorld = gpInit->mpGame->GetScene()->GetWorld3D()->GetPhysicsWorld();
|
|
|
|
int lType = 0;
|
|
tString sTypeLow = cString::ToLowerCase(asType);
|
|
|
|
if (sTypeLow == "body")
|
|
lType = 1;
|
|
else if (sTypeLow == "joint")
|
|
lType = 2;
|
|
else if (sTypeLow == "entity")
|
|
lType = 3;
|
|
|
|
if (lType == 0) {
|
|
Warning("Cannot find type '%s' for sound entity position.\n", asType.c_str());
|
|
return;
|
|
}
|
|
|
|
cVector3f vPos;
|
|
|
|
////////////////////////
|
|
// Body
|
|
if (lType == 1) {
|
|
iPhysicsBody *pBody = pPhysicsWorld->GetBody(asDestName);
|
|
if (pBody == NULL) {
|
|
Warning("Body '%s' coudln't be found!\n", asDestName.c_str());
|
|
return;
|
|
}
|
|
|
|
vPos = pBody->GetLocalPosition();
|
|
}
|
|
////////////////////////
|
|
// Joint
|
|
else if (lType == 2) {
|
|
iPhysicsJoint *pJoint = pPhysicsWorld->GetJoint(asDestName);
|
|
if (pJoint == NULL) {
|
|
Warning("Body '%s' coudln't be found!\n", asDestName.c_str());
|
|
return;
|
|
}
|
|
|
|
vPos = pJoint->GetPivotPoint();
|
|
}
|
|
////////////////////////
|
|
// Entity
|
|
{
|
|
iGameEntity *pEntity = gpInit->mpMapHandler->GetGameEntity(asDestName);
|
|
if (pEntity == NULL) {
|
|
Warning("Couldn't find entity '%s'\n", asDestName.c_str());
|
|
return;
|
|
}
|
|
|
|
if (pEntity->GetMeshEntity())
|
|
vPos = pEntity->GetMeshEntity()->GetWorldPosition();
|
|
else
|
|
vPos = pEntity->GetBody(0)->GetLocalPosition();
|
|
}
|
|
|
|
////////////////////////
|
|
// Create sound.
|
|
cSoundEntity *pSound = pWorld->CreateSoundEntity(asSoundName, asSoundFile, true);
|
|
if (pSound) {
|
|
pSound->SetPosition(vPos);
|
|
}
|
|
}
|
|
SCRIPT_DEFINE_FUNC_4(void, CreateSoundEntityAt, string, string, string, string)
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// PUBLIC FUNCTIONS
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void cGameScripts::Init() {
|
|
LowLevelSystem *pLowLevelSystem = gpInit->mpGame->GetSystem()->GetLowLevel();
|
|
gsTempString = new tWString;
|
|
|
|
// Game helper
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddToTempString));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddToTempStringTrans));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddToTempStringAction));
|
|
|
|
// Game general
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(ResetGame));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(StartCredits));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(StartDemoEndText));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(ClearSavedMaps));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(GetActionKeyString));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddMessageTrans));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddMessage));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddMessageTempString));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddSubTitleTrans));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddSubTitle));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddSubTitleTempString));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddRadioMessage));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetRadioOnEndCallback));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetMessagesOverCallback));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(ChangeMap));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetMapGameName));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetMapGameNameTrans));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddNotebookTaskText));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddNotebookTask));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(RemoveNotebookTask));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddNotebookNote));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(StartNumericalPanel));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetInventoryActive));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(FadeIn));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(FadeOut));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(IsFading));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetWideScreenActive));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AutoSave));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(StartFlash));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetWaveGravityActive));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetupWaveGravity));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetDepthOfFieldActive));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetupDepthOfField));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(FocusOnEntity));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetConstantFocusOnEntity));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(PlayGameMusic));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(StopGameMusic));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(StartScreenShake));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(CreateLightFlashAtArea));
|
|
|
|
// Attack
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(CreateSplashDamage));
|
|
|
|
// Game timer
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(CreateTimer));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(DestroyTimer));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetTimerPaused));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetTimerTime));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddTimerTime));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(GetTimerTime));
|
|
|
|
// Player
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(GivePlayerDamage));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetPlayerHealth));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(GetPlayerHealth));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetPlayerPose));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetPlayerActive));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(StartPlayerLookAt));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(StopPlayerLookAt));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(StartPlayerFearFilter));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(StopPlayerFearFilter));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetFlashlightDisabled));
|
|
|
|
// Inventory
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddPickupCallback));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddUseCallback));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddCombineCallback));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(RemovePickupCallback));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(RemoveUseCallback));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(RemoveCombineCallback));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(HasItem));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(RemoveItem));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(GiveItem));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetInventoryMessage));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetInventoryMessageTrans));
|
|
|
|
// Game entity properties
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(ReplaceEntity));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetGameEntityActive));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(GetGameEntityActive));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetGameEntityMaxExamineDist));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetGameEntityMaxInteractDist));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(CreateGameEntityVar));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetGameEntityVar));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddGameEntityVar));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(GetGameEntityVar));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetGameEntityDescriptionTrans));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetGameEntityDescriptionOnceTrans));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetGameEntityDescription));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetGameEntityGameNameTrans));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(ChangeEntityAnimation));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetEntityHealth));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(DamageEntity));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetDoorState));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetObjectInteractMode));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetupLink));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetupLinkLoadText));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetAreaCustomIcon));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddEnemyPatrolNode));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(ClearEnemyPatrolNodes));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetEnemyDeathCallback));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetEnemyAttackCallback));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(GetEnemyHealth));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetEnemyUseTriggers));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(ShowEnemyPlayer));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetDoorLocked));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetupStickArea));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AllowAttachment));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetLampLit));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetLampLitChangeCallback));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetLampFlicker));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetupLadder));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetupDamageArea));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetupForceArea));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetupLiquidArea));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(SetupSaveArea));
|
|
|
|
// Game entity callbacks
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddEntityCollideCallback));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(RemoveEntityCollideCallback));
|
|
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(AddEntityCallback));
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(RemoveEntityCallback));
|
|
|
|
// Game sound
|
|
pLowLevelSystem->addScriptFunc(SCRIPT_REGISTER_FUNC(CreateSoundEntityAt));
|
|
}
|
|
|
|
void cGameScripts::finalize() {
|
|
delete gsTempString;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|