aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClyne Sullivan <tullivan99@gmail.com>2016-06-28 21:32:04 -0400
committerClyne Sullivan <tullivan99@gmail.com>2016-06-28 21:32:04 -0400
commita466eb8fd6e5707aaa1bfafa28535b82c67d69d8 (patch)
treece3a09b7b98584b3d42351eae7fd7e183e38b7f8
parent00f633afb62ed6914205639b44dcdaf839a2c2f7 (diff)
chests?, custom controls
-rw-r--r--Makefile2
-rw-r--r--assets/chest.pngbin0 -> 420 bytes
-rw-r--r--assets/style/classic/bg/bgFarMountain.pngbin74188 -> 151687 bytes
-rw-r--r--assets/style/classic/house1.pngbin2033 -> 1434 bytes
-rw-r--r--brice.dat8
-rw-r--r--include/entities.hpp4
-rw-r--r--include/mob.hpp11
-rw-r--r--include/ui.hpp2
-rw-r--r--include/ui_menu.hpp11
-rw-r--r--include/world.hpp2
-rw-r--r--src/entities.cpp3
-rw-r--r--src/mob.cpp42
-rw-r--r--src/ui.cpp101
-rw-r--r--src/ui_menu.cpp50
-rw-r--r--src/world.cpp99
-rw-r--r--xcf/chest.xcfbin0 -> 1267 bytes
-rw-r--r--xcf/goodmtns.xcfbin362046 -> 1637937 bytes
-rw-r--r--xcf/house1.xcfbin8452 -> 7814 bytes
-rw-r--r--xml/playerSpawnHill1.xml6
-rw-r--r--xml/playerSpawnHill1_Building1.xml6
-rw-r--r--xml/town.xml9
21 files changed, 227 insertions, 129 deletions
diff --git a/Makefile b/Makefile
index 31899a5..7743e68 100644
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,7 @@ endif
CXXFLAGS = -g -m$(TARGET_BITS) -std=c++14 -fext-numeric-literals
CXXINC = -Iinclude -Iinclude/freetype
-CXXWARN = -Wall -Wextra -Werror #-pedantic-errors
+CXXWARN = -Wall -Wextra -Werror
CXXSRCDIR = src
CXXOUTDIR = out
diff --git a/assets/chest.png b/assets/chest.png
new file mode 100644
index 0000000..11fdedb
--- /dev/null
+++ b/assets/chest.png
Binary files differ
diff --git a/assets/style/classic/bg/bgFarMountain.png b/assets/style/classic/bg/bgFarMountain.png
index 382f8d6..2ec7dae 100644
--- a/assets/style/classic/bg/bgFarMountain.png
+++ b/assets/style/classic/bg/bgFarMountain.png
Binary files differ
diff --git a/assets/style/classic/house1.png b/assets/style/classic/house1.png
index 73cbf74..025b169 100644
--- a/assets/style/classic/house1.png
+++ b/assets/style/classic/house1.png
Binary files differ
diff --git a/brice.dat b/brice.dat
index 4dad711..2033bae 100644
--- a/brice.dat
+++ b/brice.dat
@@ -1,7 +1,7 @@
3
-Slow
-0
-canJump
-0
canSprint
1
+canJump
+0
+Slow
+0
diff --git a/include/entities.hpp b/include/entities.hpp
index 76b6fa8..4abb3cb 100644
--- a/include/entities.hpp
+++ b/include/entities.hpp
@@ -107,6 +107,7 @@ extern const unsigned int NPC_INV_SIZE;
// a prototype of the world class, necessary for some function prototypes
class World;
+class IndoorWorld;
/**
* The light structure, used to store light coordinates and color.
@@ -325,7 +326,8 @@ public:
class Structures : public Entity {
public:
BUILD_SUB bsubtype;
- World *inWorld, *insideWorld;
+ World *inWorld;
+ IndoorWorld *insideWorld;
std::string inside;
std::string textureLoc;
diff --git a/include/mob.hpp b/include/mob.hpp
index 7ef4ff9..24b8ed9 100644
--- a/include/mob.hpp
+++ b/include/mob.hpp
@@ -126,4 +126,15 @@ public:
void saveToXML(void) final;
};
+class Chest : public Mob {
+public:
+ Chest(void);
+
+ void act(void);
+ void onHit(unsigned int);
+ bool bindTex(void);
+ void createFromXML(XMLElement *e, World *w) final;
+ void saveToXML(void) final;
+};
+
#endif // MOB_H_
diff --git a/include/ui.hpp b/include/ui.hpp
index 507a211..25fbd3c 100644
--- a/include/ui.hpp
+++ b/include/ui.hpp
@@ -40,6 +40,8 @@
** The UI namespace
** --------------------------------------------------------------------------*/
+void setControl(unsigned int index, SDL_Keycode key);
+
namespace ui {
// the pixel-coordinates of the mouse
diff --git a/include/ui_menu.hpp b/include/ui_menu.hpp
index f7b665e..3ed9fa5 100644
--- a/include/ui_menu.hpp
+++ b/include/ui_menu.hpp
@@ -7,9 +7,12 @@
typedef void (*menuFunc)(void);
+class Menu;
+
class menuItem {
public:
int member;
+ Menu *child;
union {
struct {
vec2 loc;
@@ -46,25 +49,21 @@ public:
class Menu {
public:
std::vector<menuItem> items;
- Menu *parent, *child;
+ Menu *parent;
~Menu()
{
items.clear();
- //delete child;
- //delete parent;
- child = NULL;
parent = NULL;
}
- void gotoChild(void);
void gotoParent(void);
};
namespace ui {
namespace menu {
menuItem createButton(vec2 l, dim2 d, Color c, const char* t, menuFunc f);
- menuItem createChildButton(vec2 l, dim2 d, Color c, const char* t);
+ menuItem createChildButton(vec2 l, dim2 d, Color c, const char* ti, Menu *_child);
menuItem createParentButton(vec2 l, dim2 d, Color c, const char* t);
menuItem createSlider(vec2 l, dim2 d, Color c, float min, float max, const char* t, float* v);
diff --git a/include/world.hpp b/include/world.hpp
index 6a97daa..a2de048 100644
--- a/include/world.hpp
+++ b/include/world.hpp
@@ -495,6 +495,8 @@ private:
public:
+ World *outside;
+
// creates an IndoorWorld object
IndoorWorld(void);
diff --git a/src/entities.cpp b/src/entities.cpp
index e156ee2..0c312e2 100644
--- a/src/entities.cpp
+++ b/src/entities.cpp
@@ -336,7 +336,8 @@ void Structures::createFromXML(XMLElement *e, World *w)
// edge
if (!inside.empty()) {
- insideWorld = loadWorldFromXMLNoTakeover(inside);
+ insideWorld = dynamic_cast<IndoorWorld *>(loadWorldFromXMLNoTakeover(inside));
+ insideWorld->outside = inWorld;
}
textureLoc = e->StrAttribute("texture");
diff --git a/src/mob.cpp b/src/mob.cpp
index eba970e..20273d6 100644
--- a/src/mob.cpp
+++ b/src/mob.cpp
@@ -424,6 +424,48 @@ void Trigger::createFromXML(XMLElement *e, World *w=nullptr)
void Trigger::saveToXML(void)
{}
+Chest::Chest(void) : Mob()
+{
+ ridable = false;
+ aggressive = false;
+ maxHealth = health = 100;
+ width = HLINES(10);
+ height = HLINES(5);
+ tex = TextureIterator({"assets/chest.png"});
+}
+
+void Chest::act(void)
+{
+ //die();
+}
+
+void Chest::onHit(unsigned int _health)
+{
+ (void)_health;
+ die();
+}
+
+bool Chest::bindTex(void)
+{
+ glActiveTexture(GL_TEXTURE0);
+ tex(0);
+ return true;
+}
+
+void Chest::createFromXML(XMLElement *e, World *w)
+{
+ (void)w;
+ loc = vec2 { 0, 100 };
+ xmle = e;
+}
+
+void Chest::saveToXML(void)
+{
+ xmle->SetAttribute("alive", alive);
+}
+
+
+
Mob::~Mob()
{
delete inv;
diff --git a/src/ui.cpp b/src/ui.cpp
index 037ba89..d7f6e19 100644
--- a/src/ui.cpp
+++ b/src/ui.cpp
@@ -28,6 +28,16 @@ extern std::vector<NPC *> aipreload;
*/
extern bool gameRunning;
+
+static SDL_Keycode controlMap[] = {
+ SDLK_w, SDLK_s, SDLK_a, SDLK_d
+};
+
+void setControl(unsigned int index, SDL_Keycode key)
+{
+ controlMap[index] = key;
+}
+
/**
* Freetype variables
*/
@@ -1402,46 +1412,7 @@ EXIT:
// only let other keys be handled if dialog allows it
} else if (!dialogBoxExists || dialogPassive) {
- switch(SDL_KEY) {
- case SDLK_DELETE:
- gameRunning = false;
- break;
- case SDLK_t:
- game::time::tick(50);
- break;
- case SDLK_a:
- if (fadeEnable)
- break;
- player->vel.x = -PLAYER_SPEED_CONSTANT;
- if (std::stoi(game::getValue("Slow")) == 1)
- player->vel.x /= 2.0f;
- player->left = left = true;
- player->right = right = false;
- if (currentWorldToLeft) {
- std::thread([&](void){
- auto thing = currentWorld->goWorldLeft(player);
- if (thing.first != currentWorld)
- worldSwitch(thing);
- }).detach();
- }
- break;
- case SDLK_d:
- if (fadeEnable)
- break;
- player->vel.x = PLAYER_SPEED_CONSTANT;
- if (std::stoi(game::getValue("Slow")) == 1)
- player->vel.x /= 2.0f;
- player->right = right = true;
- player->left = left = false;
- if (currentWorldToRight) {
- std::thread([&](void){
- auto thing = currentWorld->goWorldRight(player);
- if (thing.first != currentWorld)
- worldSwitch(thing);
- }).detach();
- }
- break;
- case SDLK_w:
+ if (SDL_KEY == controlMap[0]) {
if (inBattle) {
std::thread([&](void){
auto thing = dynamic_cast<Arena *>(currentWorld)->exitArena(player);
@@ -1455,6 +1426,43 @@ EXIT:
worldSwitch(thing);
}).detach();
}
+ } else if (SDL_KEY == controlMap[1]) {
+ } else if (SDL_KEY == controlMap[2]) {
+ if (!fadeEnable) {
+ player->vel.x = -PLAYER_SPEED_CONSTANT;
+ if (std::stoi(game::getValue("Slow")) == 1)
+ player->vel.x /= 2.0f;
+ player->left = left = true;
+ player->right = right = false;
+ if (currentWorldToLeft) {
+ std::thread([&](void){
+ auto thing = currentWorld->goWorldLeft(player);
+ if (thing.first != currentWorld)
+ worldSwitch(thing);
+ }).detach();
+ }
+ }
+ } else if (SDL_KEY == controlMap[3]) {
+ if (!fadeEnable) {
+ player->vel.x = PLAYER_SPEED_CONSTANT;
+ if (std::stoi(game::getValue("Slow")) == 1)
+ player->vel.x /= 2.0f;
+ player->right = right = true;
+ player->left = left = false;
+ if (currentWorldToRight) {
+ std::thread([&](void){
+ auto thing = currentWorld->goWorldRight(player);
+ if (thing.first != currentWorld)
+ worldSwitch(thing);
+ }).detach();
+ }
+ }
+ } else switch(SDL_KEY) {
+ case SDLK_DELETE:
+ gameRunning = false;
+ break;
+ case SDLK_t:
+ game::time::tick(50);
break;
case SDLK_LSHIFT:
if (game::canSprint) {
@@ -1501,8 +1509,11 @@ EXIT:
ui::menu::toggle();
player->save();
return;
- }
- switch (SDL_KEY) {
+ } else if (SDL_KEY == controlMap[2]) {
+ left = false;
+ } else if (SDL_KEY == controlMap[3]) {
+ right = false;
+ } else switch (SDL_KEY) {
case SDLK_F3:
debug ^= true;
break;
@@ -1526,12 +1537,6 @@ EXIT:
player->ground = false;
}
break;
- case SDLK_a:
- left = false;
- break;
- case SDLK_d:
- right = false;
- break;
case SDLK_LSHIFT:
if (player->speed == 4)
Mix_FadeOutChannel(1,2000);
diff --git a/src/ui_menu.cpp b/src/ui_menu.cpp
index 5faf8a2..581e7fc 100644
--- a/src/ui_menu.cpp
+++ b/src/ui_menu.cpp
@@ -6,6 +6,7 @@ extern Menu *currentMenu;
static Menu pauseMenu;
static Menu optionsMenu;
+static Menu controlsMenu;
void Menu::gotoParent(void)
{
@@ -17,13 +18,27 @@ void Menu::gotoParent(void)
}
}
-void Menu::gotoChild(void)
+inline void segFault() {
+ (*((int *)NULL))++;
+}
+
+void setControlF(unsigned int index)
{
- currentMenu = child;
+ SDL_Event e;
+ do SDL_WaitEvent(&e);
+ while (e.type != SDL_KEYDOWN);
+ setControl(index, e.key.keysym.sym);
}
-inline void segFault() {
- (*((int *)NULL))++;
+void setLeftKey(void) {
+ SDL_Event e;
+
+ std::cout << "Waiting...\n";
+ do SDL_WaitEvent(&e);
+ while (e.type != SDL_KEYDOWN);
+ std::cout << "Good.\n";
+
+ setControl(2, e.key.keysym.sym);
}
namespace ui {
@@ -37,11 +52,12 @@ namespace ui {
temp.button.color = c;
temp.button.text = t;
temp.button.func = f;
+ temp.child = nullptr;
return temp;
}
- menuItem createChildButton(vec2 l, dim2 d, Color c, const char* t) {
+ menuItem createChildButton(vec2 l, dim2 d, Color c, const char* t, Menu *_child) {
menuItem temp;
temp.member = -1;
@@ -50,6 +66,7 @@ namespace ui {
temp.button.color = c;
temp.button.text = t;
temp.button.func = NULL;
+ temp.child = _child;
return temp;
}
@@ -63,6 +80,7 @@ namespace ui {
temp.button.color = c;
temp.button.text = t;
temp.button.func = NULL;
+ temp.child = nullptr;
return temp;
}
@@ -79,21 +97,29 @@ namespace ui {
temp.slider.text = t;
temp.slider.var = v;
temp.slider.sliderLoc = *v;
+ temp.child = nullptr;
return temp;
}
void init(void) {
- pauseMenu.items.push_back(ui::menu::createParentButton({-256/2,0},{256,75},{0.0f,0.0f,0.0f}, "Resume"));
- pauseMenu.items.push_back(ui::menu::createChildButton({-256/2,-100},{256,75},{0.0f,0.0f,0.0f}, "Options"));
- pauseMenu.items.push_back(ui::menu::createButton({-256/2,-200},{256,75},{0.0f,0.0f,0.0f}, "Save and Quit", ui::quitGame));
- pauseMenu.items.push_back(ui::menu::createButton({-256/2,-300},{256,75},{0.0f,0.0f,0.0f}, "Segfault", segFault));
- pauseMenu.child = &optionsMenu;
-
+ // Create the main pause menu
+ pauseMenu.items.push_back(ui::menu::createParentButton({-128,0},{256,75},{0.0f,0.0f,0.0f}, "Resume"));
+ pauseMenu.items.push_back(ui::menu::createChildButton({-128,-100},{256,75},{0.0f,0.0f,0.0f}, "Options", &optionsMenu));
+ pauseMenu.items.push_back(ui::menu::createChildButton({-128,-200},{256,75},{0.0f,0.0f,0.0f}, "Controls", &controlsMenu));
+ pauseMenu.items.push_back(ui::menu::createButton({-128,-300},{256,75},{0.0f,0.0f,0.0f}, "Save and Quit", ui::quitGame));
+ pauseMenu.items.push_back(ui::menu::createButton({-128,-400},{256,75},{0.0f,0.0f,0.0f}, "Segfault", segFault));
+
+ // Create the options (sound) menu
optionsMenu.items.push_back(ui::menu::createSlider({0-static_cast<float>(game::SCREEN_WIDTH)/4,0-(512/2)}, {50,512}, {0.0f, 0.0f, 0.0f}, 0, 100, "Master", &game::config::VOLUME_MASTER));
optionsMenu.items.push_back(ui::menu::createSlider({-200,100}, {512,50}, {0.0f, 0.0f, 0.0f}, 0, 100, "Music", &game::config::VOLUME_MUSIC));
optionsMenu.items.push_back(ui::menu::createSlider({-200,000}, {512,50}, {0.0f, 0.0f, 0.0f}, 0, 100, "SFX", &game::config::VOLUME_SFX));
optionsMenu.parent = &pauseMenu;
+
+ // Create the controls menu
+ controlsMenu.items.push_back(ui::menu::createButton({-300,200}, {-200, 100}, {0.0f, 0.0f, 0.0f}, "Left", [](){ setControlF(2);}));
+ controlsMenu.items.push_back(ui::menu::createButton({-300,50}, {-200, 100}, {0.0f, 0.0f, 0.0f}, "Right", [](){ setControlF(3);}));
+ controlsMenu.parent = &pauseMenu;
}
void toggle(void) {
@@ -208,7 +234,7 @@ namespace ui {
m.button.func();
break;
case -1:
- currentMenu->gotoChild();
+ currentMenu = m.child;
break;
case -2:
currentMenu->gotoParent();
diff --git a/src/world.cpp b/src/world.cpp
index 8969fb9..7294fda 100644
--- a/src/world.cpp
+++ b/src/world.cpp
@@ -1314,7 +1314,7 @@ WorldSwitchInfo World::goInsideStructure(Player *p)
// +size cuts folder prefix
inside.push_back(&currentXML[xmlFolder.size()]);
- tmp = loadWorldFromXML((*d)->inside);
+ tmp = (*d)->insideWorld;
return std::make_pair(tmp, vec2 {0, 100});
}
@@ -1322,7 +1322,7 @@ WorldSwitchInfo World::goInsideStructure(Player *p)
// exit the building
else {
std::string current = &currentXML[xmlFolder.size()];
- tmp = loadWorldFromXML(inside.back());
+ tmp = dynamic_cast<IndoorWorld *>(currentWorld)->outside; //loadWorldFromXML(inside.back());
inside.clear();
Structures *b = nullptr;
@@ -1646,56 +1646,59 @@ draw(Player *p)
// TODO make floor texture
static GLuint floorTex = Texture::genColor(Color(150, 100, 50));
-
- glUseProgram(worldShader);
glBindTexture(GL_TEXTURE_2D, floorTex);
- std::vector<GLfloat>f;
+ std::vector<GLfloat> fc;
+ std::vector<GLfloat> ft;
for (fl = 0; fl < floor.size(); fl++) {
i = 0;
for (const auto &h : floor[fl]) {
- x = worldStart + fstart[fl] * HLINE + HLINES(i);
-
- f.emplace_back(x);
- f.emplace_back(h);
- f.emplace_back(-3);
- f.emplace_back(0);
- f.emplace_back(0);
-
- f.emplace_back(x + HLINE);
- f.emplace_back(h);
- f.emplace_back(-3);
- f.emplace_back(1);
- f.emplace_back(0);
-
- f.emplace_back(x + HLINE);
- f.emplace_back(h - INDOOR_FLOOR_THICKNESS);
- f.emplace_back(-3);
- f.emplace_back(1);
- f.emplace_back(1);
-
- f.emplace_back(x + HLINE);
- f.emplace_back(h - INDOOR_FLOOR_THICKNESS);
- f.emplace_back(-3);
- f.emplace_back(1);
- f.emplace_back(1);
-
- f.emplace_back(-3);
- f.emplace_back(0);
- f.emplace_back(1);
-
- f.emplace_back(x);
- f.emplace_back(h);
- f.emplace_back(-3);
- f.emplace_back(0);
- f.emplace_back(0);
+ x = worldStart + HLINES(fstart[fl] + i);
+
+ fc.emplace_back(x);
+ fc.emplace_back(h);
+ fc.emplace_back(-3);
+ ft.emplace_back(0);
+ ft.emplace_back(0);
+
+ fc.emplace_back(x + HLINE);
+ fc.emplace_back(h);
+ fc.emplace_back(-3);
+ ft.emplace_back(1);
+ ft.emplace_back(0);
+
+ fc.emplace_back(x + HLINE);
+ fc.emplace_back(h - INDOOR_FLOOR_THICKNESS);
+ fc.emplace_back(-3);
+ ft.emplace_back(1);
+ ft.emplace_back(1);
+
+ fc.emplace_back(x + HLINE);
+ fc.emplace_back(h - INDOOR_FLOOR_THICKNESS);
+ fc.emplace_back(-3);
+ ft.emplace_back(1);
+ ft.emplace_back(1);
+
+ fc.emplace_back(x);
+ fc.emplace_back(h - INDOOR_FLOOR_THICKNESS);
+ fc.emplace_back(-3);
+ ft.emplace_back(0);
+ ft.emplace_back(1);
+
+ fc.emplace_back(x);
+ fc.emplace_back(h);
+ fc.emplace_back(-3);
+ ft.emplace_back(0);
+ ft.emplace_back(0);
i++;
}
}
- makeWorldDrawingSimplerEvenThoughAndyDoesntThinkWeCanMakeItIntoFunctions_JustDrawThis(5 * sizeof(GLfloat), &f[0], &f[3], floor.size() * 6);
+ glUseProgram(worldShader);
+
+ makeWorldDrawingSimplerEvenThoughAndyDoesntThinkWeCanMakeItIntoFunctions_JustDrawThis(0, &fc[0], &ft[0], floor.size() * 6);
glUseProgram(0);
@@ -1889,12 +1892,15 @@ loadWorldFromXMLNoSave(std::string path) {
}
// tells what world is outside, if in a structure
- else if (Indoor && (ptr = wxml->Attribute("outside")))
- inside.push_back(ptr);
+ else if (Indoor && (ptr = wxml->Attribute("outside"))) {
+// if (!loadedLeft && !loadedRight)
+// inside.push_back(ptr);
+ }
// error, invalid link tag
- else
+ else {
UserError("XML Error: Invalid <link> tag in " + _currentXML + "!");
+ }
}
@@ -1949,7 +1955,9 @@ loadWorldFromXMLNoSave(std::string path) {
newEntity = new Page();
} else if (name == "cat") {
newEntity = new Cat();
- }
+ } else if (name == "chest") {
+ newEntity = new Chest();
+ }
// npc creation
else if (name == "npc") {
@@ -2001,7 +2009,6 @@ loadWorldFromXMLNoSave(std::string path) {
newEntity->createFromXML(wxml, tmp);
std::swap(currentXML, _currentXML);
std::swap(currentXMLRaw, _currentXMLRaw);
- std::cout << currentXML << '\n';
//}
}
diff --git a/xcf/chest.xcf b/xcf/chest.xcf
new file mode 100644
index 0000000..3a50751
--- /dev/null
+++ b/xcf/chest.xcf
Binary files differ
diff --git a/xcf/goodmtns.xcf b/xcf/goodmtns.xcf
index c6492d5..b350b23 100644
--- a/xcf/goodmtns.xcf
+++ b/xcf/goodmtns.xcf
Binary files differ
diff --git a/xcf/house1.xcf b/xcf/house1.xcf
index 4c40d29..3b462f8 100644
--- a/xcf/house1.xcf
+++ b/xcf/house1.xcf
Binary files differ
diff --git a/xml/playerSpawnHill1.xml b/xml/playerSpawnHill1.xml
index 0566efb..92e4c87 100644
--- a/xml/playerSpawnHill1.xml
+++ b/xml/playerSpawnHill1.xml
@@ -16,11 +16,11 @@
<Dialog name="Guy">
<text id="0" nextid="1">
Hello there! My name is Ralph.
- <gotox>300</gotox>
+ <gotox>300</gotox>
</text>
<text id="1">
...
- <gotox>1000</gotox>
+ <gotox>1000</gotox>
<set id="Slow" value="0"/>
<set id="canSprint" value="1"/>
</text>
@@ -33,5 +33,5 @@
<text id="0" stop="true">
Hey friend! It's dangerous out there, here take these!
Wait, promise you'll stop by my stand in the local market!
- <give id="Wood Sword" count="1"/> <give id="Hunters Bow" count="1"/> <give id="Crude Arrow" count="110"/> <give id="Fried Chicken" count="1"/> <give id="Mossy Torch" count="1"/></text>
+ <give id="Wood Sword" count="1"/> <give id="Hunters Bow" count="1"/> <give id="Crude Arrow" count="110"/> <give id="Fried Chicken" count="1"/> <give id="Mossy Torch" count="1"/></text>
</Dialog>
diff --git a/xml/playerSpawnHill1_Building1.xml b/xml/playerSpawnHill1_Building1.xml
index 78dbb54..74eec76 100644
--- a/xml/playerSpawnHill1_Building1.xml
+++ b/xml/playerSpawnHill1_Building1.xml
@@ -10,17 +10,17 @@
<Dialog name="Bob">
<text id="0" nextid="1" pause="true">
Hey. Have a Dank MayMay :)
- <give id="Dank MayMay" count="1"/></text>
+ <give id="Dank MayMay" count="1"/></text>
<text id="1" nextid="2">
What? You want another Dank MayMay?
</text>
<text id="2" nextid="3" pause="true">
K.
- <give id="Dank MayMay" count="1"/></text>
+ <give id="Dank MayMay" count="1"/></text>
<text id="3" nextid="4">
Well... I'm out of Dank MayMays.
</text>
<text id="4">
Have a sword though.
- <give id="Wood Sword" count="1"/></text>
+ <give id="Wood Sword" count="1"/></text>
</Dialog>
diff --git a/xml/town.xml b/xml/town.xml
index f675037..4e535d9 100644
--- a/xml/town.xml
+++ b/xml/town.xml
@@ -4,10 +4,11 @@
<generation type="Random" width="1600"/>
<time>6000</time>
<spawnx>-300</spawnx>
- <npc name="Sanc" hasDialog="true" health="1" x="21.680096" y="63.399021" dindex="0"/>
- <npc name="Bob" hasDialog="true" spawnx="30" health="1" x="30" y="62.99902" dindex="0"/>
+ <npc name="Sanc" hasDialog="true" health="1" x="122.07431" y="66.698975" dindex="0"/>
+ <npc name="Bob" hasDialog="true" spawnx="30" health="1" x="637.40271" y="63.396015" dindex="0"/>
<structure type="1" spawnx="300" alive="1"/>
<structure inside="bobshouse.xml" type="1" spawnx="10" alive="1"/>
+ <chest alive="1"/>
</World>
<Dialog name="Bob">
@@ -17,10 +18,10 @@
</content>
</text>
<text id="1" pause="true" alive="1">
- <quest assign="Check out m&apos;swag, man!" health="1" x="-0.20029223" y="62.099083" dindex="0">
+ <quest assign="Check out m&apos;swag, man!" health="1" x="-197.83293" y="71.963989" dindex="0">
No description
</quest>
- <content health="1" x="176.35571" y="61.999001" dindex="0">
+ <content health="1" x="-206.1515" y="70.798996" dindex="0">
Looks like you've got yourself pretty empty handed... you know, I have a simple solution for that. Come on inside, I have somethin' to show you.
</content>
</text>