mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-12-22 17:49:43 +01:00
Move all editor-specific attributes to a new editorclass
This is a pretty hefty commit! But essentially, I made a new editorclass object, and moved all functions and variables that only get used in the in-game level editor to that class. This cleanly demarcates which things are in the editor and which things are just general custom level stuff. Then I fixed up all the callers. I also fixed up some NO_CUSTOM_LEVELS and NO_EDITOR ifdefs, too, in several places.
This commit is contained in:
parent
987ae88909
commit
a23014350f
13 changed files with 1336 additions and 1268 deletions
File diff suppressed because it is too large
Load diff
|
@ -7,31 +7,6 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
// Text entry field type
|
|
||||||
enum textmode {
|
|
||||||
TEXT_NONE,
|
|
||||||
|
|
||||||
// In-editor text fields
|
|
||||||
TEXT_LOAD,
|
|
||||||
TEXT_SAVE,
|
|
||||||
TEXT_ROOMNAME,
|
|
||||||
TEXT_SCRIPT,
|
|
||||||
TEXT_ROOMTEXT,
|
|
||||||
TEXT_GOTOROOM,
|
|
||||||
LAST_EDTEXT = TEXT_GOTOROOM,
|
|
||||||
|
|
||||||
// Settings-mode text fields
|
|
||||||
TEXT_TITLE,
|
|
||||||
TEXT_DESC,
|
|
||||||
TEXT_WEBSITE,
|
|
||||||
TEXT_CREATOR,
|
|
||||||
NUM_TEXTMODES,
|
|
||||||
|
|
||||||
// Text modes with an entity
|
|
||||||
FIRST_ENTTEXT = TEXT_SCRIPT,
|
|
||||||
LAST_ENTTEXT = TEXT_ROOMTEXT
|
|
||||||
};
|
|
||||||
|
|
||||||
class edentities{
|
class edentities{
|
||||||
public:
|
public:
|
||||||
int x, y, t;
|
int x, y, t;
|
||||||
|
@ -104,20 +79,10 @@ class EditorData
|
||||||
std::string modifier;
|
std::string modifier;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GhostInfo {
|
class customlevelclass
|
||||||
int rx; // game.roomx-100
|
{
|
||||||
int ry; // game.roomy-100
|
public:
|
||||||
int x; // .xp
|
customlevelclass(void);
|
||||||
int y; // .yp
|
|
||||||
int col; // .colour
|
|
||||||
Uint32 realcol;
|
|
||||||
int frame; // .drawframe
|
|
||||||
};
|
|
||||||
|
|
||||||
class editorclass{
|
|
||||||
public:
|
|
||||||
editorclass(void);
|
|
||||||
|
|
||||||
std::string Desc1;
|
std::string Desc1;
|
||||||
std::string Desc2;
|
std::string Desc2;
|
||||||
std::string Desc3;
|
std::string Desc3;
|
||||||
|
@ -130,7 +95,6 @@ class editorclass{
|
||||||
bool getLevelMetaData(std::string& filename, LevelMetaData& _data );
|
bool getLevelMetaData(std::string& filename, LevelMetaData& _data );
|
||||||
|
|
||||||
void reset(void);
|
void reset(void);
|
||||||
void getlin(const enum textmode mode, const std::string& prompt, std::string* ptr);
|
|
||||||
const int* loadlevel(int rxi, int ryi);
|
const int* loadlevel(int rxi, int ryi);
|
||||||
|
|
||||||
int gettileidx(
|
int gettileidx(
|
||||||
|
@ -161,54 +125,20 @@ class editorclass{
|
||||||
ROOM_PROPERTIES
|
ROOM_PROPERTIES
|
||||||
#undef FOREACH_PROP
|
#undef FOREACH_PROP
|
||||||
|
|
||||||
void placetilelocal(int x, int y, int t);
|
|
||||||
|
|
||||||
int getenemyframe(int t);
|
|
||||||
int base(int x, int y);
|
|
||||||
|
|
||||||
int backbase(int x, int y);
|
|
||||||
|
|
||||||
int at(int x, int y);
|
|
||||||
|
|
||||||
int freewrap(int x, int y);
|
|
||||||
|
|
||||||
int backonlyfree(int x, int y);
|
|
||||||
|
|
||||||
int backfree(int x, int y);
|
|
||||||
|
|
||||||
int spikefree(int x, int y);
|
|
||||||
int free(int x, int y);
|
|
||||||
int absfree(int x, int y);
|
int absfree(int x, int y);
|
||||||
|
|
||||||
int match(int x, int y);
|
|
||||||
int outsidematch(int x, int y);
|
|
||||||
|
|
||||||
int backmatch(int x, int y);
|
|
||||||
|
|
||||||
void switch_tileset(const bool reversed);
|
|
||||||
void switch_tilecol(const bool reversed);
|
|
||||||
void clamp_tilecol(const int rx, const int ry, const bool wrap);
|
|
||||||
void switch_enemy(const bool reversed);
|
|
||||||
void switch_warpdir(const bool reversed);
|
|
||||||
|
|
||||||
bool load(std::string& _path);
|
bool load(std::string& _path);
|
||||||
|
#ifndef NO_EDITOR
|
||||||
bool save(std::string& _path);
|
bool save(std::string& _path);
|
||||||
|
#endif
|
||||||
void generatecustomminimap(void);
|
void generatecustomminimap(void);
|
||||||
int edgetile(int x, int y);
|
|
||||||
int outsideedgetile(int x, int y);
|
|
||||||
|
|
||||||
int backedgetile(int x, int y);
|
|
||||||
|
|
||||||
int labspikedir(int x, int y, int t);
|
|
||||||
int spikedir(int x, int y);
|
|
||||||
int findtrinket(int t);
|
int findtrinket(int t);
|
||||||
int findcrewmate(int t);
|
int findcrewmate(int t);
|
||||||
int findwarptoken(int t);
|
int findwarptoken(int t);
|
||||||
void findstartpoint(void);
|
void findstartpoint(void);
|
||||||
int getlevelcol(const int tileset, const int tilecol);
|
int getlevelcol(const int tileset, const int tilecol);
|
||||||
int getenemycol(int t);
|
int getenemycol(int t);
|
||||||
int entcol;
|
|
||||||
Uint32 entcolreal;
|
|
||||||
|
|
||||||
//Colouring stuff
|
//Colouring stuff
|
||||||
int getwarpbackground(int rx, int ry);
|
int getwarpbackground(int rx, int ry);
|
||||||
|
@ -220,93 +150,19 @@ class editorclass{
|
||||||
int numtrinkets(void);
|
int numtrinkets(void);
|
||||||
int numcrewmates(void);
|
int numcrewmates(void);
|
||||||
edlevelclass level[numrooms]; //Maxwidth*maxheight
|
edlevelclass level[numrooms]; //Maxwidth*maxheight
|
||||||
int kludgewarpdir[numrooms]; //Also maxwidth*maxheight
|
|
||||||
|
|
||||||
int notedelay;
|
|
||||||
int oldnotedelay;
|
|
||||||
std::string note;
|
|
||||||
std::string keybuffer;
|
|
||||||
std::string filename;
|
|
||||||
std::string loaded_filepath;
|
|
||||||
|
|
||||||
int drawmode;
|
|
||||||
int tilex, tiley;
|
|
||||||
int keydelay, lclickdelay;
|
|
||||||
bool savekey, loadkey;
|
|
||||||
int levx, levy;
|
|
||||||
int entframe, entframedelay;
|
|
||||||
|
|
||||||
int scripttexttype;
|
|
||||||
std::string oldenttext;
|
|
||||||
|
|
||||||
enum textmode textmod; // In text entry
|
|
||||||
std::string* textptr; // Pointer to text we're changing
|
|
||||||
std::string textdesc; // Description (for editor mode text fields)
|
|
||||||
union {
|
|
||||||
int desc; // Which description row we're changing
|
|
||||||
int textent; // Entity ID for text prompt
|
|
||||||
};
|
|
||||||
bool xmod, zmod, cmod, vmod, bmod, hmod, spacemod, warpmod;
|
|
||||||
bool titlemod, creatormod, desc1mod, desc2mod, desc3mod, websitemod;
|
|
||||||
|
|
||||||
int roomnamehide;
|
|
||||||
bool saveandquit;
|
|
||||||
bool shiftmenu, shiftkey;
|
|
||||||
int spacemenu;
|
|
||||||
bool settingsmod, settingskey;
|
|
||||||
int warpent;
|
|
||||||
bool updatetiles, changeroom;
|
|
||||||
int deletekeyheld;
|
|
||||||
|
|
||||||
int boundarymod, boundarytype;
|
|
||||||
int boundx1, boundx2, boundy1, boundy2;
|
|
||||||
|
|
||||||
int levmusic;
|
int levmusic;
|
||||||
int mapwidth, mapheight; //Actual width and height of stage
|
int mapwidth, mapheight; //Actual width and height of stage
|
||||||
|
|
||||||
int version;
|
int version;
|
||||||
|
|
||||||
//Script editor stuff
|
|
||||||
void removeline(int t);
|
|
||||||
void insertline(int t);
|
|
||||||
|
|
||||||
bool scripteditmod;
|
|
||||||
int scripthelppage, scripthelppagedelay;
|
|
||||||
std::vector<std::string> sb;
|
|
||||||
std::string sbscript;
|
|
||||||
int sbx, sby;
|
|
||||||
int pagey;
|
|
||||||
|
|
||||||
//Functions for interfacing with the script:
|
|
||||||
void addhook(std::string t);
|
|
||||||
void removehook(std::string t);
|
|
||||||
void addhooktoscript(std::string t);
|
|
||||||
void removehookfromscript(std::string t);
|
|
||||||
void loadhookineditor(std::string t);
|
|
||||||
void clearscriptbuffer(void);
|
|
||||||
void gethooks(void);
|
|
||||||
bool checkhook(std::string t);
|
|
||||||
std::vector<std::string> hooklist;
|
|
||||||
|
|
||||||
int hookmenupage, hookmenu;
|
|
||||||
|
|
||||||
//Direct Mode variables
|
|
||||||
int dmtile;
|
|
||||||
int dmtileeditor;
|
|
||||||
|
|
||||||
Uint32 getonewaycol(const int rx, const int ry);
|
Uint32 getonewaycol(const int rx, const int ry);
|
||||||
Uint32 getonewaycol(void);
|
Uint32 getonewaycol(void);
|
||||||
bool onewaycol_override;
|
bool onewaycol_override;
|
||||||
|
|
||||||
int returneditoralpha;
|
|
||||||
int oldreturneditoralpha;
|
|
||||||
|
|
||||||
std::vector<GhostInfo> ghosts;
|
|
||||||
int currentghosts;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef ED_DEFINITION
|
#ifndef CL_DEFINITION
|
||||||
extern editorclass ed;
|
extern customlevelclass cl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* CUSTOMLEVELS_H */
|
#endif /* CUSTOMLEVELS_H */
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -3,6 +3,175 @@
|
||||||
#ifndef EDITOR_H
|
#ifndef EDITOR_H
|
||||||
#define EDITOR_H
|
#define EDITOR_H
|
||||||
|
|
||||||
|
#include "CustomLevels.h"
|
||||||
|
|
||||||
|
#include <SDL.h>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
// Text entry field type
|
||||||
|
enum textmode
|
||||||
|
{
|
||||||
|
TEXT_NONE,
|
||||||
|
|
||||||
|
// In-editor text fields
|
||||||
|
TEXT_LOAD,
|
||||||
|
TEXT_SAVE,
|
||||||
|
TEXT_ROOMNAME,
|
||||||
|
TEXT_SCRIPT,
|
||||||
|
TEXT_ROOMTEXT,
|
||||||
|
TEXT_GOTOROOM,
|
||||||
|
LAST_EDTEXT = TEXT_GOTOROOM,
|
||||||
|
|
||||||
|
// Settings-mode text fields
|
||||||
|
TEXT_TITLE,
|
||||||
|
TEXT_DESC,
|
||||||
|
TEXT_WEBSITE,
|
||||||
|
TEXT_CREATOR,
|
||||||
|
NUM_TEXTMODES,
|
||||||
|
|
||||||
|
// Text modes with an entity
|
||||||
|
FIRST_ENTTEXT = TEXT_SCRIPT,
|
||||||
|
LAST_ENTTEXT = TEXT_ROOMTEXT
|
||||||
|
};
|
||||||
|
|
||||||
|
struct GhostInfo
|
||||||
|
{
|
||||||
|
int rx; // game.roomx-100
|
||||||
|
int ry; // game.roomy-100
|
||||||
|
int x; // .xp
|
||||||
|
int y; // .yp
|
||||||
|
int col; // .colour
|
||||||
|
Uint32 realcol;
|
||||||
|
int frame; // .drawframe
|
||||||
|
};
|
||||||
|
|
||||||
|
class editorclass
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
editorclass(void);
|
||||||
|
void reset(void);
|
||||||
|
|
||||||
|
void getlin(const enum textmode mode, const std::string& prompt, std::string* ptr);
|
||||||
|
|
||||||
|
void placetilelocal(int x, int y, int t);
|
||||||
|
|
||||||
|
int base(int x, int y);
|
||||||
|
|
||||||
|
int backbase(int x, int y);
|
||||||
|
|
||||||
|
int at(int x, int y);
|
||||||
|
|
||||||
|
int freewrap(int x, int y);
|
||||||
|
|
||||||
|
int backonlyfree(int x, int y);
|
||||||
|
|
||||||
|
int backfree(int x, int y);
|
||||||
|
|
||||||
|
int spikefree(int x, int y);
|
||||||
|
int free(int x, int y);
|
||||||
|
|
||||||
|
int match(int x, int y);
|
||||||
|
int outsidematch(int x, int y);
|
||||||
|
|
||||||
|
int backmatch(int x, int y);
|
||||||
|
|
||||||
|
int edgetile(int x, int y);
|
||||||
|
int outsideedgetile(int x, int y);
|
||||||
|
|
||||||
|
int backedgetile(int x, int y);
|
||||||
|
|
||||||
|
int labspikedir(int x, int y, int t);
|
||||||
|
int spikedir(int x, int y);
|
||||||
|
|
||||||
|
int getenemyframe(int t);
|
||||||
|
|
||||||
|
void switch_tileset(const bool reversed);
|
||||||
|
void switch_tilecol(const bool reversed);
|
||||||
|
void clamp_tilecol(const int rx, const int ry, const bool wrap);
|
||||||
|
void switch_enemy(const bool reversed);
|
||||||
|
void switch_warpdir(const bool reversed);
|
||||||
|
|
||||||
|
int entcol;
|
||||||
|
Uint32 entcolreal;
|
||||||
|
|
||||||
|
int kludgewarpdir[customlevelclass::numrooms];
|
||||||
|
|
||||||
|
int notedelay;
|
||||||
|
int oldnotedelay;
|
||||||
|
std::string note;
|
||||||
|
std::string keybuffer;
|
||||||
|
std::string filename;
|
||||||
|
std::string loaded_filepath;
|
||||||
|
|
||||||
|
int drawmode;
|
||||||
|
int tilex, tiley;
|
||||||
|
int keydelay, lclickdelay;
|
||||||
|
bool savekey, loadkey;
|
||||||
|
int levx, levy;
|
||||||
|
int entframe, entframedelay;
|
||||||
|
|
||||||
|
int scripttexttype;
|
||||||
|
std::string oldenttext;
|
||||||
|
|
||||||
|
enum textmode textmod; // In text entry
|
||||||
|
std::string* textptr; // Pointer to text we're changing
|
||||||
|
std::string textdesc; // Description (for editor mode text fields)
|
||||||
|
union
|
||||||
|
{
|
||||||
|
int desc; // Which description row we're changing
|
||||||
|
int textent; // Entity ID for text prompt
|
||||||
|
};
|
||||||
|
bool xmod, zmod, cmod, vmod, bmod, hmod, spacemod, warpmod;
|
||||||
|
bool titlemod, creatormod, desc1mod, desc2mod, desc3mod, websitemod;
|
||||||
|
|
||||||
|
int roomnamehide;
|
||||||
|
bool saveandquit;
|
||||||
|
bool shiftmenu, shiftkey;
|
||||||
|
int spacemenu;
|
||||||
|
bool settingsmod, settingskey;
|
||||||
|
int warpent;
|
||||||
|
bool updatetiles, changeroom;
|
||||||
|
int deletekeyheld;
|
||||||
|
|
||||||
|
int boundarymod, boundarytype;
|
||||||
|
int boundx1, boundx2, boundy1, boundy2;
|
||||||
|
|
||||||
|
//Script editor stuff
|
||||||
|
void removeline(int t);
|
||||||
|
void insertline(int t);
|
||||||
|
|
||||||
|
bool scripteditmod;
|
||||||
|
int scripthelppage, scripthelppagedelay;
|
||||||
|
std::vector<std::string> sb;
|
||||||
|
std::string sbscript;
|
||||||
|
int sbx, sby;
|
||||||
|
int pagey;
|
||||||
|
|
||||||
|
//Functions for interfacing with the script:
|
||||||
|
void addhook(std::string t);
|
||||||
|
void removehook(std::string t);
|
||||||
|
void addhooktoscript(std::string t);
|
||||||
|
void removehookfromscript(std::string t);
|
||||||
|
void loadhookineditor(std::string t);
|
||||||
|
void clearscriptbuffer(void);
|
||||||
|
void gethooks(void);
|
||||||
|
bool checkhook(std::string t);
|
||||||
|
std::vector<std::string> hooklist;
|
||||||
|
|
||||||
|
int hookmenupage, hookmenu;
|
||||||
|
|
||||||
|
//Direct Mode variables
|
||||||
|
int dmtile;
|
||||||
|
int dmtileeditor;
|
||||||
|
|
||||||
|
int returneditoralpha;
|
||||||
|
int oldreturneditoralpha;
|
||||||
|
|
||||||
|
std::vector<GhostInfo> ghosts;
|
||||||
|
int currentghosts;
|
||||||
|
};
|
||||||
|
|
||||||
void editorrender(void);
|
void editorrender(void);
|
||||||
|
|
||||||
void editorrenderfixed(void);
|
void editorrenderfixed(void);
|
||||||
|
@ -11,6 +180,10 @@ void editorlogic(void);
|
||||||
|
|
||||||
void editorinput(void);
|
void editorinput(void);
|
||||||
|
|
||||||
|
#ifndef ED_DEFINITION
|
||||||
|
extern editorclass ed;
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* EDITOR_H */
|
#endif /* EDITOR_H */
|
||||||
|
|
||||||
#endif /* NO_CUSTOM_LEVELS and NO_EDITOR */
|
#endif /* NO_CUSTOM_LEVELS and NO_EDITOR */
|
||||||
|
|
|
@ -1257,7 +1257,7 @@ void entityclass::createentity(int xp, int yp, int t, int meta1, int meta2, int
|
||||||
|
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS)
|
||||||
// Special case for gray Warp Zone tileset!
|
// Special case for gray Warp Zone tileset!
|
||||||
const edlevelclass* const room = ed.getroomprop(game.roomx - 100, game.roomy - 100);
|
const edlevelclass* const room = cl.getroomprop(game.roomx - 100, game.roomy - 100);
|
||||||
bool custom_gray = room->tileset == 3 && room->tilecol == 6;
|
bool custom_gray = room->tileset == 3 && room->tilecol == 6;
|
||||||
#else
|
#else
|
||||||
bool custom_gray = false;
|
bool custom_gray = false;
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include "CustomLevels.h"
|
#include "CustomLevels.h"
|
||||||
#include "DeferCallbacks.h"
|
#include "DeferCallbacks.h"
|
||||||
|
#include "Editor.h"
|
||||||
#include "Entity.h"
|
#include "Entity.h"
|
||||||
#include "Enums.h"
|
#include "Enums.h"
|
||||||
#include "FileSystemUtils.h"
|
#include "FileSystemUtils.h"
|
||||||
|
@ -1836,7 +1837,7 @@ void Game::updatestate(void)
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS)
|
||||||
if(map.custommode)
|
if(map.custommode)
|
||||||
{
|
{
|
||||||
graphics.createtextboxflipme(" " + help.number(trinkets()) + " out of " + help.number(ed.numtrinkets())+ " ", 50, 135, 174, 174, 174);
|
graphics.createtextboxflipme(" " + help.number(trinkets()) + " out of " + help.number(cl.numtrinkets())+ " ", 50, 135, 174, 174, 174);
|
||||||
graphics.textboxcenterx();
|
graphics.textboxcenterx();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1880,17 +1881,17 @@ void Game::updatestate(void)
|
||||||
graphics.addline("You have found a lost crewmate!");
|
graphics.addline("You have found a lost crewmate!");
|
||||||
graphics.textboxcenterx();
|
graphics.textboxcenterx();
|
||||||
|
|
||||||
if(ed.numcrewmates()-crewmates()==0)
|
if(cl.numcrewmates()-crewmates()==0)
|
||||||
{
|
{
|
||||||
graphics.createtextboxflipme(" All crewmates rescued! ", 50, 135, 174, 174, 174);
|
graphics.createtextboxflipme(" All crewmates rescued! ", 50, 135, 174, 174, 174);
|
||||||
}
|
}
|
||||||
else if(ed.numcrewmates()-crewmates()==1)
|
else if(cl.numcrewmates()-crewmates()==1)
|
||||||
{
|
{
|
||||||
graphics.createtextboxflipme(" " + help.number(ed.numcrewmates()-crewmates())+ " remains ", 50, 135, 174, 174, 174);
|
graphics.createtextboxflipme(" " + help.number(cl.numcrewmates()-crewmates())+ " remains ", 50, 135, 174, 174, 174);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
graphics.createtextboxflipme(" " + help.number(ed.numcrewmates()-crewmates())+ " remain ", 50, 135, 174, 174, 174);
|
graphics.createtextboxflipme(" " + help.number(cl.numcrewmates()-crewmates())+ " remain ", 50, 135, 174, 174, 174);
|
||||||
}
|
}
|
||||||
graphics.textboxcenterx();
|
graphics.textboxcenterx();
|
||||||
break;
|
break;
|
||||||
|
@ -1908,25 +1909,27 @@ void Game::updatestate(void)
|
||||||
completestop = false;
|
completestop = false;
|
||||||
state = 0;
|
state = 0;
|
||||||
|
|
||||||
if(ed.numcrewmates()-crewmates()==0)
|
if(cl.numcrewmates()-crewmates()==0)
|
||||||
{
|
{
|
||||||
if(map.custommodeforreal)
|
if(map.custommodeforreal)
|
||||||
{
|
{
|
||||||
graphics.fademode = 2;
|
graphics.fademode = 2;
|
||||||
if(!muted && ed.levmusic>0) music.fadeMusicVolumeIn(3000);
|
if(!muted && cl.levmusic>0) music.fadeMusicVolumeIn(3000);
|
||||||
if(ed.levmusic>0) music.fadeout();
|
if(cl.levmusic>0) music.fadeout();
|
||||||
state=1014;
|
state=1014;
|
||||||
}
|
}
|
||||||
|
#ifndef NO_EDITOR
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
returntoeditor();
|
returntoeditor();
|
||||||
if(!muted && ed.levmusic>0) music.fadeMusicVolumeIn(3000);
|
if(!muted && cl.levmusic>0) music.fadeMusicVolumeIn(3000);
|
||||||
if(ed.levmusic>0) music.fadeout();
|
if(cl.levmusic>0) music.fadeout();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!muted && ed.levmusic>0) music.fadeMusicVolumeIn(3000);
|
if(!muted && cl.levmusic>0) music.fadeMusicVolumeIn(3000);
|
||||||
}
|
}
|
||||||
graphics.showcutscenebars = false;
|
graphics.showcutscenebars = false;
|
||||||
break;
|
break;
|
||||||
|
@ -1938,10 +1941,10 @@ void Game::updatestate(void)
|
||||||
case 1015:
|
case 1015:
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS)
|
||||||
//Update level stats
|
//Update level stats
|
||||||
if(ed.numcrewmates()-crewmates()==0)
|
if(cl.numcrewmates()-crewmates()==0)
|
||||||
{
|
{
|
||||||
//Finished level
|
//Finished level
|
||||||
if (trinkets() >= ed.numtrinkets())
|
if (trinkets() >= cl.numtrinkets())
|
||||||
{
|
{
|
||||||
//and got all the trinkets!
|
//and got all the trinkets!
|
||||||
updatecustomlevelstats(customlevelfilename, 3);
|
updatecustomlevelstats(customlevelfilename, 3);
|
||||||
|
@ -5914,14 +5917,14 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
||||||
maxspacing = 15;
|
maxspacing = 15;
|
||||||
break;
|
break;
|
||||||
case Menu::levellist:
|
case Menu::levellist:
|
||||||
if(ed.ListOfMetaData.size()==0)
|
if(cl.ListOfMetaData.size()==0)
|
||||||
{
|
{
|
||||||
option("ok");
|
option("ok");
|
||||||
menuyoff = -20;
|
menuyoff = -20;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for(int i=0; i<(int) ed.ListOfMetaData.size(); i++) // FIXME: int/size_t! -flibit
|
for(int i=0; i<(int) cl.ListOfMetaData.size(); i++) // FIXME: int/size_t! -flibit
|
||||||
{
|
{
|
||||||
if(i>=levelpage*8 && i< (levelpage*8)+8)
|
if(i>=levelpage*8 && i< (levelpage*8)+8)
|
||||||
{
|
{
|
||||||
|
@ -5929,7 +5932,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
||||||
int tvar=-1;
|
int tvar=-1;
|
||||||
for(size_t j=0; j<customlevelstats.size(); j++)
|
for(size_t j=0; j<customlevelstats.size(); j++)
|
||||||
{
|
{
|
||||||
if(ed.ListOfMetaData[i].filename.substr(7) == customlevelstats[j].name)
|
if(cl.ListOfMetaData[i].filename.substr(7) == customlevelstats[j].name)
|
||||||
{
|
{
|
||||||
tvar=j;
|
tvar=j;
|
||||||
break;
|
break;
|
||||||
|
@ -5970,7 +5973,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
||||||
prefix = tmp;
|
prefix = tmp;
|
||||||
}
|
}
|
||||||
char text[MENU_TEXT_BYTES];
|
char text[MENU_TEXT_BYTES];
|
||||||
SDL_snprintf(text, sizeof(text), "%s%s", prefix, ed.ListOfMetaData[i].title.c_str());
|
SDL_snprintf(text, sizeof(text), "%s%s", prefix, cl.ListOfMetaData[i].title.c_str());
|
||||||
for (size_t ii = 0; text[ii] != '\0'; ++ii)
|
for (size_t ii = 0; text[ii] != '\0'; ++ii)
|
||||||
{
|
{
|
||||||
text[ii] = SDL_tolower(text[ii]);
|
text[ii] = SDL_tolower(text[ii]);
|
||||||
|
@ -5978,9 +5981,9 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
|
||||||
option(text);
|
option(text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ed.ListOfMetaData.size() > 8)
|
if (cl.ListOfMetaData.size() > 8)
|
||||||
{
|
{
|
||||||
if((size_t) ((levelpage*8)+8) <ed.ListOfMetaData.size())
|
if((size_t) ((levelpage*8)+8) <cl.ListOfMetaData.size())
|
||||||
{
|
{
|
||||||
option("next page");
|
option("next page");
|
||||||
}
|
}
|
||||||
|
@ -6754,7 +6757,7 @@ void Game::returntolab(void)
|
||||||
music.play(11);
|
music.play(11);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS) && !defined(NO_EDITOR)
|
||||||
static void resetbg(void)
|
static void resetbg(void)
|
||||||
{
|
{
|
||||||
graphics.backgrounddrawn = false;
|
graphics.backgrounddrawn = false;
|
||||||
|
@ -6781,11 +6784,11 @@ void Game::returntoeditor(void)
|
||||||
DEFER_CALLBACK(resetbg);
|
DEFER_CALLBACK(resetbg);
|
||||||
music.fadeout();
|
music.fadeout();
|
||||||
//If warpdir() is used during playtesting, we need to set it back after!
|
//If warpdir() is used during playtesting, we need to set it back after!
|
||||||
for (int j = 0; j < ed.maxheight; j++)
|
for (int j = 0; j < cl.maxheight; j++)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < ed.maxwidth; i++)
|
for (int i = 0; i < cl.maxwidth; i++)
|
||||||
{
|
{
|
||||||
ed.level[i+(j*ed.maxwidth)].warpdir=ed.kludgewarpdir[i+(j*ed.maxwidth)];
|
cl.level[i+(j*cl.maxwidth)].warpdir=ed.kludgewarpdir[i+(j*cl.maxwidth)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
graphics.titlebg.scrolldir = 0;
|
graphics.titlebg.scrolldir = 0;
|
||||||
|
|
|
@ -867,7 +867,7 @@ bool Graphics::shouldrecoloroneway(const int tilenum, const bool mounted)
|
||||||
{
|
{
|
||||||
return (tilenum >= 14 && tilenum <= 17
|
return (tilenum >= 14 && tilenum <= 17
|
||||||
&& (!mounted
|
&& (!mounted
|
||||||
|| ed.onewaycol_override));
|
|| cl.onewaycol_override));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -884,7 +884,7 @@ void Graphics::drawtile( int x, int y, int t )
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS)
|
||||||
if (shouldrecoloroneway(t, tiles1_mounted))
|
if (shouldrecoloroneway(t, tiles1_mounted))
|
||||||
{
|
{
|
||||||
colourTransform thect = {ed.getonewaycol()};
|
colourTransform thect = {cl.getonewaycol()};
|
||||||
BlitSurfaceTinted(tiles[t], NULL, backBuffer, &rect, thect);
|
BlitSurfaceTinted(tiles[t], NULL, backBuffer, &rect, thect);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -908,7 +908,7 @@ void Graphics::drawtile2( int x, int y, int t )
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS)
|
||||||
if (shouldrecoloroneway(t, tiles2_mounted))
|
if (shouldrecoloroneway(t, tiles2_mounted))
|
||||||
{
|
{
|
||||||
colourTransform thect = {ed.getonewaycol()};
|
colourTransform thect = {cl.getonewaycol()};
|
||||||
BlitSurfaceTinted(tiles2[t], NULL, backBuffer, &rect, thect);
|
BlitSurfaceTinted(tiles2[t], NULL, backBuffer, &rect, thect);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1597,7 +1597,7 @@ void Graphics::drawmenu( int cr, int cg, int cb, bool levelmenu /*= false*/ )
|
||||||
if (levelmenu)
|
if (levelmenu)
|
||||||
{
|
{
|
||||||
size_t separator;
|
size_t separator;
|
||||||
if (ed.ListOfMetaData.size() > 8)
|
if (cl.ListOfMetaData.size() > 8)
|
||||||
{
|
{
|
||||||
separator = 3;
|
separator = 3;
|
||||||
}
|
}
|
||||||
|
@ -1896,7 +1896,7 @@ void Graphics::drawentity(const int i, const int yoff)
|
||||||
|
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS)
|
||||||
// Special case for gray Warp Zone tileset!
|
// Special case for gray Warp Zone tileset!
|
||||||
const edlevelclass* const room = ed.getroomprop(game.roomx - 100, game.roomy - 100);
|
const edlevelclass* const room = cl.getroomprop(game.roomx - 100, game.roomy - 100);
|
||||||
const bool custom_gray = room->tileset == 3 && room->tilecol == 6;
|
const bool custom_gray = room->tileset == 3 && room->tilecol == 6;
|
||||||
#else
|
#else
|
||||||
const bool custom_gray = false;
|
const bool custom_gray = false;
|
||||||
|
@ -3368,7 +3368,7 @@ void Graphics::drawforetile(int x, int y, int t)
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS)
|
||||||
if (shouldrecoloroneway(t, tiles1_mounted))
|
if (shouldrecoloroneway(t, tiles1_mounted))
|
||||||
{
|
{
|
||||||
colourTransform thect = {ed.getonewaycol()};
|
colourTransform thect = {cl.getonewaycol()};
|
||||||
BlitSurfaceTinted(tiles[t], NULL, foregroundBuffer, &rect, thect);
|
BlitSurfaceTinted(tiles[t], NULL, foregroundBuffer, &rect, thect);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -3392,7 +3392,7 @@ void Graphics::drawforetile2(int x, int y, int t)
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS)
|
||||||
if (shouldrecoloroneway(t, tiles2_mounted))
|
if (shouldrecoloroneway(t, tiles2_mounted))
|
||||||
{
|
{
|
||||||
colourTransform thect = {ed.getonewaycol()};
|
colourTransform thect = {cl.getonewaycol()};
|
||||||
BlitSurfaceTinted(tiles2[t], NULL, foregroundBuffer, &rect, thect);
|
BlitSurfaceTinted(tiles2[t], NULL, foregroundBuffer, &rect, thect);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "Credits.h"
|
#include "Credits.h"
|
||||||
#include "CustomLevels.h"
|
#include "CustomLevels.h"
|
||||||
|
#include "Editor.h"
|
||||||
#include "Entity.h"
|
#include "Entity.h"
|
||||||
#include "Enums.h"
|
#include "Enums.h"
|
||||||
#include "FileSystemUtils.h"
|
#include "FileSystemUtils.h"
|
||||||
|
@ -414,7 +415,7 @@ static void menuactionpress(void)
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS)
|
||||||
case Menu::levellist:
|
case Menu::levellist:
|
||||||
{
|
{
|
||||||
const bool nextlastoptions = ed.ListOfMetaData.size() > 8;
|
const bool nextlastoptions = cl.ListOfMetaData.size() > 8;
|
||||||
if(game.currentmenuoption==(int)game.menuoptions.size()-1){
|
if(game.currentmenuoption==(int)game.menuoptions.size()-1){
|
||||||
//go back to menu
|
//go back to menu
|
||||||
music.playef(11);
|
music.playef(11);
|
||||||
|
@ -424,7 +425,7 @@ static void menuactionpress(void)
|
||||||
//previous page
|
//previous page
|
||||||
music.playef(11);
|
music.playef(11);
|
||||||
if(game.levelpage==0){
|
if(game.levelpage==0){
|
||||||
game.levelpage=(ed.ListOfMetaData.size()-1)/8;
|
game.levelpage=(cl.ListOfMetaData.size()-1)/8;
|
||||||
}else{
|
}else{
|
||||||
game.levelpage--;
|
game.levelpage--;
|
||||||
}
|
}
|
||||||
|
@ -434,7 +435,7 @@ static void menuactionpress(void)
|
||||||
}else if(nextlastoptions && game.currentmenuoption==(int)game.menuoptions.size()-3){
|
}else if(nextlastoptions && game.currentmenuoption==(int)game.menuoptions.size()-3){
|
||||||
//next page
|
//next page
|
||||||
music.playef(11);
|
music.playef(11);
|
||||||
if((size_t) ((game.levelpage*8)+8) >= ed.ListOfMetaData.size()){
|
if((size_t) ((game.levelpage*8)+8) >= cl.ListOfMetaData.size()){
|
||||||
game.levelpage=0;
|
game.levelpage=0;
|
||||||
}else{
|
}else{
|
||||||
game.levelpage++;
|
game.levelpage++;
|
||||||
|
@ -447,10 +448,10 @@ static void menuactionpress(void)
|
||||||
//PLAY CUSTOM LEVEL HOOK
|
//PLAY CUSTOM LEVEL HOOK
|
||||||
music.playef(11);
|
music.playef(11);
|
||||||
game.playcustomlevel=(game.levelpage*8)+game.currentmenuoption;
|
game.playcustomlevel=(game.levelpage*8)+game.currentmenuoption;
|
||||||
game.customleveltitle=ed.ListOfMetaData[game.playcustomlevel].title;
|
game.customleveltitle=cl.ListOfMetaData[game.playcustomlevel].title;
|
||||||
game.customlevelfilename=ed.ListOfMetaData[game.playcustomlevel].filename;
|
game.customlevelfilename=cl.ListOfMetaData[game.playcustomlevel].filename;
|
||||||
|
|
||||||
std::string name = "saves/" + ed.ListOfMetaData[game.playcustomlevel].filename.substr(7) + ".vvv";
|
std::string name = "saves/" + cl.ListOfMetaData[game.playcustomlevel].filename.substr(7) + ".vvv";
|
||||||
tinyxml2::XMLDocument doc;
|
tinyxml2::XMLDocument doc;
|
||||||
if (!FILESYSTEM_loadTiXml2Document(name.c_str(), doc)){
|
if (!FILESYSTEM_loadTiXml2Document(name.c_str(), doc)){
|
||||||
startmode(22);
|
startmode(22);
|
||||||
|
@ -494,7 +495,7 @@ static void menuactionpress(void)
|
||||||
game.returnmenu();
|
game.returnmenu();
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
game.customdeletequick(ed.ListOfMetaData[game.playcustomlevel].filename);
|
game.customdeletequick(cl.ListOfMetaData[game.playcustomlevel].filename);
|
||||||
game.returntomenu(Menu::levellist);
|
game.returntomenu(Menu::levellist);
|
||||||
game.flashlight = 5;
|
game.flashlight = 5;
|
||||||
game.screenshake = 15;
|
game.screenshake = 15;
|
||||||
|
@ -515,7 +516,7 @@ static void menuactionpress(void)
|
||||||
|
|
||||||
music.playef(11);
|
music.playef(11);
|
||||||
game.levelpage=0;
|
game.levelpage=0;
|
||||||
ed.getDirectoryData();
|
cl.getDirectoryData();
|
||||||
game.loadcustomlevelstats(); //Should only load a file if it's needed
|
game.loadcustomlevelstats(); //Should only load a file if it's needed
|
||||||
game.createmenu(Menu::levellist);
|
game.createmenu(Menu::levellist);
|
||||||
if (FILESYSTEM_levelDirHasError())
|
if (FILESYSTEM_levelDirHasError())
|
||||||
|
@ -2039,7 +2040,7 @@ void gameinput(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Returning to editor mode must always be possible
|
//Returning to editor mode must always be possible
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS) && !defined(NO_EDITOR)
|
||||||
if (map.custommode && !map.custommodeforreal)
|
if (map.custommode && !map.custommodeforreal)
|
||||||
{
|
{
|
||||||
if ((game.press_map || key.isDown(27)) && !game.mapheld)
|
if ((game.press_map || key.isDown(27)) && !game.mapheld)
|
||||||
|
@ -2601,7 +2602,7 @@ static void mapmenuactionpress(const bool version2_2)
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS)
|
||||||
if(map.custommodeforreal)
|
if(map.custommodeforreal)
|
||||||
{
|
{
|
||||||
success = game.customsavequick(ed.ListOfMetaData[game.playcustomlevel].filename);
|
success = game.customsavequick(cl.ListOfMetaData[game.playcustomlevel].filename);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -993,10 +993,10 @@ void mapclass::gotoroom(int rx, int ry)
|
||||||
{
|
{
|
||||||
game.roomx = rx;
|
game.roomx = rx;
|
||||||
game.roomy = ry;
|
game.roomy = ry;
|
||||||
if (game.roomx < 100) game.roomx = 100 + ed.mapwidth-1;
|
if (game.roomx < 100) game.roomx = 100 + cl.mapwidth-1;
|
||||||
if (game.roomy < 100) game.roomy = 100 + ed.mapheight-1;
|
if (game.roomy < 100) game.roomy = 100 + cl.mapheight-1;
|
||||||
if (game.roomx > 100 + ed.mapwidth-1) game.roomx = 100;
|
if (game.roomx > 100 + cl.mapwidth-1) game.roomx = 100;
|
||||||
if (game.roomy > 100 + ed.mapheight-1) game.roomy = 100;
|
if (game.roomy > 100 + cl.mapheight-1) game.roomy = 100;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else
|
else
|
||||||
|
@ -1562,8 +1562,8 @@ void mapclass::loadlevel(int rx, int ry)
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS)
|
||||||
case 12: //Custom level
|
case 12: //Custom level
|
||||||
{
|
{
|
||||||
const edlevelclass* const room = ed.getroomprop(rx - 100, ry - 100);
|
const edlevelclass* const room = cl.getroomprop(rx - 100, ry - 100);
|
||||||
game.customcol = ed.getlevelcol(room->tileset, room->tilecol) + 1;
|
game.customcol = cl.getlevelcol(room->tileset, room->tilecol) + 1;
|
||||||
obj.customplatformtile = game.customcol * 12;
|
obj.customplatformtile = game.customcol * 12;
|
||||||
|
|
||||||
switch (room->tileset)
|
switch (room->tileset)
|
||||||
|
@ -1607,24 +1607,24 @@ void mapclass::loadlevel(int rx, int ry)
|
||||||
case 1:
|
case 1:
|
||||||
warpx = true;
|
warpx = true;
|
||||||
background = 3;
|
background = 3;
|
||||||
graphics.rcol = ed.getwarpbackground(rx - 100, ry - 100);
|
graphics.rcol = cl.getwarpbackground(rx - 100, ry - 100);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
warpy = true;
|
warpy = true;
|
||||||
background = 4;
|
background = 4;
|
||||||
graphics.rcol = ed.getwarpbackground(rx - 100, ry - 100);
|
graphics.rcol = cl.getwarpbackground(rx - 100, ry - 100);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
warpx = true;
|
warpx = true;
|
||||||
warpy = true;
|
warpy = true;
|
||||||
background = 5;
|
background = 5;
|
||||||
graphics.rcol = ed.getwarpbackground(rx - 100, ry - 100);
|
graphics.rcol = cl.getwarpbackground(rx - 100, ry - 100);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
roomname = room->roomname;
|
roomname = room->roomname;
|
||||||
extrarow = 1;
|
extrarow = 1;
|
||||||
const int* tmap = ed.loadlevel(rx, ry);
|
const int* tmap = cl.loadlevel(rx, ry);
|
||||||
SDL_memcpy(contents, tmap, sizeof(contents));
|
SDL_memcpy(contents, tmap, sizeof(contents));
|
||||||
|
|
||||||
|
|
||||||
|
@ -1704,7 +1704,7 @@ void mapclass::loadlevel(int rx, int ry)
|
||||||
obj.createentity(ex, ey, 3);
|
obj.createentity(ex, ey, 3);
|
||||||
break;
|
break;
|
||||||
case 9: // Trinkets
|
case 9: // Trinkets
|
||||||
obj.createentity(ex, ey, 9, ed.findtrinket(edi));
|
obj.createentity(ex, ey, 9, cl.findtrinket(edi));
|
||||||
break;
|
break;
|
||||||
case 10: // Checkpoints
|
case 10: // Checkpoints
|
||||||
obj.createentity(ex, ey, 10, ent.p1, (rx + ry*100) * 20 + tempcheckpoints);
|
obj.createentity(ex, ey, 10, ent.p1, (rx + ry*100) * 20 + tempcheckpoints);
|
||||||
|
@ -1724,7 +1724,7 @@ void mapclass::loadlevel(int rx, int ry)
|
||||||
obj.createentity(ex, ey, 13, ent.p1, ent.p2);
|
obj.createentity(ex, ey, 13, ent.p1, ent.p2);
|
||||||
break;
|
break;
|
||||||
case 15: // Collectable crewmate
|
case 15: // Collectable crewmate
|
||||||
obj.createentity(ex - 4, ey + 1, 55, ed.findcrewmate(edi), ent.p1, ent.p2);
|
obj.createentity(ex - 4, ey + 1, 55, cl.findcrewmate(edi), ent.p1, ent.p2);
|
||||||
break;
|
break;
|
||||||
case 17: // Roomtext!
|
case 17: // Roomtext!
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "Credits.h"
|
#include "Credits.h"
|
||||||
#include "CustomLevels.h"
|
#include "CustomLevels.h"
|
||||||
|
#include "Editor.h"
|
||||||
#include "Entity.h"
|
#include "Entity.h"
|
||||||
#include "FileSystemUtils.h"
|
#include "FileSystemUtils.h"
|
||||||
#include "GlitchrunnerMode.h"
|
#include "GlitchrunnerMode.h"
|
||||||
|
@ -168,22 +169,22 @@ static void menurender(void)
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS)
|
||||||
case Menu::levellist:
|
case Menu::levellist:
|
||||||
{
|
{
|
||||||
if(ed.ListOfMetaData.size()==0){
|
if(cl.ListOfMetaData.size()==0){
|
||||||
graphics.Print( -1, 100, "ERROR: No levels found.", tr, tg, tb, true);
|
graphics.Print( -1, 100, "ERROR: No levels found.", tr, tg, tb, true);
|
||||||
}
|
}
|
||||||
int tmp=game.currentmenuoption+(game.levelpage*8);
|
int tmp=game.currentmenuoption+(game.levelpage*8);
|
||||||
if(INBOUNDS_VEC(tmp, ed.ListOfMetaData)){
|
if(INBOUNDS_VEC(tmp, cl.ListOfMetaData)){
|
||||||
const bool nextlastoptions = ed.ListOfMetaData.size() > 8;
|
const bool nextlastoptions = cl.ListOfMetaData.size() > 8;
|
||||||
//Don't show next/previous page or return to menu options here!
|
//Don't show next/previous page or return to menu options here!
|
||||||
if(nextlastoptions && game.menuoptions.size() - game.currentmenuoption<=3){
|
if(nextlastoptions && game.menuoptions.size() - game.currentmenuoption<=3){
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
graphics.bigprint( -1, 15, ed.ListOfMetaData[tmp].title, tr, tg, tb, true);
|
graphics.bigprint( -1, 15, cl.ListOfMetaData[tmp].title, tr, tg, tb, true);
|
||||||
graphics.Print( -1, 40, "by " + ed.ListOfMetaData[tmp].creator, tr, tg, tb, true);
|
graphics.Print( -1, 40, "by " + cl.ListOfMetaData[tmp].creator, tr, tg, tb, true);
|
||||||
graphics.Print( -1, 50, ed.ListOfMetaData[tmp].website, tr, tg, tb, true);
|
graphics.Print( -1, 50, cl.ListOfMetaData[tmp].website, tr, tg, tb, true);
|
||||||
graphics.Print( -1, 70, ed.ListOfMetaData[tmp].Desc1, tr, tg, tb, true);
|
graphics.Print( -1, 70, cl.ListOfMetaData[tmp].Desc1, tr, tg, tb, true);
|
||||||
graphics.Print( -1, 80, ed.ListOfMetaData[tmp].Desc2, tr, tg, tb, true);
|
graphics.Print( -1, 80, cl.ListOfMetaData[tmp].Desc2, tr, tg, tb, true);
|
||||||
graphics.Print( -1, 90, ed.ListOfMetaData[tmp].Desc3, tr, tg, tb, true);
|
graphics.Print( -1, 90, cl.ListOfMetaData[tmp].Desc3, tr, tg, tb, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1767,7 +1768,7 @@ void gamerender(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS) && !defined(NO_EDITOR)
|
||||||
if(map.custommode && !map.custommodeforreal && !game.advancetext){
|
if(map.custommode && !map.custommodeforreal && !game.advancetext){
|
||||||
//Return to level editor
|
//Return to level editor
|
||||||
int alpha = graphics.lerp(ed.oldreturneditoralpha, ed.returneditoralpha);
|
int alpha = graphics.lerp(ed.oldreturneditoralpha, ed.returneditoralpha);
|
||||||
|
@ -2388,7 +2389,7 @@ void maprender(void)
|
||||||
}
|
}
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS)
|
||||||
else if(map.custommode){
|
else if(map.custommode){
|
||||||
LevelMetaData& meta = ed.ListOfMetaData[game.playcustomlevel];
|
LevelMetaData& meta = cl.ListOfMetaData[game.playcustomlevel];
|
||||||
|
|
||||||
graphics.bigprint( -1, FLIP(45), meta.title, 196, 196, 255 - help.glow, true);
|
graphics.bigprint( -1, FLIP(45), meta.title, 196, 196, 255 - help.glow, true);
|
||||||
graphics.Print( -1, FLIP(70), "by " + meta.creator, 196, 196, 255 - help.glow, true);
|
graphics.Print( -1, FLIP(70), "by " + meta.creator, 196, 196, 255 - help.glow, true);
|
||||||
|
@ -2397,7 +2398,7 @@ void maprender(void)
|
||||||
graphics.Print( -1, FLIP(110), meta.Desc2, 196, 196, 255 - help.glow, true);
|
graphics.Print( -1, FLIP(110), meta.Desc2, 196, 196, 255 - help.glow, true);
|
||||||
graphics.Print( -1, FLIP(120), meta.Desc3, 196, 196, 255 - help.glow, true);
|
graphics.Print( -1, FLIP(120), meta.Desc3, 196, 196, 255 - help.glow, true);
|
||||||
|
|
||||||
int remaining = ed.numcrewmates() - game.crewmates();
|
int remaining = cl.numcrewmates() - game.crewmates();
|
||||||
|
|
||||||
if(remaining==1){
|
if(remaining==1){
|
||||||
graphics.Print(1,FLIP(165), help.number(remaining)+ " crewmate remains", 196, 196, 255 - help.glow, true);
|
graphics.Print(1,FLIP(165), help.number(remaining)+ " crewmate remains", 196, 196, 255 - help.glow, true);
|
||||||
|
@ -2475,7 +2476,7 @@ void maprender(void)
|
||||||
if (graphics.flipmode)
|
if (graphics.flipmode)
|
||||||
{
|
{
|
||||||
graphics.Print(0, 164, "[Trinkets found]", 196, 196, 255 - help.glow, true);
|
graphics.Print(0, 164, "[Trinkets found]", 196, 196, 255 - help.glow, true);
|
||||||
graphics.Print(0, 152, help.number(game.trinkets()) + " out of " + help.number(ed.numtrinkets()), 96,96,96, true);
|
graphics.Print(0, 152, help.number(game.trinkets()) + " out of " + help.number(cl.numtrinkets()), 96,96,96, true);
|
||||||
|
|
||||||
graphics.Print(0, 114, "[Number of Deaths]", 196, 196, 255 - help.glow, true);
|
graphics.Print(0, 114, "[Number of Deaths]", 196, 196, 255 - help.glow, true);
|
||||||
graphics.Print(0, 102,help.String(game.deathcounts), 96,96,96, true);
|
graphics.Print(0, 102,help.String(game.deathcounts), 96,96,96, true);
|
||||||
|
@ -2486,7 +2487,7 @@ void maprender(void)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
graphics.Print(0, 52, "[Trinkets found]", 196, 196, 255 - help.glow, true);
|
graphics.Print(0, 52, "[Trinkets found]", 196, 196, 255 - help.glow, true);
|
||||||
graphics.Print(0, 64, help.number(game.trinkets()) + " out of "+help.number(ed.numtrinkets()), 96,96,96, true);
|
graphics.Print(0, 64, help.number(game.trinkets()) + " out of "+help.number(cl.numtrinkets()), 96,96,96, true);
|
||||||
|
|
||||||
graphics.Print(0, 102, "[Number of Deaths]", 196, 196, 255 - help.glow, true);
|
graphics.Print(0, 102, "[Number of Deaths]", 196, 196, 255 - help.glow, true);
|
||||||
graphics.Print(0, 114,help.String(game.deathcounts), 96,96,96, true);
|
graphics.Print(0, 114,help.String(game.deathcounts), 96,96,96, true);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "CustomLevels.h"
|
#include "CustomLevels.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "Graphics.h"
|
#include "Graphics.h"
|
||||||
|
#include "Editor.h"
|
||||||
#include "Entity.h"
|
#include "Entity.h"
|
||||||
#include "Enums.h"
|
#include "Enums.h"
|
||||||
#include "Map.h"
|
#include "Map.h"
|
||||||
|
@ -118,7 +119,7 @@ void gamerenderfixed(void)
|
||||||
map.glitchname = map.getglitchname(game.roomx, game.roomy);
|
map.glitchname = map.getglitchname(game.roomx, game.roomy);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NO_CUSTOM_LEVELS
|
#if !defined(NO_CUSTOM_LEVELS) && !defined(NO_EDITOR)
|
||||||
ed.oldreturneditoralpha = ed.returneditoralpha;
|
ed.oldreturneditoralpha = ed.returneditoralpha;
|
||||||
if (map.custommode && !map.custommodeforreal && ed.returneditoralpha > 0)
|
if (map.custommode && !map.custommodeforreal && ed.returneditoralpha > 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <SDL_timer.h>
|
#include <SDL_timer.h>
|
||||||
|
|
||||||
#include "CustomLevels.h"
|
#include "CustomLevels.h"
|
||||||
|
#include "Editor.h"
|
||||||
#include "Entity.h"
|
#include "Entity.h"
|
||||||
#include "Enums.h"
|
#include "Enums.h"
|
||||||
#include "Exit.h"
|
#include "Exit.h"
|
||||||
|
@ -159,9 +160,9 @@ void scriptclass::run(void)
|
||||||
int temprx=ss_toi(words[1])-1;
|
int temprx=ss_toi(words[1])-1;
|
||||||
int tempry=ss_toi(words[2])-1;
|
int tempry=ss_toi(words[2])-1;
|
||||||
const edlevelclass* room;
|
const edlevelclass* room;
|
||||||
ed.setroomwarpdir(temprx, tempry, ss_toi(words[3]));
|
cl.setroomwarpdir(temprx, tempry, ss_toi(words[3]));
|
||||||
|
|
||||||
room = ed.getroomprop(temprx, tempry);
|
room = cl.getroomprop(temprx, tempry);
|
||||||
|
|
||||||
//Do we update our own room?
|
//Do we update our own room?
|
||||||
if(game.roomx-100==temprx && game.roomy-100==tempry){
|
if(game.roomx-100==temprx && game.roomy-100==tempry){
|
||||||
|
@ -182,21 +183,21 @@ void scriptclass::run(void)
|
||||||
}else if(room->warpdir==1){
|
}else if(room->warpdir==1){
|
||||||
map.warpx=true;
|
map.warpx=true;
|
||||||
map.background=3;
|
map.background=3;
|
||||||
graphics.rcol = ed.getwarpbackground(temprx,tempry);
|
graphics.rcol = cl.getwarpbackground(temprx,tempry);
|
||||||
}else if(room->warpdir==2){
|
}else if(room->warpdir==2){
|
||||||
map.warpy=true;
|
map.warpy=true;
|
||||||
map.background=4;
|
map.background=4;
|
||||||
graphics.rcol = ed.getwarpbackground(temprx,tempry);
|
graphics.rcol = cl.getwarpbackground(temprx,tempry);
|
||||||
}else if(room->warpdir==3){
|
}else if(room->warpdir==3){
|
||||||
map.warpx=true; map.warpy=true;
|
map.warpx=true; map.warpy=true;
|
||||||
map.background = 5;
|
map.background = 5;
|
||||||
graphics.rcol = ed.getwarpbackground(temprx,tempry);
|
graphics.rcol = cl.getwarpbackground(temprx,tempry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (words[0] == "ifwarp")
|
if (words[0] == "ifwarp")
|
||||||
{
|
{
|
||||||
const edlevelclass* const room = ed.getroomprop(ss_toi(words[1])-1, ss_toi(words[2])-1);
|
const edlevelclass* const room = cl.getroomprop(ss_toi(words[1])-1, ss_toi(words[2])-1);
|
||||||
if (room->warpdir == ss_toi(words[3]))
|
if (room->warpdir == ss_toi(words[3]))
|
||||||
{
|
{
|
||||||
load("custom_"+words[4]);
|
load("custom_"+words[4]);
|
||||||
|
@ -1704,7 +1705,7 @@ void scriptclass::run(void)
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#if !defined(NO_CUSTOM_LEVELS)
|
||||||
if (map.custommode)
|
if (map.custommode)
|
||||||
{
|
{
|
||||||
usethisnum = help.number(ed.numtrinkets());
|
usethisnum = help.number(cl.numtrinkets());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -2811,10 +2812,12 @@ void scriptclass::startgamemode( int t )
|
||||||
|
|
||||||
load("intermission_2");
|
load("intermission_2");
|
||||||
break;
|
break;
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#ifndef NO_CUSTOM_LEVELS
|
||||||
|
# ifndef NO_EDITOR
|
||||||
case 20:
|
case 20:
|
||||||
//Level editor
|
//Level editor
|
||||||
hardreset();
|
hardreset();
|
||||||
|
cl.reset();
|
||||||
ed.reset();
|
ed.reset();
|
||||||
music.fadeout();
|
music.fadeout();
|
||||||
map.custommode = true;
|
map.custommode = true;
|
||||||
|
@ -2838,11 +2841,11 @@ void scriptclass::startgamemode( int t )
|
||||||
music.fadeout();
|
music.fadeout();
|
||||||
hardreset();
|
hardreset();
|
||||||
//If warpdir() is used during playtesting, we need to set it back after!
|
//If warpdir() is used during playtesting, we need to set it back after!
|
||||||
for (int j = 0; j < ed.maxheight; j++)
|
for (int j = 0; j < cl.maxheight; j++)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < ed.maxwidth; i++)
|
for (int i = 0; i < cl.maxwidth; i++)
|
||||||
{
|
{
|
||||||
ed.kludgewarpdir[i+(j*ed.maxwidth)]=ed.level[i+(j*ed.maxwidth)].warpdir;
|
ed.kludgewarpdir[i+(j*cl.maxwidth)]=cl.level[i+(j*cl.maxwidth)].warpdir;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
game.customstart();
|
game.customstart();
|
||||||
|
@ -2862,23 +2865,24 @@ void scriptclass::startgamemode( int t )
|
||||||
map.resetplayer();
|
map.resetplayer();
|
||||||
map.gotoroom(game.saverx, game.savery);
|
map.gotoroom(game.saverx, game.savery);
|
||||||
map.initmapdata();
|
map.initmapdata();
|
||||||
if(ed.levmusic>0){
|
if(cl.levmusic>0){
|
||||||
music.play(ed.levmusic);
|
music.play(cl.levmusic);
|
||||||
}else{
|
}else{
|
||||||
music.currentsong=-1;
|
music.currentsong=-1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
# endif /* NO_EDITOR */
|
||||||
case 22: //play custom level (in game)
|
case 22: //play custom level (in game)
|
||||||
{
|
{
|
||||||
//Initilise the level
|
//Initilise the level
|
||||||
//First up, find the start point
|
//First up, find the start point
|
||||||
std::string filename = std::string(ed.ListOfMetaData[game.playcustomlevel].filename);
|
std::string filename = std::string(cl.ListOfMetaData[game.playcustomlevel].filename);
|
||||||
if (!ed.load(filename))
|
if (!cl.load(filename))
|
||||||
{
|
{
|
||||||
gotoerrorloadinglevel();
|
gotoerrorloadinglevel();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ed.findstartpoint();
|
cl.findstartpoint();
|
||||||
|
|
||||||
game.gamestate = GAMEMODE;
|
game.gamestate = GAMEMODE;
|
||||||
music.fadeout();
|
music.fadeout();
|
||||||
|
@ -2900,10 +2904,10 @@ void scriptclass::startgamemode( int t )
|
||||||
map.gotoroom(game.saverx, game.savery);
|
map.gotoroom(game.saverx, game.savery);
|
||||||
map.initmapdata();
|
map.initmapdata();
|
||||||
|
|
||||||
ed.generatecustomminimap();
|
cl.generatecustomminimap();
|
||||||
map.customshowmm=true;
|
map.customshowmm=true;
|
||||||
if(ed.levmusic>0){
|
if(cl.levmusic>0){
|
||||||
music.play(ed.levmusic);
|
music.play(cl.levmusic);
|
||||||
}else{
|
}else{
|
||||||
music.currentsong=-1;
|
music.currentsong=-1;
|
||||||
}
|
}
|
||||||
|
@ -2914,13 +2918,13 @@ void scriptclass::startgamemode( int t )
|
||||||
{
|
{
|
||||||
//Initilise the level
|
//Initilise the level
|
||||||
//First up, find the start point
|
//First up, find the start point
|
||||||
std::string filename = std::string(ed.ListOfMetaData[game.playcustomlevel].filename);
|
std::string filename = std::string(cl.ListOfMetaData[game.playcustomlevel].filename);
|
||||||
if (!ed.load(filename))
|
if (!cl.load(filename))
|
||||||
{
|
{
|
||||||
gotoerrorloadinglevel();
|
gotoerrorloadinglevel();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ed.findstartpoint();
|
cl.findstartpoint();
|
||||||
|
|
||||||
game.gamestate = GAMEMODE;
|
game.gamestate = GAMEMODE;
|
||||||
music.fadeout();
|
music.fadeout();
|
||||||
|
@ -2929,7 +2933,7 @@ void scriptclass::startgamemode( int t )
|
||||||
map.custommode = true;
|
map.custommode = true;
|
||||||
|
|
||||||
game.customstart();
|
game.customstart();
|
||||||
game.customloadquick(ed.ListOfMetaData[game.playcustomlevel].filename);
|
game.customloadquick(cl.ListOfMetaData[game.playcustomlevel].filename);
|
||||||
game.jumpheld = true;
|
game.jumpheld = true;
|
||||||
game.gravitycontrol = game.savegc;
|
game.gravitycontrol = game.savegc;
|
||||||
|
|
||||||
|
@ -2944,11 +2948,11 @@ void scriptclass::startgamemode( int t )
|
||||||
map.resetplayer();
|
map.resetplayer();
|
||||||
map.gotoroom(game.saverx, game.savery);
|
map.gotoroom(game.saverx, game.savery);
|
||||||
map.initmapdata();
|
map.initmapdata();
|
||||||
ed.generatecustomminimap();
|
cl.generatecustomminimap();
|
||||||
graphics.fademode = 4;
|
graphics.fademode = 4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* NO_CUSTOM_LEVELS */
|
||||||
case 100:
|
case 100:
|
||||||
VVV_exit(0);
|
VVV_exit(0);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -31,9 +31,12 @@
|
||||||
|
|
||||||
scriptclass script;
|
scriptclass script;
|
||||||
|
|
||||||
#if !defined(NO_CUSTOM_LEVELS)
|
#ifndef NO_CUSTOM_LEVELS
|
||||||
std::vector<edentities> edentity;
|
std::vector<edentities> edentity;
|
||||||
|
customlevelclass cl;
|
||||||
|
# ifndef NO_EDITOR
|
||||||
editorclass ed;
|
editorclass ed;
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
UtilityClass help;
|
UtilityClass help;
|
||||||
|
@ -620,14 +623,14 @@ int main(int argc, char *argv[])
|
||||||
game.menustart = true;
|
game.menustart = true;
|
||||||
|
|
||||||
LevelMetaData meta;
|
LevelMetaData meta;
|
||||||
if (ed.getLevelMetaData(playtestname, meta)) {
|
if (cl.getLevelMetaData(playtestname, meta)) {
|
||||||
ed.ListOfMetaData.clear();
|
cl.ListOfMetaData.clear();
|
||||||
ed.ListOfMetaData.push_back(meta);
|
cl.ListOfMetaData.push_back(meta);
|
||||||
} else {
|
} else {
|
||||||
ed.loadZips();
|
cl.loadZips();
|
||||||
if (ed.getLevelMetaData(playtestname, meta)) {
|
if (cl.getLevelMetaData(playtestname, meta)) {
|
||||||
ed.ListOfMetaData.clear();
|
cl.ListOfMetaData.clear();
|
||||||
ed.ListOfMetaData.push_back(meta);
|
cl.ListOfMetaData.push_back(meta);
|
||||||
} else {
|
} else {
|
||||||
vlog_error("Level not found");
|
vlog_error("Level not found");
|
||||||
VVV_exit(1);
|
VVV_exit(1);
|
||||||
|
@ -635,8 +638,8 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
game.loadcustomlevelstats();
|
game.loadcustomlevelstats();
|
||||||
game.customleveltitle=ed.ListOfMetaData[game.playcustomlevel].title;
|
game.customleveltitle=cl.ListOfMetaData[game.playcustomlevel].title;
|
||||||
game.customlevelfilename=ed.ListOfMetaData[game.playcustomlevel].filename;
|
game.customlevelfilename=cl.ListOfMetaData[game.playcustomlevel].filename;
|
||||||
if (savefileplaytest) {
|
if (savefileplaytest) {
|
||||||
game.playx = savex;
|
game.playx = savex;
|
||||||
game.playy = savey;
|
game.playy = savey;
|
||||||
|
|
Loading…
Reference in a new issue