${SRCDIR}/Frustum.cpp
${SRCDIR}/Account.cpp
${SRCDIR}/ConsoleCmds.cpp
+ ${SRCDIR}/Dialog.cpp
${SRCDIR}/Game.cpp
${SRCDIR}/GameDraw.cpp
${SRCDIR}/GameInitDispose.cpp
${SRCDIR}/Frustum.h
${SRCDIR}/Account.h
${SRCDIR}/ConsoleCmds.h
+ ${SRCDIR}/Dialog.h
${SRCDIR}/Game.h
${SRCDIR}/Lights.h
${SRCDIR}/Menu.h
#include "ConsoleCmds.h"
#include "Game.h"
+#include "Dialog.h"
const char *cmd_names[cmd_count] = {
#define DECLARE_COMMAND(cmd) #cmd,
fpackf(tfile, "Bi Bi", Person::players[0]->whichskin, Person::players[0]->creature);
- fpackf(tfile, "Bi", numdialogues);
-
- for (int k = 0; k < numdialogues; k++) {
- fpackf(tfile, "Bi", numdialogueboxes[k]);
- fpackf(tfile, "Bi", dialoguetype[k]);
- for (int l = 0; l < 10; l++) {
- fpackf(tfile, "Bf Bf Bf", participantlocation[k][l].x, participantlocation[k][l].y, participantlocation[k][l].z);
- fpackf(tfile, "Bf", participantyaw[k][l]);
- }
- for (int l = 0; l < numdialogueboxes[k]; l++) {
- fpackf(tfile, "Bi", dialogueboxlocation[k][l]);
- fpackf(tfile, "Bf", dialogueboxcolor[k][l][0]);
- fpackf(tfile, "Bf", dialogueboxcolor[k][l][1]);
- fpackf(tfile, "Bf", dialogueboxcolor[k][l][2]);
- fpackf(tfile, "Bi", dialogueboxsound[k][l]);
-
- int templength = strlen(dialoguetext[k][l]);
- fpackf(tfile, "Bi", (templength));
- for (int m = 0; m < templength; m++) {
- fpackf(tfile, "Bb", dialoguetext[k][l][m]);
- if (dialoguetext[k][l][m] == '\0')
- break;
- }
-
- templength = strlen(dialoguename[k][l]);
- fpackf(tfile, "Bi", templength);
- for (int m = 0; m < templength; m++) {
- fpackf(tfile, "Bb", dialoguename[k][l][m]);
- if (dialoguename[k][l][m] == '\0')
- break;
- }
-
- fpackf(tfile, "Bf Bf Bf", dialoguecamera[k][l].x, dialoguecamera[k][l].y, dialoguecamera[k][l].z);
- fpackf(tfile, "Bi", participantfocus[k][l]);
- fpackf(tfile, "Bi", participantaction[k][l]);
-
- for (int m = 0; m < 10; m++)
- fpackf(tfile, "Bf Bf Bf", participantfacing[k][l][m].x, participantfacing[k][l][m].y, participantfacing[k][l][m].z);
-
- fpackf(tfile, "Bf Bf", dialoguecamerayaw[k][l], dialoguecamerapitch[k][l]);
- }
- }
+ Dialog::saveDialogs(tfile);
for (int k = 0; k < Person::players[0]->numclothes; k++) {
int templength = strlen(Person::players[0]->clothes[k]);
void ch_dialogue(const char *args)
{
- int dlg;
- char buf1[32], buf2[64];
-
- sscanf(args, "%d %31s", &dlg, buf1);
- snprintf(buf2, 63, ":Data:Dialogues:%s.txt", buf1);
-
- dialoguetype[numdialogues] = dlg;
-
- memset(dialoguetext[numdialogues], 0, sizeof(dialoguetext[numdialogues]));
- memset(dialoguename[numdialogues], 0, sizeof(dialoguename[numdialogues]));
-
- ifstream ipstream(ConvertFileName(buf2));
- ipstream.ignore(256, ':');
- ipstream >> numdialogueboxes[numdialogues];
- for (int i = 0; i < numdialogueboxes[numdialogues]; i++) {
- ipstream.ignore(256, ':');
- ipstream.ignore(256, ':');
- ipstream.ignore(256, ' ');
- ipstream >> dialogueboxlocation[numdialogues][i];
- ipstream.ignore(256, ':');
- ipstream >> dialogueboxcolor[numdialogues][i][0];
- ipstream >> dialogueboxcolor[numdialogues][i][1];
- ipstream >> dialogueboxcolor[numdialogues][i][2];
- ipstream.ignore(256, ':');
- ipstream.getline(dialoguename[numdialogues][i], 64);
- ipstream.ignore(256, ':');
- ipstream.ignore(256, ' ');
- ipstream.getline(dialoguetext[numdialogues][i], 128);
- for (int j = 0; j < 128; j++) {
- if (dialoguetext[numdialogues][i][j] == '\\')
- dialoguetext[numdialogues][i][j] = '\n';
- }
- ipstream.ignore(256, ':');
- ipstream >> dialogueboxsound[numdialogues][i];
- }
+ int type;
+ char buf1[32], filename[64];
- for (int i = 0; i < numdialogueboxes[numdialogues]; i++) {
- for (unsigned j = 0; j < Person::players.size(); j++) {
- participantfacing[numdialogues][i][j] = Person::players[j]->facing;
- }
- }
- ipstream.close();
+ sscanf(args, "%d %31s", &type, buf1);
+ snprintf(filename, 63, ":Data:Dialogues:%s.txt", buf1);
- directing = 1;
- indialogue = 0;
- whichdialogue = numdialogues;
+ Dialog::dialogs.push_back(Dialog(type, filename));
- numdialogues++;
+ Dialog::directing = true;
+ Dialog::indialogue = 0;
+ Dialog::whichdialogue = Dialog::dialogs.size();
}
void ch_fixdialogue(const char *args)
{
- char buf1[32], buf2[64];
+ char buf1[32], filename[64];
int whichdi;
sscanf(args, "%d %31s", &whichdi, buf1);
- snprintf(buf2, 63, ":Data:Dialogues:%s.txt", buf1);
-
- memset(dialoguetext[whichdi], 0, sizeof(dialoguetext[whichdi]));
- memset(dialoguename[whichdi], 0, sizeof(dialoguename[whichdi]));
-
- ifstream ipstream(ConvertFileName(buf2));
- ipstream.ignore(256, ':');
- ipstream >> numdialogueboxes[whichdi];
- for (int i = 0; i < numdialogueboxes[whichdi]; i++) {
- ipstream.ignore(256, ':');
- ipstream.ignore(256, ':');
- ipstream.ignore(256, ' ');
- ipstream >> dialogueboxlocation[whichdi][i];
- ipstream.ignore(256, ':');
- ipstream >> dialogueboxcolor[whichdi][i][0];
- ipstream >> dialogueboxcolor[whichdi][i][1];
- ipstream >> dialogueboxcolor[whichdi][i][2];
- ipstream.ignore(256, ':');
- ipstream.getline(dialoguename[whichdi][i], 64);
- ipstream.ignore(256, ':');
- ipstream.ignore(256, ' ');
- ipstream.getline(dialoguetext[whichdi][i], 128);
- for (int j = 0; j < 128; j++) {
- if (dialoguetext[whichdi][i][j] == '\\')
- dialoguetext[whichdi][i][j] = '\n';
- }
- ipstream.ignore(256, ':');
- ipstream >> dialogueboxsound[whichdi][i];
- }
+ snprintf(filename, 63, ":Data:Dialogues:%s.txt", buf1);
- ipstream.close();
+ Dialog::dialogs[whichdi] = Dialog(Dialog::dialogs[whichdi].type, filename);
}
void ch_fixtype(const char *args)
{
int dlg;
sscanf(args, "%d", &dlg);
- dialoguetype[0] = dlg;
+ Dialog::dialogs[0].type = dlg;
}
void ch_fixrotation(const char *args)
{
- participantyaw[whichdialogue][participantfocus[whichdialogue][indialogue]] = Person::players[participantfocus[whichdialogue][indialogue]]->yaw;
+ int playerId = Dialog::currentBox().participantfocus;
+ Dialog::currentDialog().participantyaw[playerId] = Person::players[playerId]->yaw;
}
void ch_ddialogue(const char *args)
{
- if (numdialogues)
- numdialogues--;
+ Dialog::dialogs.pop_back();
}
void ch_dhs(const char *args)
{
int dlg;
sscanf(args, "%d", &dlg);
- whichdialogue = dlg;
+ Dialog::whichdialogue = dlg;
- if (whichdialogue >= numdialogues)
+ if (Dialog::whichdialogue >= Dialog::dialogs.size()) {
return;
-
- for (int i = 0; i < numdialogueboxes[whichdialogue]; i++) {
- Person::players[participantfocus[whichdialogue][i]]->coords = participantlocation[whichdialogue][participantfocus[whichdialogue][i]];
- Person::players[participantfocus[whichdialogue][i]]->yaw = participantyaw[whichdialogue][participantfocus[whichdialogue][i]];
- Person::players[participantfocus[whichdialogue][i]]->targetyaw = participantyaw[whichdialogue][participantfocus[whichdialogue][i]];
- Person::players[participantfocus[whichdialogue][i]]->velocity = 0;
- Person::players[participantfocus[whichdialogue][i]]->animTarget = Person::players[participantfocus[whichdialogue][i]]->getIdle();
- Person::players[participantfocus[whichdialogue][i]]->frameTarget = 0;
}
- directing = 0;
- indialogue = 0;
-
- playdialogueboxsound();
+ Dialog::currentDialog().play();
}
void ch_mapkilleveryone(const char *args)
--- /dev/null
+/*
+Copyright (C) 2003, 2010 - Wolfire Games
+Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file)
+
+This file is part of Lugaru.
+
+Lugaru 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 2 of the License, or
+(at your option) any later version.
+
+Lugaru 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 Lugaru. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "Dialog.h"
+#include "Person.h"
+#include "Input.h"
+#include "Game.h"
+#include "binio.h"
+
+extern int hostile;
+
+int Dialog::indialogue;
+int Dialog::whichdialogue;
+bool Dialog::directing;
+float Dialog::dialoguetime;
+std::vector<Dialog> Dialog::dialogs;
+
+void Dialog::loadDialogs(FILE* tfile)
+{
+ int numdialogues;
+ funpackf(tfile, "Bi", &numdialogues);
+ for (int k = 0; k < numdialogues; k++) {
+ dialogs.push_back(Dialog(tfile));
+ }
+}
+
+Dialog::Dialog(FILE* tfile) : gonethrough(0)
+{
+ int numdialogboxes;
+ funpackf(tfile, "Bi", &numdialogboxes);
+ funpackf(tfile, "Bi", &type);
+ for (int l = 0; l < 10; l++) {
+ funpackf(tfile, "Bf Bf Bf", &participantlocation[l].x, &participantlocation[l].y, &participantlocation[l].z);
+ funpackf(tfile, "Bf", &participantyaw[l]);
+ }
+ for (int l = 0; l < numdialogboxes; l++) {
+ boxes.push_back(DialogBox(tfile));
+ }
+}
+
+std::string funpackf_string(FILE* tfile, int maxlength)
+{
+ int templength;
+ funpackf(tfile, "Bi", &templength);
+ if ((templength > maxlength) || (templength <= 0)) {
+ templength = maxlength;
+ }
+ int m;
+ char* text = new char[maxlength];
+ for (m = 0; m < templength; m++) {
+ funpackf(tfile, "Bb", &text[m]);
+ if (text[m] == '\0')
+ break;
+ }
+ text[m] = 0;
+ std::string result(text);
+ delete[] text;
+ return result;
+}
+
+void fpackf_string(FILE* tfile, std::string text)
+{
+ fpackf(tfile, "Bi", text.size());
+ for (int m = 0; m < text.size(); m++) {
+ fpackf(tfile, "Bb", text[m]);
+ if (text[m] == '\0')
+ break;
+ }
+}
+
+DialogBox::DialogBox(FILE* tfile)
+{
+ funpackf(tfile, "Bi", &location);
+ funpackf(tfile, "Bf", &color[0]);
+ funpackf(tfile, "Bf", &color[1]);
+ funpackf(tfile, "Bf", &color[2]);
+ funpackf(tfile, "Bi", &sound);
+
+ text = funpackf_string(tfile, 128);
+ name = funpackf_string(tfile, 64);
+
+ funpackf(tfile, "Bf Bf Bf", &camera.x, &camera.y, &camera.z);
+ funpackf(tfile, "Bi", &participantfocus);
+ funpackf(tfile, "Bi", &participantaction);
+
+ for (int m = 0; m < 10; m++)
+ funpackf(tfile, "Bf Bf Bf", &participantfacing[m].x, &participantfacing[m].y, &participantfacing[m].z);
+
+ funpackf(tfile, "Bf Bf", &camerayaw, &camerapitch);
+}
+
+/* Load dialog from txt file, used by console */
+Dialog::Dialog(int type, std::string filename) : type(type)
+{
+ ifstream ipstream(ConvertFileName(filename.c_str()));
+ ipstream.ignore(256, ':');
+ int numboxes;
+ ipstream >> numboxes;
+ for (int i = 0; i < numboxes; i++) {
+ boxes.push_back(DialogBox(ipstream));
+ for (unsigned j = 0; j < Person::players.size(); j++) {
+ boxes.back().participantfacing[j] = Person::players[j]->facing;
+ }
+ }
+ ipstream.close();
+}
+
+DialogBox::DialogBox(ifstream &ipstream)
+{
+ ipstream.ignore(256, ':');
+ ipstream.ignore(256, ':');
+ ipstream.ignore(256, ' ');
+ ipstream >> location;
+ ipstream.ignore(256, ':');
+ ipstream >> color[0];
+ ipstream >> color[1];
+ ipstream >> color[2];
+ ipstream.ignore(256, ':');
+ getline(ipstream, name);
+ ipstream.ignore(256, ':');
+ ipstream.ignore(256, ' ');
+ getline(ipstream, text);
+ for (int j = 0; j < 128; j++) {
+ if (text[j] == '\\')
+ text[j] = '\n';
+ }
+ ipstream.ignore(256, ':');
+ ipstream >> sound;
+}
+
+void Dialog::tick(int id)
+{
+ unsigned playerId = type % 10;
+ bool special = (type > 9);
+
+ if ((!hostile || (type > 40) && (type < 50)) &&
+ (playerId < Person::players.size()) &&
+ (playerId > 0) &&
+ ((gonethrough == 0) || !special) &&
+ (special || Input::isKeyPressed(Game::attackkey))) {
+ if ((distsq(&Person::players[0]->coords, &Person::players[playerId]->coords) < 6) ||
+ (Person::players[playerId]->howactive >= typedead1) ||
+ (type > 40) && (type < 50)) {
+ whichdialogue = id;
+ play();
+ dialoguetime = 0;
+ gonethrough++;
+ }
+ }
+}
+
+void Dialog::play()
+{
+ for (int i = 0; i < boxes.size(); i++) {
+ int playerId = boxes[i].participantfocus;
+ Person::players[playerId]->coords = participantlocation[playerId];
+ Person::players[playerId]->yaw = participantyaw[playerId];
+ Person::players[playerId]->targetyaw = participantyaw[playerId];
+ Person::players[playerId]->velocity = 0;
+ Person::players[playerId]->animTarget = Person::players[playerId]->getIdle();
+ Person::players[playerId]->frameTarget = 0;
+ }
+
+ Dialog::directing = false;
+ Dialog::indialogue = 0;
+
+ if (boxes[indialogue].sound != 0) {
+ Game::playdialogueboxsound();
+ }
+}
+
+void Dialog::saveDialogs(FILE* tfile)
+{
+ fpackf(tfile, "Bi", dialogs.size());
+
+ for (int k = 0; k < dialogs.size(); k++) {
+ dialogs[k].save(tfile);
+ }
+}
+
+void Dialog::save(FILE* tfile)
+{
+ fpackf(tfile, "Bi", boxes.size());
+ fpackf(tfile, "Bi", type);
+ for (int l = 0; l < 10; l++) {
+ fpackf(tfile, "Bf Bf Bf", participantlocation[l].x, participantlocation[l].y, participantlocation[l].z);
+ fpackf(tfile, "Bf", participantyaw[l]);
+ }
+ for (int l = 0; l < boxes.size(); l++) {
+ boxes[l].save(tfile);
+ }
+}
+
+void DialogBox::save(FILE* tfile)
+{
+ fpackf(tfile, "Bi", location);
+ fpackf(tfile, "Bf", color[0]);
+ fpackf(tfile, "Bf", color[1]);
+ fpackf(tfile, "Bf", color[2]);
+ fpackf(tfile, "Bi", sound);
+
+ fpackf_string(tfile, text);
+ fpackf_string(tfile, name);
+
+ fpackf(tfile, "Bf Bf Bf", camera.x, camera.y, camera.z);
+ fpackf(tfile, "Bi", participantfocus);
+ fpackf(tfile, "Bi", participantaction);
+
+ for (int m = 0; m < 10; m++)
+ fpackf(tfile, "Bf Bf Bf", participantfacing[m].x, participantfacing[m].y, participantfacing[m].z);
+
+ fpackf(tfile, "Bf Bf", camerayaw, camerapitch);
+}
--- /dev/null
+/*
+Copyright (C) 2003, 2010 - Wolfire Games
+Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file)
+
+This file is part of Lugaru.
+
+Lugaru 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 2 of the License, or
+(at your option) any later version.
+
+Lugaru 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 Lugaru. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _DIALOG_H_
+#define _DIALOG_H_
+
+#include "stdio.h"
+#include "Quaternions.h"
+#include <vector>
+
+class DialogBox
+{
+public:
+ DialogBox(FILE* tfile);
+ DialogBox(ifstream &ipstream);
+ void save(FILE* tfile);
+
+ int location;
+ float color[3];
+ int sound;
+ std::string text;
+ std::string name;
+ XYZ camera;
+ float camerayaw;
+ float camerapitch;
+ int participantfocus;
+ int participantaction;
+ XYZ participantfacing[10];
+};
+
+class Dialog
+{
+public:
+ Dialog(FILE* tfile);
+ Dialog(int type, std::string filename);
+ void tick(int id);
+ void play();
+ void save(FILE* tfile);
+
+ int type;
+ int gonethrough;
+ std::vector<DialogBox> boxes;
+ XYZ participantlocation[10];
+ float participantyaw[10];
+
+ static void loadDialogs(FILE*);
+ static void saveDialogs(FILE*);
+
+ static bool inDialog() { return (indialogue != -1); }
+ static Dialog& currentDialog() { return dialogs[whichdialogue]; }
+ static DialogBox& currentBox() { return currentDialog().boxes[indialogue]; }
+
+ static int indialogue;
+ static int whichdialogue;
+ static bool directing;
+ static float dialoguetime;
+ static std::vector<Dialog> dialogs;
+};
+
+#endif /*_DIALOG_H_*/
#include "Game.h"
#include "openal_wrapper.h"
#include "SDL_thread.h"
+#include "Dialog.h"
extern int mainmenu;
-int numdialogues;
-int numdialogueboxes[max_dialogues];
-int dialoguetype[max_dialogues];
-int dialogueboxlocation[max_dialogues][max_dialoguelength];
-float dialogueboxcolor[max_dialogues][max_dialoguelength][3];
-int dialogueboxsound[max_dialogues][max_dialoguelength];
-char dialoguetext[max_dialogues][max_dialoguelength][128];
-char dialoguename[max_dialogues][max_dialoguelength][64];
-XYZ dialoguecamera[max_dialogues][max_dialoguelength];
-XYZ participantlocation[max_dialogues][10];
-int participantfocus[max_dialogues][max_dialoguelength];
-int participantaction[max_dialogues][max_dialoguelength];
-float participantyaw[max_dialogues][10];
-XYZ participantfacing[max_dialogues][max_dialoguelength][10];
-float dialoguecamerayaw[max_dialogues][max_dialoguelength];
-float dialoguecamerapitch[max_dialogues][max_dialoguelength];
-int indialogue;
-int whichdialogue;
-int directing;
-float dialoguetime;
-int dialoguegonethrough[20];
-
const char *pathtypenames[] = {"keepwalking", "pause"};
const char *editortypenames[] = {
"active", "sitting", "sitting wall", "sleeping",
#define STUBBED(x) { static bool seen = false; if (!seen) { seen = true; fprintf(stderr, "STUBBED: %s at %s:%d\n", x, __FILE__, __LINE__); } }
//#define STUBBED(x)
-extern int numdialogues;
-const int max_dialogues = 20;
-const int max_dialoguelength = 20;
-extern int numdialogueboxes[max_dialogues];
-extern int dialoguetype[max_dialogues];
-extern int dialogueboxlocation[max_dialogues][max_dialoguelength];
-extern float dialogueboxcolor[max_dialogues][max_dialoguelength][3];
-extern int dialogueboxsound[max_dialogues][max_dialoguelength];
-extern char dialoguetext[max_dialogues][max_dialoguelength][128];
-extern char dialoguename[max_dialogues][max_dialoguelength][64];
-extern XYZ dialoguecamera[max_dialogues][max_dialoguelength];
-extern XYZ participantlocation[max_dialogues][10];
-extern int participantfocus[max_dialogues][max_dialoguelength];
-extern int participantaction[max_dialogues][max_dialoguelength];
-extern float participantyaw[max_dialogues][10];
-extern XYZ participantfacing[max_dialogues][max_dialoguelength][10];
-extern float dialoguecamerayaw[max_dialogues][max_dialoguelength];
-extern float dialoguecamerapitch[max_dialogues][max_dialoguelength];
-extern int indialogue;
-extern int whichdialogue;
-extern int directing;
-extern float dialoguetime;
-extern int dialoguegonethrough[20];
-
enum maptypes {
mapkilleveryone, mapgosomewhere,
mapkillsomeone, mapkillmost // These two are unused
#include "Input.h"
#include "Awards.h"
#include "Menu.h"
+#include "Dialog.h"
extern XYZ viewer;
extern int environment;
glColor4f(.5, .5, .5, 1);
if (!console) {
if (!tutoriallevel)
- if (bonus > 0 && bonustime < 1 && !winfreeze && indialogue == -1/*bonustime<4*/) {
+ if (bonus > 0 && bonustime < 1 && !winfreeze && !Dialog::inDialog()) {
const char *bonus_name;
if (bonus < bonus_count)
bonus_name = bonus_names[bonus];
done = 1;
i++;
}
- } else if (hotspottype[closest] >= 20 && dialoguegonethrough[hotspottype[closest] - 20] == 0) {
- whichdialogue = hotspottype[closest] - 20;
- for (int j = 0; j < numdialogueboxes[whichdialogue]; j++) {
- Person::players[participantfocus[whichdialogue][j]]->coords = participantlocation[whichdialogue][participantfocus[whichdialogue][j]];
- Person::players[participantfocus[whichdialogue][j]]->yaw = participantyaw[whichdialogue][participantfocus[whichdialogue][j]];
- Person::players[participantfocus[whichdialogue][j]]->targetyaw = participantyaw[whichdialogue][participantfocus[whichdialogue][j]];
- Person::players[participantfocus[whichdialogue][j]]->velocity = 0;
- Person::players[participantfocus[whichdialogue][j]]->animTarget = Person::players[participantfocus[whichdialogue][j]]->getIdle();
- Person::players[participantfocus[whichdialogue][j]]->frameTarget = 0;
- }
- directing = 0;
- indialogue = 0;
- dialoguegonethrough[whichdialogue]++;
- if (dialogueboxsound[whichdialogue][indialogue] != 0) {
- int whichsoundplay;
- if (dialogueboxsound[whichdialogue][indialogue] == 1) whichsoundplay = rabbitchitter;
- if (dialogueboxsound[whichdialogue][indialogue] == 2) whichsoundplay = rabbitchitter2;
- if (dialogueboxsound[whichdialogue][indialogue] == 3) whichsoundplay = rabbitpainsound;
- if (dialogueboxsound[whichdialogue][indialogue] == 4) whichsoundplay = rabbitpain1sound;
- if (dialogueboxsound[whichdialogue][indialogue] == 5) whichsoundplay = rabbitattacksound;
- if (dialogueboxsound[whichdialogue][indialogue] == 6) whichsoundplay = rabbitattack2sound;
- if (dialogueboxsound[whichdialogue][indialogue] == 7) whichsoundplay = rabbitattack3sound;
- if (dialogueboxsound[whichdialogue][indialogue] == 8) whichsoundplay = rabbitattack4sound;
- if (dialogueboxsound[whichdialogue][indialogue] == 9) whichsoundplay = growlsound;
- if (dialogueboxsound[whichdialogue][indialogue] == 10) whichsoundplay = growl2sound;
- if (dialogueboxsound[whichdialogue][indialogue] == 11) whichsoundplay = snarlsound;
- if (dialogueboxsound[whichdialogue][indialogue] == 12) whichsoundplay = snarl2sound;
- if (dialogueboxsound[whichdialogue][indialogue] == 13) whichsoundplay = barksound;
- if (dialogueboxsound[whichdialogue][indialogue] == 14) whichsoundplay = bark2sound;
- if (dialogueboxsound[whichdialogue][indialogue] == 15) whichsoundplay = bark3sound;
- if (dialogueboxsound[whichdialogue][indialogue] == 16) whichsoundplay = barkgrowlsound;
- if (dialogueboxsound[whichdialogue][indialogue] == -1) whichsoundplay = fireendsound;
- if (dialogueboxsound[whichdialogue][indialogue] == -2) whichsoundplay = firestartsound;
- if (dialogueboxsound[whichdialogue][indialogue] == -3) whichsoundplay = consolesuccesssound;
- if (dialogueboxsound[whichdialogue][indialogue] == -4) whichsoundplay = consolefailsound;
- emit_sound_at(whichsoundplay, Person::players[participantfocus[whichdialogue][indialogue]]->coords);
- }
+ } else if ((hotspottype[closest] >= 20) && (Dialog::dialogs[hotspottype[closest] - 20].gonethrough == 0)) {
+ Dialog::whichdialogue = hotspottype[closest] - 20;
+ Dialog::currentDialog().play();
+ Dialog::currentDialog().gonethrough++;
}
}
}
- if (indialogue != -1 && !mainmenu) {
+ if (Dialog::inDialog() && !mainmenu) {
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glDisable(GL_LIGHTING);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
- if (dialogueboxlocation[whichdialogue][indialogue] == 1)
+ if (Dialog::currentBox().location == 1)
glTranslatef(0, screenheight * 3 / 4, 0);
glScalef(screenwidth, screenheight / 4, 1);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
- glColor4f(dialogueboxcolor[whichdialogue][indialogue][0], dialogueboxcolor[whichdialogue][indialogue][1], dialogueboxcolor[whichdialogue][indialogue][2], 0.7);
+ glColor4f(Dialog::currentBox().color[0], Dialog::currentBox().color[1], Dialog::currentBox().color[2], 0.7);
glBegin(GL_QUADS);
glVertex3f(0, 0, 0.0f);
glVertex3f(1, 0, 0.0f);
float starty;
startx = screenwidth * 1 / 5;
- if (dialogueboxlocation[whichdialogue][indialogue] == 1)
+ if (Dialog::currentBox().location == 1)
starty = screenheight / 16 + screenheight * 4 / 5;
- if (dialogueboxlocation[whichdialogue][indialogue] == 2)
+ if (Dialog::currentBox().location == 2)
starty = screenheight * 1 / 5 - screenheight / 16;
char tempname[264];
- bool goodchar;
int tempnum = 0;
for (int i = 0; i < 264; i++) {
tempname[i] = '\0';
}
- for (int i = 0; i < (int)strlen(dialoguename[whichdialogue][indialogue]); i++) {
- tempname[tempnum] = dialoguename[whichdialogue][indialogue][i];
- goodchar = 1;
- if (dialoguename[whichdialogue][indialogue][i] == '#' || dialoguename[whichdialogue][indialogue][i] == '\0')
- goodchar = 0;
- if (goodchar)
- tempnum++;
- else
+ for (int i = 0; i < Dialog::currentBox().name.size(); i++) {
+ tempname[tempnum] = Dialog::currentBox().name[i];
+ if (tempname[tempnum] == '#' || tempname[tempnum] == '\0')
tempname[tempnum] = '\0';
+ else
+ tempnum++;
}
sprintf (string, "%s: ", tempname);
- if (dialogueboxcolor[whichdialogue][indialogue][0] + dialogueboxcolor[whichdialogue][indialogue][1] + dialogueboxcolor[whichdialogue][indialogue][2] < 1.5) {
+ if (Dialog::currentBox().color[0] + Dialog::currentBox().color[1] + Dialog::currentBox().color[2] < 1.5) {
glColor4f(0, 0, 0, tutorialopac);
text->glPrintOutline(startx - 2 * 7.6 * strlen(string)*screenwidth / 1024 - 4, starty - 4, string, 1, 1.5 * 1.25 * screenwidth / 1024, screenwidth, screenheight);
glColor4f(0.7, 0.7, 0.7, tutorialopac);
}
tempnum = 0;
- for (int i = 0; i < (int)strlen(dialoguetext[whichdialogue][indialogue]) + 1; i++) {
- tempname[tempnum] = dialoguetext[whichdialogue][indialogue][i];
- if (dialoguetext[whichdialogue][indialogue][i] != '#')
+ for (int i = 0; i < Dialog::currentBox().text.size() + 1; i++) {
+ tempname[tempnum] = Dialog::currentBox().text[i];
+ if (Dialog::currentBox().text[i] != '#')
tempnum++;
}
int i = 0;
while (!done) {
if (string[i] == '\n' || string[i] > 'z' || string[i] < ' ' || string[i] == '\0') {
- if (dialogueboxcolor[whichdialogue][indialogue][0] + dialogueboxcolor[whichdialogue][indialogue][1] + dialogueboxcolor[whichdialogue][indialogue][2] < 1.5) {
+ if (Dialog::currentBox().color[0] + Dialog::currentBox().color[1] + Dialog::currentBox().color[2] < 1.5) {
glColor4f(0, 0, 0, tutorialopac);
text->glPrintOutline(startx/*-7.6*(i-lastline)*screenwidth/1024*/ - 4, starty - 4 - 20 * screenwidth / 1024 * line, string, 1, 1.5 * 1.25 * screenwidth / 1024, screenwidth, screenheight, lastline, i);
glColor4f(1, 1, 1, tutorialopac);
}
}
- if (!tutoriallevel && !winfreeze && indialogue == -1 && !mainmenu) {
+ if (!tutoriallevel && !winfreeze && !Dialog::inDialog() && !mainmenu) {
if (campaign) {
if (scoreadded)
sprintf (string, "Score: %d", (int)accountactive->getCampaignScore());
}
}
- if (difficulty < 2 && indialogue == -1) { // minimap
+ if (difficulty < 2 && !Dialog::inDialog()) { // minimap
float mapviewdist = 20000;
glDisable(GL_DEPTH_TEST);
extern float slomospeed;
extern bool gamestarted;
-extern int numdialogues;
-extern int numdialogueboxes[20];
-extern int dialoguetype[20];
-extern int dialogueboxlocation[20][20];
-extern float dialogueboxcolor[20][20][3];
-extern int dialogueboxsound[20][20];
-extern char dialoguetext[20][20][128];
-extern char dialoguename[20][20][64];
-extern XYZ dialoguecamera[20][20];
-extern float dialoguecamerayaw[20][20];
-extern float dialoguecamerapitch[20][20];
-extern int indialogue;
-extern int whichdialogue;
-extern float dialoguetime;
-
extern float accountcampaignhighscore[10];
extern float accountcampaignfasttime[10];
extern float accountcampaignscore[10];
#include "Awards.h"
#include "Menu.h"
#include "ConsoleCmds.h"
+#include "Dialog.h"
#include <algorithm>
#include <set>
void Game::playdialogueboxsound()
{
XYZ temppos;
- temppos = Person::players[participantfocus[whichdialogue][indialogue]]->coords;
+ temppos = Person::players[Dialog::currentBox().participantfocus]->coords;
temppos = temppos - viewer;
Normalise(&temppos);
temppos += viewer;
int sound = -1;
- switch (dialogueboxsound[whichdialogue][indialogue]) {
+ switch (Dialog::currentBox().sound) {
case -6:
sound = alarmsound;
break;
animation[bounceidleanim].Load((char *)"Idle", middleheight, neutral);
- numdialogues = 0;
+ Dialog::dialogs.clear();
- for (int i = 0; i < 20; i++)
- dialoguegonethrough[i] = 0;
-
- indialogue = -1;
+ Dialog::indialogue = -1;
cameramode = 0;
damagedealt = 0;
//dialogues
if (mapvers >= 8) {
- funpackf(tfile, "Bi", &numdialogues);
- for (int k = 0; k < numdialogues; k++) {
- funpackf(tfile, "Bi", &numdialogueboxes[k]);
- funpackf(tfile, "Bi", &dialoguetype[k]);
- for (int l = 0; l < 10; l++) {
- funpackf(tfile, "Bf Bf Bf", &participantlocation[k][l].x, &participantlocation[k][l].y, &participantlocation[k][l].z);
- funpackf(tfile, "Bf", &participantyaw[k][l]);
- }
- for (int l = 0; l < numdialogueboxes[k]; l++) {
- funpackf(tfile, "Bi", &dialogueboxlocation[k][l]);
- funpackf(tfile, "Bf", &dialogueboxcolor[k][l][0]);
- funpackf(tfile, "Bf", &dialogueboxcolor[k][l][1]);
- funpackf(tfile, "Bf", &dialogueboxcolor[k][l][2]);
- funpackf(tfile, "Bi", &dialogueboxsound[k][l]);
-
- funpackf(tfile, "Bi", &templength);
- if (templength > 128 || templength <= 0)
- templength = 128;
- int m;
- for (m = 0; m < templength; m++) {
- funpackf(tfile, "Bb", &dialoguetext[k][l][m]);
- if (dialoguetext[k][l][m] == '\0')
- break;
- }
- dialoguetext[k][l][m] = 0;
-
- funpackf(tfile, "Bi", &templength);
- if (templength > 64 || templength <= 0)
- templength = 64;
- for (m = 0; m < templength; m++) {
- funpackf(tfile, "Bb", &dialoguename[k][l][m]);
- if (dialoguename[k][l][m] == '\0')
- break;
- }
- dialoguename[k][l][m] = 0;
- funpackf(tfile, "Bf Bf Bf", &dialoguecamera[k][l].x, &dialoguecamera[k][l].y, &dialoguecamera[k][l].z);
- funpackf(tfile, "Bi", &participantfocus[k][l]);
- funpackf(tfile, "Bi", &participantaction[k][l]);
-
- for (m = 0; m < 10; m++)
- funpackf(tfile, "Bf Bf Bf", &participantfacing[k][l][m].x, &participantfacing[k][l][m].y, &participantfacing[k][l][m].z);
-
- funpackf(tfile, "Bf Bf", &dialoguecamerayaw[k][l], &dialoguecamerapitch[k][l]);
- }
- }
- } else {
- numdialogues = 0;
+ Dialog::loadDialogs(tfile);
}
for (int k = 0; k < Person::players[0]->numclothes; k++) {
}
}
- if (!hostile || indialogue != -1)
+ if (!hostile || Dialog::inDialog())
Person::players[0]->attackkeydown = 0;
for (unsigned k = 0; k < Person::players.size(); k++) {
- if (indialogue != -1)
+ if (Dialog::inDialog())
Person::players[k]->attackkeydown = 0;
if (Person::players[k]->animTarget != rabbitrunninganim && Person::players[k]->animTarget != wolfrunninganim) {
if (Person::players[k]->aitype != playercontrolled)
void doAI(unsigned i)
{
static bool connected;
- if (Person::players[i]->aitype != playercontrolled && indialogue == -1) {
+ if (Person::players[i]->aitype != playercontrolled && !Dialog::inDialog()) {
Person::players[i]->jumpclimb = 0;
//disable movement in editor
if (editorenabled)
//dialogues
static float talkdelay = 0;
- if (indialogue != -1)
+ if (Dialog::inDialog())
talkdelay = 1;
talkdelay -= multiplier;
- if (talkdelay <= 0 && indialogue == -1 && animation[Person::players[0]->animTarget].height != highheight)
- for (int i = 0; i < numdialogues; i++) {
- unsigned realdialoguetype;
- bool special;
- /* FIXME - Seems like modulo done with ifs */
- if (dialoguetype[i] > 49) {
- realdialoguetype = dialoguetype[i] - 50;
- special = 1;
- } else if (dialoguetype[i] > 39) {
- realdialoguetype = dialoguetype[i] - 40;
- special = 1;
- } else if (dialoguetype[i] > 29) {
- realdialoguetype = dialoguetype[i] - 30;
- special = 1;
- } else if (dialoguetype[i] > 19) {
- realdialoguetype = dialoguetype[i] - 20;
- special = 1;
- } else if (dialoguetype[i] > 9) {
- realdialoguetype = dialoguetype[i] - 10;
- special = 1;
- } else {
- realdialoguetype = dialoguetype[i];
- special = 0;
- }
- if ((!hostile || dialoguetype[i] > 40 && dialoguetype[i] < 50) &&
- realdialoguetype < Person::players.size() &&
- realdialoguetype > 0 &&
- (dialoguegonethrough[i] == 0 || !special) &&
- (special || Input::isKeyPressed(attackkey))) {
- if (distsq(&Person::players[0]->coords, &Person::players[realdialoguetype]->coords) < 6 ||
- Person::players[realdialoguetype]->howactive >= typedead1 ||
- dialoguetype[i] > 40 && dialoguetype[i] < 50) {
- whichdialogue = i;
- for (int j = 0; j < numdialogueboxes[whichdialogue]; j++) {
- Person::players[participantfocus[whichdialogue][j]]->coords = participantlocation[whichdialogue][participantfocus[whichdialogue][j]];
- Person::players[participantfocus[whichdialogue][j]]->yaw = participantyaw[whichdialogue][participantfocus[whichdialogue][j]];
- Person::players[participantfocus[whichdialogue][j]]->targetyaw = participantyaw[whichdialogue][participantfocus[whichdialogue][j]];
- Person::players[participantfocus[whichdialogue][j]]->velocity = 0;
- Person::players[participantfocus[whichdialogue][j]]->animTarget = Person::players[participantfocus[whichdialogue][j]]->getIdle();
- Person::players[participantfocus[whichdialogue][j]]->frameTarget = 0;
- }
- directing = 0;
- indialogue = 0;
- dialoguetime = 0;
- dialoguegonethrough[i]++;
- if (dialogueboxsound[whichdialogue][indialogue] != 0) {
- playdialogueboxsound();
- }
- }
- }
+ if (talkdelay <= 0 && !Dialog::inDialog() && animation[Person::players[0]->animTarget].height != highheight) {
+ for (int i = 0; i < Dialog::dialogs.size(); i++) {
+ Dialog::dialogs[i].tick(i);
}
+ }
windvar += multiplier;
smoketex += multiplier;
static XYZ oldviewer;
//control keys
- if (indialogue == -1) {
+ if (!Dialog::inDialog()) {
Person::players[0]->forwardkeydown = Input::isKeyDown(forwardkey);
Person::players[0]->leftkeydown = Input::isKeyDown(leftkey);
Person::players[0]->backkeydown = Input::isKeyDown(backkey);
Person::players[0]->jumpclimb = 0;
- if (indialogue != -1) {
+ if (Dialog::inDialog()) {
cameramode = 1;
- if (directing) {
+ if (Dialog::directing) {
facing = 0;
facing.z = -1;
if (Input::isKeyPressed(SDL_SCANCODE_MINUS))
whichend = -1;
if (whichend != -1) {
- participantfocus[whichdialogue][indialogue] = whichend;
- participantlocation[whichdialogue][whichend] = Person::players[whichend]->coords;
- participantyaw[whichdialogue][whichend] = Person::players[whichend]->yaw;
+ Dialog::currentBox().participantfocus = whichend;
+ Dialog::currentDialog().participantlocation[whichend] = Person::players[whichend]->coords;
+ Dialog::currentDialog().participantyaw[whichend] = Person::players[whichend]->yaw;
}
if (whichend == -1) {
- participantfocus[whichdialogue][indialogue] = -1;
+ Dialog::currentBox().participantfocus = -1;
}
- if (Person::players[participantfocus[whichdialogue][indialogue]]->dead) {
- indialogue = -1;
- directing = 0;
+ /* FIXME: potentially accessing -1 in Person::players! */
+ if (Person::players[Dialog::currentBox().participantfocus]->dead) {
+ Dialog::indialogue = -1;
+ Dialog::directing = false;
cameramode = 0;
}
- dialoguecamera[whichdialogue][indialogue] = viewer;
- dialoguecamerayaw[whichdialogue][indialogue] = yaw;
- dialoguecamerapitch[whichdialogue][indialogue] = pitch;
- indialogue++;
- if (indialogue < numdialogueboxes[whichdialogue]) {
- if (dialogueboxsound[whichdialogue][indialogue] != 0) {
+ Dialog::currentBox().camera = viewer;
+ Dialog::currentBox().camerayaw = yaw;
+ Dialog::currentBox().camerapitch = pitch;
+ Dialog::indialogue++;
+ if (Dialog::indialogue < Dialog::currentDialog().boxes.size()) {
+ if (Dialog::currentBox().sound != 0) {
playdialogueboxsound();
}
}
for (unsigned j = 0; j < Person::players.size(); j++) {
- participantfacing[whichdialogue][indialogue][j] = participantfacing[whichdialogue][indialogue - 1][j];
+ Dialog::currentBox().participantfacing[j] = Dialog::currentDialog().boxes[Dialog::indialogue - 1].participantfacing[j];
}
}
//TODO: should these be KeyDown or KeyPressed?
if (Input::isKeyDown(SDL_SCANCODE_KP_8)) whichend = 8;
if (Input::isKeyDown(SDL_SCANCODE_KP_9)) whichend = 9;
if (Input::isKeyDown(SDL_SCANCODE_KP_0)) whichend = 0;
- participantfacing[whichdialogue][indialogue][whichend] = facing;
+ Dialog::currentBox().participantfacing[whichend] = facing;
}
- if (indialogue >= numdialogueboxes[whichdialogue]) {
- indialogue = -1;
- directing = 0;
+ if (Dialog::indialogue >= Dialog::currentDialog().boxes.size()) {
+ Dialog::indialogue = -1;
+ Dialog::directing = false;
cameramode = 0;
}
}
- if (!directing) {
+ if (!Dialog::directing) {
pause_sound(whooshsound);
- viewer = dialoguecamera[whichdialogue][indialogue];
+ viewer = Dialog::currentBox().camera;
viewer.y = max((double)viewer.y, terrain.getHeight(viewer.x, viewer.z) + .1);
- yaw = dialoguecamerayaw[whichdialogue][indialogue];
- pitch = dialoguecamerapitch[whichdialogue][indialogue];
- if (dialoguetime > 0.5)
+ yaw = Dialog::currentBox().camerayaw;
+ pitch = Dialog::currentBox().camerapitch;
+ if (Dialog::dialoguetime > 0.5) {
if ( Input::isKeyPressed(SDL_SCANCODE_1) ||
Input::isKeyPressed(SDL_SCANCODE_2) ||
Input::isKeyPressed(SDL_SCANCODE_3) ||
Input::isKeyPressed(SDL_SCANCODE_0) ||
Input::isKeyPressed(SDL_SCANCODE_MINUS) ||
Input::isKeyPressed(attackkey)) {
- indialogue++;
- if (indialogue < numdialogueboxes[whichdialogue]) {
- if (dialogueboxsound[whichdialogue][indialogue] != 0) {
+ Dialog::indialogue++;
+ if (Dialog::indialogue < Dialog::currentDialog().boxes.size()) {
+ if (Dialog::currentBox().sound != 0) {
playdialogueboxsound();
- if (dialogueboxsound[whichdialogue][indialogue] == -5) {
+ if (Dialog::currentBox().sound == -5) {
hotspot[numhotspots] = Person::players[0]->coords;
hotspotsize[numhotspots] = 10;
hotspottype[numhotspots] = -1;
numhotspots++;
}
- if (dialogueboxsound[whichdialogue][indialogue] == -6) {
+ if (Dialog::currentBox().sound == -6) {
hostile = 1;
}
- if (Person::players[participantfocus[whichdialogue][indialogue]]->dead) {
- indialogue = -1;
- directing = 0;
+ if (Person::players[Dialog::currentBox().participantfocus]->dead) {
+ Dialog::indialogue = -1;
+ Dialog::directing = false;
cameramode = 0;
}
}
}
}
- if (indialogue >= numdialogueboxes[whichdialogue]) {
- indialogue = -1;
- directing = 0;
+ }
+ if (Dialog::indialogue >= Dialog::currentDialog().boxes.size()) {
+ Dialog::indialogue = -1;
+ Dialog::directing = false;
cameramode = 0;
- if (dialoguetype[whichdialogue] > 19 && dialoguetype[whichdialogue] < 30) {
+ if (Dialog::currentDialog().type > 19 && Dialog::currentDialog().type < 30) {
hostile = 1;
}
- if (dialoguetype[whichdialogue] > 29 && dialoguetype[whichdialogue] < 40) {
+ if (Dialog::currentDialog().type > 29 && Dialog::currentDialog().type < 40) {
windialogue = true;
}
- if (dialoguetype[whichdialogue] > 49 && dialoguetype[whichdialogue] < 60) {
+ if (Dialog::currentDialog().type > 49 && Dialog::currentDialog().type < 60) {
hostile = 1;
for (unsigned i = 1; i < Person::players.size(); i++) {
Person::players[i]->aitype = attacktypecutoff;
Person::players[0]->jumptogglekeydown = 1;
- dialoguetime += multiplier;
+ Dialog::dialoguetime += multiplier;
hawkyaw += multiplier * 25;
realhawkcoords = 0;
realhawkcoords.x = 25;
static float oldtargetyaw;
if (!Person::players[i]->skeleton.free) {
oldtargetyaw = Person::players[i]->targetyaw;
- if (i == 0 && indialogue == -1) {
+ if (i == 0 && !Dialog::inDialog()) {
//TODO: refactor repetitive code
if (!animation[Person::players[0]->animTarget].attack &&
Person::players[0]->animTarget != staggerbackhighanim &&
Person::players[i]->targetheadyaw = yaw;
Person::players[i]->targetheadpitch = pitch;
}
- if (i != 0 && Person::players[i]->aitype == playercontrolled && indialogue == -1) {
+ if (i != 0 && Person::players[i]->aitype == playercontrolled && !Dialog::inDialog()) {
if (!animation[Person::players[i]->animTarget].attack &&
Person::players[i]->animTarget != staggerbackhighanim &&
Person::players[i]->animTarget != staggerbackhardanim &&
Person::players[i]->targetheadyaw = Person::players[i]->lookyaw;
Person::players[i]->targetheadpitch = Person::players[i]->lookpitch;
}
- if (indialogue != -1) {
- Person::players[i]->targetheadyaw = 180 - roughDirection(participantfacing[whichdialogue][indialogue][i]);
- Person::players[i]->targetheadpitch = pitchOf(participantfacing[whichdialogue][indialogue][i]);
+ if (Dialog::inDialog()) {
+ Person::players[i]->targetheadyaw = 180 - roughDirection(Dialog::currentBox().participantfacing[i]);
+ Person::players[i]->targetheadpitch = pitchOf(Dialog::currentBox().participantfacing[i]);
}
if (leveltime < .5)
Person::players[i]->throwkeydown = 0;
}
- if (indialogue != -1) {
+ if (Dialog::inDialog()) {
Person::players[i]->forwardkeydown = 0;
Person::players[i]->leftkeydown = 0;
Person::players[i]->backkeydown = 0;
} else
absflatfacing = flatfacing;
- if (indialogue != -1) {
+ if (Dialog::inDialog()) {
Person::players[i]->forwardkeydown = 0;
Person::players[i]->leftkeydown = 0;
Person::players[i]->backkeydown = 0;
void Game::TickOnce()
{
- if (mainmenu)
+ if (mainmenu) {
yaw += multiplier * 5;
- else if (directing || indialogue == -1) {
+ } else if (Dialog::directing || !Dialog::inDialog()) {
yaw += deltah * .7;
- if (!invertmouse)
- pitch += deltav * .7;
- if (invertmouse)
+ if (invertmouse) {
pitch -= deltav * .7;
+ } else {
+ pitch += deltav * .7;
+ }
if (pitch > 90)
pitch = 90;
if (pitch < -70)
#include "Sounds.h"
#include "Awards.h"
#include "Game.h"
+#include "Dialog.h"
extern float multiplier;
extern Terrain terrain;
extern int hostile;
extern float hostiletime;
-extern int indialogue;
-
extern bool gamestarted;
std::vector<std::shared_ptr<Person>> Person::players(1, std::shared_ptr<Person>(new Person()));
*/
int Person::getIdle()
{
- if (indialogue != -1 && howactive == typeactive && creature == rabbittype)
+ if (Dialog::inDialog() && (howactive == typeactive) && (creature == rabbittype))
return talkidleanim;
if (hasvictim && (victim != this->shared_from_this())/*||(id==0&&attackkeydown)*/)
if (/*(id==0&&attackkeydown)||*/(!victim->dead && victim->aitype != passivetype &&