Patched bug #45 without resolving it

This commit is contained in:
Kayne Ruse
2015-04-28 06:00:21 +10:00
parent 878d502b8b
commit 5c404c572e
5 changed files with 30 additions and 16 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
## Outline ## Outline
Tortuga is a 2D multiplayer JRPG featuring permadeath, with an emphasis on multiplayer cooperation, exploration and customization. The game runs on customizable public and private servers. Tortuga is a 2D MMORPG featuring permadeath, with an emphasis on multiplayer cooperation, exploration and customization. The game runs on customizable public and private servers.
This game is inspired by classic 2D RPGs (Final Fantasy, The Legend of Zelda), as well as more modern sandboxes amd MMOs (Minecraft, EVE Online). This project is currently independently created and funded, with the goal of creating a game that will engage the players and inspire a large community. This game is inspired by classic 2D RPGs (Final Fantasy, The Legend of Zelda), as well as more modern sandboxes amd MMOs (Minecraft, EVE Online). This project is currently independently created and funded, with the goal of creating a game that will engage the players and inspire a large community.
+13 -5
View File
@@ -125,8 +125,16 @@ void World::Update() {
it.second.Update(); it.second.Update();
} }
//update the map try {
UpdateMap(); //update the map
UpdateMap();
}
catch(terminal_error& e) {
throw(e);
}
catch(std::exception& e) {
std::cerr << "UpdateMap Error: " << e.what() << std::endl;
}
//skip the rest without a local character //skip the rest without a local character
if (!localCharacter) { if (!localCharacter) {
@@ -164,9 +172,9 @@ void World::Render(SDL_Surface* const screen) {
tileSheet.DrawRegionTo(screen, &(*it), camera.x, camera.y); tileSheet.DrawRegionTo(screen, &(*it), camera.x, camera.y);
//debugging //debugging
std::ostringstream msg; // std::ostringstream msg;
msg << it->GetX() << ", " << it->GetY(); // msg << it->GetX() << ", " << it->GetY();
font.DrawStringTo(msg.str(), screen, it->GetX() * tileSheet.GetImage()->GetClipW() - camera.x, it->GetY() * tileSheet.GetImage()->GetClipH() - camera.y); // font.DrawStringTo(msg.str(), screen, it->GetX() * tileSheet.GetImage()->GetClipW() - camera.x, it->GetY() * tileSheet.GetImage()->GetClipH() - camera.y);
} }
//draw the entities //draw the entities
+14 -6
View File
@@ -23,7 +23,7 @@
#include "channels.hpp" #include "channels.hpp"
#include <iostream> #include <sstream>
//------------------------- //-------------------------
//static functions //static functions
@@ -58,12 +58,11 @@ void World::SendRegionRequest(int roomIndex, int x, int y) {
} }
void World::hRegionContent(RegionPacket* const argPacket) { void World::hRegionContent(RegionPacket* const argPacket) {
//debugging
std::cout << "hRegionContent(" << roomIndex << ", " << argPacket->x << ", " << argPacket->y << ")" << std::endl;
//checksum //checksum
if (regionChecksum(argPacket->region) == 0) { if (regionChecksum(argPacket->region) == 0) {
std::cout << "Received checksum failed: " << argPacket->x << ", " << argPacket->y << std::endl; std::ostringstream msg;
msg << "Received region checksum failed: " << argPacket->x << ", " << argPacket->y;
throw(std::runtime_error(msg.str()));
} }
//replace existing regions //replace existing regions
@@ -99,11 +98,20 @@ void World::UpdateMap() {
for (int j = yStart; j <= yEnd; j += REGION_HEIGHT) { for (int j = yStart; j <= yEnd; j += REGION_HEIGHT) {
Region* region = regionPager.FindRegion(i, j); Region* region = regionPager.FindRegion(i, j);
if (!region) { if (!region) {
//request absent region
SendRegionRequest(roomIndex, i, j); SendRegionRequest(roomIndex, i, j);
} }
else if (regionChecksum(region) == 0) { else if (regionChecksum(region) == 0) {
std::cout << "Existing checksum failed: " << roomIndex << ", " << i << ", " << j << std::endl; //checksum failed
//NOTE: this patches bug #45, but does not resolve it
regionPager.UnloadIf([region](Region const& ref) -> bool {
//remove the erroneous region
return region == &ref;
});
SendRegionRequest(roomIndex, i, j); SendRegionRequest(roomIndex, i, j);
std::ostringstream msg;
msg << "Existing region checksum failed: " << roomIndex << ", " << i << ", " << j;
throw(std::runtime_error(msg.str()));
} }
} }
} }
+1 -4
View File
@@ -70,11 +70,8 @@ Region* RegionPagerBase::FindRegion(int x, int y) {
} }
Region* RegionPagerBase::PushRegion(Region* const ptr) { Region* RegionPagerBase::PushRegion(Region* const ptr) {
//BUG: Lists seem to not work properly //BUG: #45 Some regions are occasionally losing their tile data
regionList.push_front(*ptr); regionList.push_front(*ptr);
// if (debugRegionSum(&regionList.front()) == 0) {
// throw(std::runtime_error("Checksum fail; RegionPagerBase::PushRegion()"));
// }
return &regionList.front(); return &regionList.front();
} }
+1
View File
@@ -26,6 +26,7 @@
#include <stack> #include <stack>
#include <stdexcept> #include <stdexcept>
//TODO: (9) character collisions should be preformed client-side
void RoomData::RunFrame() { void RoomData::RunFrame() {
//get the hook //get the hook
lua_rawgeti(lua, LUA_REGISTRYINDEX, tickRef); lua_rawgeti(lua, LUA_REGISTRYINDEX, tickRef);