X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;ds=inline;f=Source%2FGameTick.cpp;h=13eb1cbff770768c09f14b06622ef81508e62a93;hb=64560867a9b6486d601784a2fe4ba6149d31b7aa;hp=da2291fc3e6dfe989c8534afadf8848b50174d58;hpb=4d0ec1838440e55f24e8ec9501a62348cd9e2ec3;p=lugaru.git
diff --git a/Source/GameTick.cpp b/Source/GameTick.cpp
index da2291f..13eb1cb 100644
--- a/Source/GameTick.cpp
+++ b/Source/GameTick.cpp
@@ -44,6 +44,7 @@ along with Lugaru. If not, see .
#include "ConsoleCmds.h"
#include "Dialog.h"
#include "Utils/Folders.h"
+#include "Hotspot.h"
#include
#include
@@ -130,14 +131,6 @@ extern float hostiletime;
extern bool gamestarted;
-extern int numhotspots;
-extern int killhotspot;
-extern XYZ hotspot[40];
-extern int hotspottype[40];
-extern float hotspotsize[40];
-extern char hotspottext[40][256];
-extern int currenthotspot;
-
extern int hostile;
extern bool stillloading;
@@ -840,8 +833,8 @@ void Game::Loadlevel(const std::string& name)
if (accountactive)
difficulty = accountactive->getDifficulty();
- numhotspots = 0;
- currenthotspot = -1;
+ Hotspot::hotspots.clear();
+ Hotspot::current = -1;
bonustime = 1;
skyboxtexture = 1;
@@ -997,19 +990,22 @@ void Game::Loadlevel(const std::string& name)
}
if (mapvers >= 7) {
+ int numhotspots;
funpackf(tfile, "Bi", &numhotspots);
- for (int i = 0; i < numhotspots; i++) {
- funpackf(tfile, "Bi Bf Bf Bf Bf", &hotspottype[i], &hotspotsize[i], &hotspot[i].x, &hotspot[i].y, &hotspot[i].z);
+ Hotspot::hotspots.resize(numhotspots);
+ for (int i = 0; i < Hotspot::hotspots.size(); i++) {
+ funpackf(tfile, "Bi Bf Bf Bf Bf", &Hotspot::hotspots[i].type, &Hotspot::hotspots[i].size, &Hotspot::hotspots[i].position.x, &Hotspot::hotspots[i].position.y, &Hotspot::hotspots[i].position.z);
funpackf(tfile, "Bi", &templength);
if (templength)
for (int l = 0; l < templength; l++)
- funpackf(tfile, "Bb", &hotspottext[i][l]);
- hotspottext[i][templength] = '\0';
- if (hotspottype[i] == -111)
+ funpackf(tfile, "Bb", &Hotspot::hotspots[i].text[l]);
+ Hotspot::hotspots[i].text[templength] = '\0';
+ if (Hotspot::hotspots[i].type == -111)
indemo = 1;
}
- } else
- numhotspots = 0;
+ } else {
+ Hotspot::hotspots.clear();
+ }
if (visibleloading)
LoadingScreen();
@@ -1159,7 +1155,7 @@ void Game::Loadlevel(const std::string& name)
Person::players[i]->proportionlegs.z = 0;
}
- Person::players[i]->tempanimation = Animation("Tempanim", 0, 0);
+ Person::players[i]->tempanimation = Animation("Tempanim", lowheight, neutral);
if (i == 0) {
Person::players[i]->headmorphness = 0;
@@ -1309,7 +1305,7 @@ void doTutorial()
emit_sound_at(fireendsound, Person::players[1]->coords);
- for (int i = 0; i < Person::players[1]->skeleton.num_joints; i++) {
+ for (int i = 0; i < Person::players[1]->skeleton.joints.size(); i++) {
if (Random() % 2 == 0) {
if (!Person::players[1]->skeleton.free)
temp2 = (Person::players[1]->coords - Person::players[1]->oldcoords) / multiplier / 2; //velocity/2;
@@ -1579,7 +1575,7 @@ void doTutorial()
XYZ temp, temp2;
emit_sound_at(fireendsound, Person::players[1]->coords);
- for (int i = 0; i < Person::players[1]->skeleton.num_joints; i++) {
+ for (int i = 0; i < Person::players[1]->skeleton.joints.size(); i++) {
if (Random() % 2 == 0) {
if (!Person::players[1]->skeleton.free)
temp2 = (Person::players[1]->coords - Person::players[1]->oldcoords) / multiplier / 2; //velocity/2;
@@ -1945,7 +1941,7 @@ void doDebugKeys()
XYZ headspurtdirection;
//int i = Person::players[closest]->skeleton.jointlabels[head];
Joint& headjoint = Person::players[closest]->joint(head);
- for (int k = 0; k < Person::players[closest]->skeleton.num_joints; k++) {
+ for (int k = 0; k < Person::players[closest]->skeleton.joints.size(); k++) {
if (!Person::players[closest]->skeleton.free)
flatvelocity2 = Person::players[closest]->velocity;
if (Person::players[closest]->skeleton.free)
@@ -1988,7 +1984,7 @@ void doDebugKeys()
emit_sound_at(splattersound, blah);
emit_sound_at(breaksound2, blah);
- for (int i = 0; i < Person::players[closest]->skeleton.num_joints; i++) {
+ for (int i = 0; i < Person::players[closest]->skeleton.joints.size(); i++) {
if (!Person::players[closest]->skeleton.free)
flatvelocity2 = Person::players[closest]->velocity;
if (Person::players[closest]->skeleton.free)
@@ -2005,7 +2001,7 @@ void doDebugKeys()
Sprite::MakeSprite(cloudsprite, flatfacing2, flatvelocity2 * 0, .6, 0, 0, 1, .5);
}
- for (int i = 0; i < Person::players[closest]->skeleton.num_joints; i++) {
+ for (int i = 0; i < Person::players[closest]->skeleton.joints.size(); i++) {
if (!Person::players[closest]->skeleton.free)
flatvelocity2 = Person::players[closest]->velocity;
if (Person::players[closest]->skeleton.free)
@@ -2021,7 +2017,7 @@ void doDebugKeys()
Sprite::MakeSprite(bloodsprite, flatfacing2, flatvelocity2, 1, 1, 1, .4, 1);
}
- for (int i = 0; i < Person::players[closest]->skeleton.num_joints; i++) {
+ for (int i = 0; i < Person::players[closest]->skeleton.joints.size(); i++) {
if (!Person::players[closest]->skeleton.free)
flatvelocity2 = Person::players[closest]->velocity;
if (Person::players[closest]->skeleton.free)
@@ -2037,7 +2033,7 @@ void doDebugKeys()
Sprite::MakeSprite(bloodsprite, flatfacing2, flatvelocity2 * 2, 1, 1, 1, .4, 1);
}
- for (int i = 0; i < Person::players[closest]->skeleton.num_joints; i++) {
+ for (int i = 0; i < Person::players[closest]->skeleton.joints.size(); i++) {
if (!Person::players[closest]->skeleton.free)
flatvelocity2 = Person::players[closest]->velocity;
if (Person::players[closest]->skeleton.free)
@@ -2062,7 +2058,7 @@ void doDebugKeys()
Person::players[j]->skeleton.free = 1;
Person::players[j]->skeleton.longdead = 0;
Person::players[j]->RagDoll(0);
- for (int i = 0; i < Person::players[j]->skeleton.num_joints; i++) {
+ for (int i = 0; i < Person::players[j]->skeleton.joints.size(); i++) {
temppos = Person::players[j]->skeleton.joints[i].position + Person::players[j]->coords;
if (distsq(&temppos, &Person::players[closest]->coords) < 25) {
flatvelocity2 = temppos - Person::players[closest]->coords;
@@ -2238,7 +2234,7 @@ void doDebugKeys()
Person::players.back()->proportionlegs.z = 0;
}
- Person::players.back()->tempanimation = Animation("Tempanim", 0, 0);
+ Person::players.back()->tempanimation = Animation("Tempanim", lowheight, neutral);
Person::players.back()->damagetolerance = 200;
@@ -2682,7 +2678,7 @@ void doAerialAcrobatics()
if (Person::players[k]->animTarget == jumpdownanim || Person::players[k]->isFlip()) {
//flipped into a rock
- if (Person::players[k]->isFlip() && Animation::animations[Person::players[k]->animTarget].label[Person::players[k]->frameTarget] == 7)
+ if (Person::players[k]->isFlip() && Person::players[k]->targetFrame().label == 7)
Person::players[k]->RagDoll(0);
if (Person::players[k]->animTarget == jumpupanim) {
@@ -2987,8 +2983,7 @@ void doAttacks()
Person::players[k]->animTarget != rabbitkickanim &&
Person::players[i]->animTarget != getupfrombackanim &&
(Person::players[i]->animTarget != staggerbackhighanim &&
- (Person::players[i]->animTarget != staggerbackhardanim ||
- Animation::animations[staggerbackhardanim].label[Person::players[i]->frameTarget] == 6)) &&
+ (Person::players[i]->animTarget != staggerbackhardanim || Person::players[i]->targetFrame().label == 6)) &&
Person::players[i]->animTarget != jumpdownanim &&
Person::players[i]->animTarget != jumpupanim &&
Person::players[i]->animTarget != getupfromfrontanim) {
@@ -3544,10 +3539,10 @@ void doPlayerCollisions()
}
Person::players[k]->DoDamage(findLengthfast(&rotatetarget) / 4);
- for (int j = 0; j < Person::players[i]->skeleton.num_joints; j++) {
+ for (int j = 0; j < Person::players[i]->skeleton.joints.size(); j++) {
Person::players[i]->skeleton.joints[j].velocity = Person::players[i]->skeleton.joints[j].velocity / 5 + Person::players[k]->velocity;
}
- for (int j = 0; j < Person::players[k]->skeleton.num_joints; j++) {
+ for (int j = 0; j < Person::players[k]->skeleton.joints.size(); j++) {
Person::players[k]->skeleton.joints[j].velocity = Person::players[k]->skeleton.joints[j].velocity / 5 + Person::players[i]->velocity;
}
@@ -5439,27 +5434,27 @@ void Game::Tick()
//hotspots
static float hotspotvisual[40];
- if (numhotspots) {
+ if (Hotspot::hotspots.size()) {
XYZ hotspotsprite;
if (editorenabled)
- for (int i = 0; i < numhotspots; i++)
+ for (int i = 0; i < Hotspot::hotspots.size(); i++)
hotspotvisual[i] -= multiplier / 320;
- for (int i = 0; i < numhotspots; i++) {
+ for (int i = 0; i < Hotspot::hotspots.size(); i++) {
while (hotspotvisual[i] < 0) {
hotspotsprite = 0;
- hotspotsprite.x = float(abs(Random() % 100000)) / 100000 * hotspotsize[i];
+ hotspotsprite.x = float(abs(Random() % 100000)) / 100000 * Hotspot::hotspots[i].size;
hotspotsprite = DoRotation(hotspotsprite, 0, 0, Random() % 360);
hotspotsprite = DoRotation(hotspotsprite, 0, Random() % 360, 0);
- hotspotsprite += hotspot[i];
+ hotspotsprite += Hotspot::hotspots[i].position;
Sprite::MakeSprite(breathsprite, hotspotsprite, hotspotsprite * 0, 1, 0.5, 0, 7, 0.4);
- hotspotvisual[i] += 0.1 / hotspotsize[i] / hotspotsize[i] / hotspotsize[i];
+ hotspotvisual[i] += 0.1 / Hotspot::hotspots[i].size / Hotspot::hotspots[i].size / Hotspot::hotspots[i].size;
}
}
- for (int i = 0; i < numhotspots; i++) {
- if (hotspottype[i] <= 10 && hotspottype[i] > 0) {
- hotspot[i] = Person::players[hotspottype[i]]->coords;
+ for (int i = 0; i < Hotspot::hotspots.size(); i++) {
+ if (Hotspot::hotspots[i].type <= 10 && Hotspot::hotspots[i].type > 0) {
+ Hotspot::hotspots[i].position = Person::players[Hotspot::hotspots[i].type]->coords;
}
}
}
@@ -5668,11 +5663,7 @@ void Game::Tick()
if (Dialog::currentScene().sound != 0) {
playdialoguescenesound();
if (Dialog::currentScene().sound == -5) {
- hotspot[numhotspots] = Person::players[0]->coords;
- hotspotsize[numhotspots] = 10;
- hotspottype[numhotspots] = -1;
-
- numhotspots++;
+ Hotspot::hotspots.emplace_back(Person::players[0]->coords, -1, 10);
}
if (Dialog::currentScene().sound == -6) {
hostile = 1;
@@ -6068,7 +6059,7 @@ void Game::Tick()
Person::players[i]->victim->skeleton.free = 1;
Person::players[i]->victim->skeleton.broken = 0;
- for (int l = 0; l < Person::players[i]->victim->skeleton.num_joints; l++) {
+ for (int l = 0; l < Person::players[i]->victim->skeleton.joints.size(); l++) {
Person::players[i]->victim->skeleton.joints[l].velchange = 0;
Person::players[i]->victim->skeleton.joints[l].locked = 0;
}
@@ -6695,7 +6686,7 @@ void Game::Tick()
if (distsq(&temp, &Person::players[1]->coords) >= distsq(&temp, &temp2) - 1 || distsq(&temp3, &Person::players[1]->coords) < 4) {
emit_sound_at(fireendsound, Person::players[1]->coords);
- for (int i = 0; i < Person::players[1]->skeleton.num_joints; i++) {
+ for (int i = 0; i < Person::players[1]->skeleton.joints.size(); i++) {
if (Random() % 2 == 0) {
if (!Person::players[1]->skeleton.free)
temp2 = (Person::players[1]->coords - Person::players[1]->oldcoords) / multiplier / 2; //velocity/2;
@@ -6710,7 +6701,7 @@ void Game::Tick()
}
Person::players[1]->coords = (oldtemp + oldtemp2) / 2;
- for (int i = 0; i < Person::players[1]->skeleton.num_joints; i++) {
+ for (int i = 0; i < Person::players[1]->skeleton.joints.size(); i++) {
Person::players[1]->skeleton.joints[i].velocity = 0;
if (Random() % 2 == 0) {
if (!Person::players[1]->skeleton.free)
@@ -6912,23 +6903,23 @@ void Game::TickOnceAfter()
}
}
- killhotspot = 2;
- for (int i = 0; i < numhotspots; i++) {
- if (hotspottype[i] > 10 && hotspottype[i] < 20) {
- if (Person::players[hotspottype[i] - 10]->dead == 0)
- killhotspot = 0;
- else if (killhotspot == 2)
- killhotspot = 1;
+ Hotspot::killhotspot = 2;
+ for (int i = 0; i < Hotspot::hotspots.size(); i++) {
+ if (Hotspot::hotspots[i].type > 10 && Hotspot::hotspots[i].type < 20) {
+ if (Person::players[Hotspot::hotspots[i].type - 10]->dead == 0)
+ Hotspot::killhotspot = 0;
+ else if (Hotspot::killhotspot == 2)
+ Hotspot::killhotspot = 1;
}
}
- if (killhotspot == 2)
- killhotspot = 0;
+ if (Hotspot::killhotspot == 2)
+ Hotspot::killhotspot = 0;
winhotspot = false;
- for (int i = 0; i < numhotspots; i++)
- if (hotspottype[i] == -1)
- if (distsq(&Person::players[0]->coords, &hotspot[i]) < hotspotsize[i])
+ for (int i = 0; i < Hotspot::hotspots.size(); i++)
+ if (Hotspot::hotspots[i].type == -1)
+ if (distsq(&Person::players[0]->coords, &Hotspot::hotspots[i].position) < Hotspot::hotspots[i].size)
winhotspot = true;
int numalarmed = 0;
@@ -6966,7 +6957,7 @@ void Game::TickOnceAfter()
}
- if (killhotspot) {
+ if (Hotspot::killhotspot) {
changedelay = 1;
targetlevel = whichlevel + 1;
if (targetlevel > numchallengelevels - 1)
@@ -6992,7 +6983,7 @@ void Game::TickOnceAfter()
changedelay = .1;
alldead = false;
winhotspot = false;
- killhotspot = 0;
+ Hotspot::killhotspot = 0;
}
if (!editorenabled && gameon && !mainmenu) {
@@ -7034,13 +7025,13 @@ void Game::TickOnceAfter()
(Person::players[0]->dead ||
(alldead && maptype == mapkilleveryone) ||
(winhotspot) ||
- (killhotspot)))
+ (Hotspot::killhotspot)))
loading = 1;
if ((Person::players[0]->dead ||
(alldead && maptype == mapkilleveryone) ||
(winhotspot) ||
(windialogue) ||
- (killhotspot)) &&
+ (Hotspot::killhotspot)) &&
changedelay <= 0) {
if (whichlevel != -2 && !loading && !Person::players[0]->dead) {
winfreeze = true;
@@ -7113,7 +7104,7 @@ void Game::TickOnceAfter()
target = Person::players[0]->oldcoords + Person::players[0]->currentoffset * (1 - Person::players[0]->target) * Person::players[0]->scale + Person::players[0]->targetoffset * Person::players[0]->target * Person::players[0]->scale - Person::players[0]->facing * .05;
target.y += .1;
if (Person::players[0]->skeleton.free) {
- for (int i = 0; i < Person::players[0]->skeleton.num_joints; i++) {
+ for (int i = 0; i < Person::players[0]->skeleton.joints.size(); i++) {
if (Person::players[0]->skeleton.joints[i].position.y * Person::players[0]->scale + Person::players[0]->coords.y > target.y)
target.y = Person::players[0]->skeleton.joints[i].position.y * Person::players[0]->scale + Person::players[0]->coords.y;
}