Erwan
- fixed bugs introduced in revision 2034 (Giant Growth) - Extended Story mode xml: much easier to write basic thing, font selection, possibility to position answers, answers now in correct order - moved story in the menu because it is not major for now
This commit is contained in:
@@ -41,7 +41,6 @@
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include "Vector2D.h"
|
#include "Vector2D.h"
|
||||||
|
|
||||||
#define USING_MATH_TABLE
|
#define USING_MATH_TABLE
|
||||||
@@ -532,7 +531,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
void LoadJPG(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT);
|
void LoadJPG(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT);
|
||||||
void LoadPNG(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT);
|
int LoadPNG(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT);
|
||||||
void LoadGIF(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT);
|
void LoadGIF(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT);
|
||||||
int image_readgif(void * handle, TextureInfo &textureInfo, DWORD * bgcolor, InputFunc readFunc,int mode = 0, int TextureFormat = TEXTURE_FORMAT);
|
int image_readgif(void * handle, TextureInfo &textureInfo, DWORD * bgcolor, InputFunc readFunc,int mode = 0, int TextureFormat = TEXTURE_FORMAT);
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,13 @@
|
|||||||
|
|
||||||
#define MAX_CHANNEL 128
|
#define MAX_CHANNEL 128
|
||||||
|
|
||||||
|
enum {
|
||||||
|
JGE_ERR_CANT_OPEN_FILE = -1,
|
||||||
|
JGE_ERR_PNG = -2,
|
||||||
|
JGE_ERR_MALLOC_FAILED = -4,
|
||||||
|
JGE_ERR_GENERIC = -5,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#ifndef M_PI
|
#ifndef M_PI
|
||||||
#define M_PI 3.14159265358979323846f
|
#define M_PI 3.14159265358979323846f
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
#include "../include/JGE.h"
|
#include "../include/JGE.h"
|
||||||
#include "../include/JFileSystem.h"
|
#include "../include/JFileSystem.h"
|
||||||
|
#include "../include/JLogger.h"
|
||||||
#include "tinyxml/tinyxml.h"
|
#include "tinyxml/tinyxml.h"
|
||||||
#include "unzip/unzip.h"
|
#include "unzip/unzip.h"
|
||||||
|
|
||||||
@@ -155,6 +156,8 @@ bool JFileSystem::OpenFile(const string &filename)
|
|||||||
{
|
{
|
||||||
|
|
||||||
string path = mResourceRoot + filename;
|
string path = mResourceRoot + filename;
|
||||||
|
JLOG("JFileSystem::OpenFile");
|
||||||
|
JLOG(path.c_str());
|
||||||
|
|
||||||
if (mZipAvailable && mZipFile != NULL)
|
if (mZipAvailable && mZipFile != NULL)
|
||||||
{
|
{
|
||||||
|
|||||||
+22
-85
@@ -19,6 +19,7 @@
|
|||||||
#include <pspdisplay.h>
|
#include <pspdisplay.h>
|
||||||
#include <png.h>
|
#include <png.h>
|
||||||
#include "../include/vram.h"
|
#include "../include/vram.h"
|
||||||
|
#include "../include/JLogger.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -39,58 +40,6 @@ static unsigned int __attribute__((aligned(16))) list[262144];
|
|||||||
|
|
||||||
extern void SwizzlePlot(u8* out, PIXEL_TYPE color, int i, int j, unsigned int width);
|
extern void SwizzlePlot(u8* out, PIXEL_TYPE color, int i, int j, unsigned int width);
|
||||||
|
|
||||||
/*
|
|
||||||
//START PurpleScreen Debug
|
|
||||||
int JRenderer::debugged = 0;
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
unsigned int* start;
|
|
||||||
unsigned int* current;
|
|
||||||
int parent_context;
|
|
||||||
} GuDisplayList;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
GuDisplayList list;
|
|
||||||
int scissor_enable;
|
|
||||||
int scissor_start[2];
|
|
||||||
int scissor_end[2];
|
|
||||||
int near_plane;
|
|
||||||
int far_plane;
|
|
||||||
int depth_offset;
|
|
||||||
int fragment_2x;
|
|
||||||
int texture_function;
|
|
||||||
int texture_proj_map_mode;
|
|
||||||
int texture_map_mode;
|
|
||||||
int sprite_mode[4];
|
|
||||||
unsigned int clear_color;
|
|
||||||
unsigned int clear_stencil;
|
|
||||||
unsigned int clear_depth;
|
|
||||||
int texture_mode;
|
|
||||||
} GuContext;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
int pixel_size;
|
|
||||||
int frame_width;
|
|
||||||
void* frame_buffer;
|
|
||||||
void* disp_buffer;
|
|
||||||
void* depth_buffer;
|
|
||||||
int depth_width;
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
} GuDrawBuffer;
|
|
||||||
|
|
||||||
extern int gu_curr_context;
|
|
||||||
extern GuDrawBuffer gu_draw_buffer;
|
|
||||||
extern GuContext gu_contexts[3];
|
|
||||||
extern GuDisplayList* gu_list;
|
|
||||||
|
|
||||||
|
|
||||||
//END PurpleScreen Debug
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
void Swap(float *a, float *b)
|
void Swap(float *a, float *b)
|
||||||
{
|
{
|
||||||
float n=*a;
|
float n=*a;
|
||||||
@@ -98,8 +47,6 @@ void Swap(float *a, float *b)
|
|||||||
*b = n;
|
*b = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
JQuad::JQuad(JTexture *tex, float x, float y, float width, float height)
|
JQuad::JQuad(JTexture *tex, float x, float y, float width, float height)
|
||||||
:mTex(tex), mX(x), mY(y), mWidth(width), mHeight(height)
|
:mTex(tex), mX(x), mY(y), mWidth(width), mHeight(height)
|
||||||
{
|
{
|
||||||
@@ -402,30 +349,6 @@ void JRenderer::EndScene()
|
|||||||
|
|
||||||
mCurrentTex = -1;
|
mCurrentTex = -1;
|
||||||
mCurrentBlend = -1;
|
mCurrentBlend = -1;
|
||||||
|
|
||||||
/*
|
|
||||||
//START PurpleScreen Debug
|
|
||||||
if (!debugged){
|
|
||||||
debugged = 1;
|
|
||||||
FILE * pFile;
|
|
||||||
pFile = fopen ("graphiclog.txt","w");
|
|
||||||
char temp[4096];
|
|
||||||
sprintf(temp,"fbp0:%p\nfbp1:%p\nBuffer Format:%d\nFrame Buffer Width:%d\nScreen Width:%d\nScreen Height:%d\n",fbp0,fbp1,BUFFER_FORMAT,FRAME_BUFFER_WIDTH,SCREEN_WIDTH,SCREEN_HEIGHT);
|
|
||||||
fputs(temp,pFile);
|
|
||||||
sprintf(temp,"\nDRAW BUFFER:\npixel_size:%d\nframe_width:%d\nframe_buffer:%p\n",gu_draw_buffer.pixel_size,gu_draw_buffer.frame_width,gu_draw_buffer.frame_buffer);
|
|
||||||
fputs(temp,pFile);
|
|
||||||
sprintf(temp,"disp_buffer:%p\ndepth_buffer:%p\ndepth_width:%d\nwidth:%d\nheight:%d\n",gu_draw_buffer.disp_buffer,gu_draw_buffer.depth_buffer,gu_draw_buffer.depth_width,gu_draw_buffer.width,gu_draw_buffer.height);
|
|
||||||
fputs(temp,pFile);
|
|
||||||
|
|
||||||
GuContext gc = gu_contexts[gu_curr_context];
|
|
||||||
|
|
||||||
sprintf(temp,"\nGU CONTEXT:\nscissor_enable:%d\ndepth_offset:%d\nfragment_2x:%d\ntexture_function:%d\ntexture_mode:%d\n",gc.scissor_enable,gc.depth_offset,gc.fragment_2x,gc.texture_function,gc.texture_mode);
|
|
||||||
fputs(temp,pFile);
|
|
||||||
fclose (pFile);
|
|
||||||
}
|
|
||||||
//END PurpleScreen Debug
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1039,6 +962,7 @@ int JRenderer::PixelSize(int textureMode){
|
|||||||
|
|
||||||
void JRenderer::LoadJPG(TextureInfo &textureInfo, const char *filename, int mode, int textureMode)
|
void JRenderer::LoadJPG(TextureInfo &textureInfo, const char *filename, int mode, int textureMode)
|
||||||
{
|
{
|
||||||
|
JLOG("JRenderer::LoadJPG");
|
||||||
textureInfo.mBits = NULL;
|
textureInfo.mBits = NULL;
|
||||||
char filenamenew[4096];
|
char filenamenew[4096];
|
||||||
#ifdef RESPATH
|
#ifdef RESPATH
|
||||||
@@ -1241,15 +1165,19 @@ void JRenderer::LoadJPG(TextureInfo &textureInfo, const char *filename, int mode
|
|||||||
|
|
||||||
jpeg_destroy_decompress(&cinfo);
|
jpeg_destroy_decompress(&cinfo);
|
||||||
delete [] rawdata;
|
delete [] rawdata;
|
||||||
|
JLOG("-- OK -- JRenderer::LoadJPG");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
JTexture* JRenderer::LoadTexture(const char* filename, int mode, int textureMode)
|
JTexture* JRenderer::LoadTexture(const char* filename, int mode, int textureMode)
|
||||||
{
|
{
|
||||||
|
JLOG("JRenderer::LoadTexture");
|
||||||
TextureInfo textureInfo;
|
TextureInfo textureInfo;
|
||||||
textureInfo.mVRAM = false;
|
textureInfo.mVRAM = false;
|
||||||
textureInfo.mBits = NULL;
|
textureInfo.mBits = NULL;
|
||||||
|
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
if (strstr(filename, ".jpg")!=NULL || strstr(filename, ".JPG")!=NULL)
|
if (strstr(filename, ".jpg")!=NULL || strstr(filename, ".JPG")!=NULL)
|
||||||
LoadJPG(textureInfo, filename, mode, textureMode);
|
LoadJPG(textureInfo, filename, mode, textureMode);
|
||||||
else if(strstr(filename, ".gif")!=NULL || strstr(filename, ".GIF")!=NULL) {
|
else if(strstr(filename, ".gif")!=NULL || strstr(filename, ".GIF")!=NULL) {
|
||||||
@@ -1258,7 +1186,12 @@ JTexture* JRenderer::LoadTexture(const char* filename, int mode, int textureMode
|
|||||||
}
|
}
|
||||||
else if(strstr(filename, ".png")!=NULL || strstr(filename, ".PNG")!=NULL) {
|
else if(strstr(filename, ".png")!=NULL || strstr(filename, ".PNG")!=NULL) {
|
||||||
textureMode = TEXTURE_FORMAT; //textureMode not supported in PNG yet
|
textureMode = TEXTURE_FORMAT; //textureMode not supported in PNG yet
|
||||||
LoadPNG(textureInfo, filename, mode, textureMode);
|
ret = LoadPNG(textureInfo, filename, mode, textureMode);
|
||||||
|
if (ret < 0) {
|
||||||
|
char buf[512];
|
||||||
|
sprintf(buf, "--LoadPNG sent error code: %i for file %s", ret, filename);
|
||||||
|
JLOG(buf);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (textureInfo.mBits == NULL)
|
if (textureInfo.mBits == NULL)
|
||||||
@@ -1290,6 +1223,7 @@ JTexture* JRenderer::LoadTexture(const char* filename, int mode, int textureMode
|
|||||||
SAFE_DELETE(tex);
|
SAFE_DELETE(tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JLOG("-- OK -- JRenderer::LoadTexture");
|
||||||
return tex;
|
return tex;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1300,8 +1234,9 @@ JTexture* JRenderer::LoadTexture(const char* filename, int mode, int textureMode
|
|||||||
// http://svn.ps2dev.org/filedetails.php?repname=psp&path=/trunk/libpng/screenshot/main.c&rev=0&sc=0
|
// http://svn.ps2dev.org/filedetails.php?repname=psp&path=/trunk/libpng/screenshot/main.c&rev=0&sc=0
|
||||||
// Load PNG as texture
|
// Load PNG as texture
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
void JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode, int textureMode)
|
int JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode, int textureMode)
|
||||||
{
|
{
|
||||||
|
JLOG("JRenderer::LoadPNG");
|
||||||
textureInfo.mBits = NULL;
|
textureInfo.mBits = NULL;
|
||||||
|
|
||||||
bool useVideoRAM = (mode == TEX_TYPE_USE_VRAM);
|
bool useVideoRAM = (mode == TEX_TYPE_USE_VRAM);
|
||||||
@@ -1317,19 +1252,19 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode
|
|||||||
u32* line;
|
u32* line;
|
||||||
|
|
||||||
JFileSystem* fileSystem = JFileSystem::GetInstance();
|
JFileSystem* fileSystem = JFileSystem::GetInstance();
|
||||||
if (!fileSystem->OpenFile(filename)) return;
|
if (!fileSystem->OpenFile(filename)) return JGE_ERR_CANT_OPEN_FILE;
|
||||||
|
|
||||||
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
||||||
if (png_ptr == NULL) {
|
if (png_ptr == NULL) {
|
||||||
fileSystem->CloseFile();
|
fileSystem->CloseFile();
|
||||||
return;
|
return JGE_ERR_PNG;
|
||||||
}
|
}
|
||||||
png_set_error_fn(png_ptr, (png_voidp) NULL, (png_error_ptr) NULL, PNGCustomWarningFn);
|
png_set_error_fn(png_ptr, (png_voidp) NULL, (png_error_ptr) NULL, PNGCustomWarningFn);
|
||||||
info_ptr = png_create_info_struct(png_ptr);
|
info_ptr = png_create_info_struct(png_ptr);
|
||||||
if (info_ptr == NULL) {
|
if (info_ptr == NULL) {
|
||||||
fileSystem->CloseFile();
|
fileSystem->CloseFile();
|
||||||
png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
|
png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
|
||||||
return;
|
return JGE_ERR_PNG;
|
||||||
}
|
}
|
||||||
png_init_io(png_ptr, NULL);
|
png_init_io(png_ptr, NULL);
|
||||||
png_set_read_fn(png_ptr, (png_voidp)fileSystem, PNGCustomReadDataFn);
|
png_set_read_fn(png_ptr, (png_voidp)fileSystem, PNGCustomReadDataFn);
|
||||||
@@ -1347,7 +1282,7 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode
|
|||||||
if (!line) {
|
if (!line) {
|
||||||
fileSystem->CloseFile();
|
fileSystem->CloseFile();
|
||||||
png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
|
png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
|
||||||
return;
|
return JGE_ERR_MALLOC_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
int texWidth = getNextPower2(width);
|
int texWidth = getNextPower2(width);
|
||||||
@@ -1440,7 +1375,8 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode
|
|||||||
textureInfo.mTexWidth = texWidth;
|
textureInfo.mTexWidth = texWidth;
|
||||||
textureInfo.mTexHeight = texHeight;
|
textureInfo.mTexHeight = texHeight;
|
||||||
textureInfo.mVRAM = videoRAMUsed;
|
textureInfo.mVRAM = videoRAMUsed;
|
||||||
|
JLOG("-- OK -- JRenderer::LoadPNG");
|
||||||
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1452,6 +1388,7 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode
|
|||||||
vfree(bits);
|
vfree(bits);
|
||||||
else
|
else
|
||||||
free(bits);
|
free(bits);
|
||||||
|
return JGE_ERR_GENERIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -361,6 +361,9 @@ void Run()
|
|||||||
// The main loop
|
// The main loop
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
|
#ifdef DOJLOG
|
||||||
|
remove(JGE_LOG_FILE);
|
||||||
|
#endif
|
||||||
JLOG("SetupCallbacks()");
|
JLOG("SetupCallbacks()");
|
||||||
SetupCallbacks();
|
SetupCallbacks();
|
||||||
#ifdef DEVHOOK
|
#ifdef DEVHOOK
|
||||||
|
|||||||
+7
-62
@@ -813,7 +813,7 @@ JTexture* JRenderer::LoadTexture(const char* filename, int mode, int TextureForm
|
|||||||
return tex;
|
return tex;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JRenderer::LoadPNG(TextureInfo &textureInfo, const char *filename, int mode __attribute__((unused)), int TextureFormat __attribute__((unused)))
|
int JRenderer::LoadPNG(TextureInfo &textureInfo, const char *filename, int mode __attribute__((unused)), int TextureFormat __attribute__((unused)))
|
||||||
{
|
{
|
||||||
//TextureInfo* textureInfo = new TextureInfo;
|
//TextureInfo* textureInfo = new TextureInfo;
|
||||||
|
|
||||||
@@ -836,7 +836,7 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char *filename, int mode
|
|||||||
|
|
||||||
//if ((fp = fopen(filename, "rb")) == NULL) return NULL;
|
//if ((fp = fopen(filename, "rb")) == NULL) return NULL;
|
||||||
JFileSystem* fileSystem = JFileSystem::GetInstance();
|
JFileSystem* fileSystem = JFileSystem::GetInstance();
|
||||||
if (!fileSystem->OpenFile(filename)) return;
|
if (!fileSystem->OpenFile(filename)) return JGE_ERR_CANT_OPEN_FILE;
|
||||||
|
|
||||||
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
@@ -844,7 +844,7 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char *filename, int mode
|
|||||||
//fclose(fp);
|
//fclose(fp);
|
||||||
fileSystem->CloseFile();
|
fileSystem->CloseFile();
|
||||||
|
|
||||||
return;
|
return JGE_ERR_PNG;
|
||||||
}
|
}
|
||||||
|
|
||||||
png_set_error_fn(png_ptr, (png_voidp) NULL, (png_error_ptr) NULL, PNGCustomWarningFn);
|
png_set_error_fn(png_ptr, (png_voidp) NULL, (png_error_ptr) NULL, PNGCustomWarningFn);
|
||||||
@@ -856,7 +856,7 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char *filename, int mode
|
|||||||
|
|
||||||
png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
|
png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
|
||||||
|
|
||||||
return;
|
return JGE_ERR_PNG;
|
||||||
}
|
}
|
||||||
png_init_io(png_ptr, NULL);
|
png_init_io(png_ptr, NULL);
|
||||||
png_set_read_fn(png_ptr, (png_voidp)fileSystem, PNGCustomReadDataFn);
|
png_set_read_fn(png_ptr, (png_voidp)fileSystem, PNGCustomReadDataFn);
|
||||||
@@ -878,7 +878,7 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char *filename, int mode
|
|||||||
fileSystem->CloseFile();
|
fileSystem->CloseFile();
|
||||||
|
|
||||||
png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
|
png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
|
||||||
return;
|
return JGE_ERR_MALLOC_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -893,23 +893,9 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char *filename, int mode
|
|||||||
|
|
||||||
if (buffer)
|
if (buffer)
|
||||||
{
|
{
|
||||||
// tex->mFilter = TEX_FILTER_LINEAR;
|
|
||||||
// tex->mWidth = width;
|
|
||||||
// tex->mHeight = height;
|
|
||||||
// tex->mTexWidth = tw;
|
|
||||||
// tex->mTexHeight = th;
|
|
||||||
|
|
||||||
// GLuint texid;
|
|
||||||
// glGenTextures(1, &texid);
|
|
||||||
// tex->mTexId = texid;
|
|
||||||
|
|
||||||
// if (texid != 0)
|
p32 = (DWORD*) buffer;
|
||||||
{
|
|
||||||
|
|
||||||
// OpenGL texture has (0,0) at lower-left
|
|
||||||
// Pay attention when doing texture mapping!!!
|
|
||||||
|
|
||||||
p32 = (DWORD*) buffer;// + (height-1)*width;
|
|
||||||
|
|
||||||
for (y = 0; y < (int)height; y++)
|
for (y = 0; y < (int)height; y++)
|
||||||
{
|
{
|
||||||
@@ -917,7 +903,6 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char *filename, int mode
|
|||||||
for (x = 0; x < (int)width; x++)
|
for (x = 0; x < (int)width; x++)
|
||||||
{
|
{
|
||||||
DWORD color32 = line[x];
|
DWORD color32 = line[x];
|
||||||
//u16 color16;
|
|
||||||
int a = (color32 >> 24) & 0xff;
|
int a = (color32 >> 24) & 0xff;
|
||||||
int r = color32 & 0xff;
|
int r = color32 & 0xff;
|
||||||
int g = (color32 >> 8) & 0xff;
|
int g = (color32 >> 8) & 0xff;
|
||||||
@@ -931,40 +916,8 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char *filename, int mode
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// glBindTexture(GL_TEXTURE_2D, texid); // Bind To The Texture ID
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// if (mode == TEX_TYPE_MIPMAP) // generate mipmaps
|
|
||||||
// {
|
|
||||||
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
|
||||||
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
|
||||||
// glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
|
|
||||||
// glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_LINEAR);
|
|
||||||
// gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, tw, th, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
|
|
||||||
// }
|
|
||||||
// else if (mode == TEX_TYPE_SKYBOX) // for skybox
|
|
||||||
// {
|
|
||||||
// #define GL_CLAMP_TO_EDGE 0x812F
|
|
||||||
//
|
|
||||||
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
|
||||||
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
|
||||||
// gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, tw, th, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
|
|
||||||
// }
|
|
||||||
// else // single texture
|
|
||||||
// {
|
|
||||||
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
|
||||||
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
|
||||||
// glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
|
|
||||||
// glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
|
|
||||||
// glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tw, th, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// ret = TRUE;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete buffer;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -973,17 +926,8 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char *filename, int mode
|
|||||||
png_read_end(png_ptr, info_ptr);
|
png_read_end(png_ptr, info_ptr);
|
||||||
png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL);
|
png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL);
|
||||||
|
|
||||||
//fclose(fp);
|
|
||||||
fileSystem->CloseFile();
|
fileSystem->CloseFile();
|
||||||
|
|
||||||
// if (!ret)
|
|
||||||
// {
|
|
||||||
// if (tex)
|
|
||||||
// delete tex;
|
|
||||||
// tex = NULL;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return tex;
|
|
||||||
|
|
||||||
textureInfo.mBits = buffer;
|
textureInfo.mBits = buffer;
|
||||||
textureInfo.mWidth = width;
|
textureInfo.mWidth = width;
|
||||||
@@ -991,6 +935,7 @@ void JRenderer::LoadPNG(TextureInfo &textureInfo, const char *filename, int mode
|
|||||||
textureInfo.mTexWidth = tw;
|
textureInfo.mTexWidth = tw;
|
||||||
textureInfo.mTexHeight = th;
|
textureInfo.mTexHeight = th;
|
||||||
|
|
||||||
|
return 1;
|
||||||
//return textureInfo;
|
//return textureInfo;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,25 +2,26 @@
|
|||||||
|
|
||||||
<page id="start">
|
<page id="start">
|
||||||
<type>dialog</type>
|
<type>dialog</type>
|
||||||
<text align="center">WELCOME YOUNG ADVENTURER...</text>
|
<title>WELCOME YOUNG ADVENTURER...</title>
|
||||||
<img y="15">_gfx/shopkeeper.jpg</img>
|
<img>_gfx/shopkeeper.jpg</img>
|
||||||
<text y="115">So you want to become a sorcerer?</text>
|
<text>So you want to become a sorcerer?</text>
|
||||||
<text y="130">You've come to the right place. I'm myself just</text>
|
<text>You've come to the right place. I'm myself just</text>
|
||||||
<text y="145">a humble retailer, but I've met a lot of adventurers like you</text>
|
<text>a humble retailer, but I've met a lot of adventurers like you</text>
|
||||||
<text y="160">in my life, enough to understand the basics of their craft...</text>
|
<text>in my life, enough to understand the basics of their craft...</text>
|
||||||
|
|
||||||
<answer goto="tap_mana_intro">Interested?</answer>
|
<answer goto="tap_mana_intro" align="center" x="0.30" font="1">I want to know more</answer>
|
||||||
|
<answer goto="tap_mana_intro" x="0.80" y="-1">Take me back to the menu</answer>
|
||||||
</page>
|
</page>
|
||||||
|
|
||||||
<page id="tap_mana_intro">
|
<page id="tap_mana_intro">
|
||||||
<type>dialog</type>
|
<type>dialog</type>
|
||||||
<text align="center">TAPPING LANDS FOR MANA</text>
|
<title>TAPPING LANDS FOR MANA</title>
|
||||||
<text y="15">In your quests you will have to fight against other wizards.</text>
|
<text>In your quests you will have to fight against other wizards.</text>
|
||||||
<text y="30">You will only have your brain and your spells to help you.</text>
|
<text>You will only have your brain and your spells to help you.</text>
|
||||||
<text y="45">The basic Energy to cast your spells in Wagic is called mana.</text>
|
<text>The basic Energy to cast your spells in Wagic is called mana.</text>
|
||||||
<text y="60">The most frequent sources of Mana are called "Lands".</text>
|
<text>The most frequent sources of Mana are called "Lands".</text>
|
||||||
<text y="90">For a land to produce mana,</text>
|
<text>For a land to produce mana,</text>
|
||||||
<text y="105">you just have to click on it with the action button (CIRCLE by default)</text>
|
<text>you just have to click on it with the action button (CIRCLE by default)</text>
|
||||||
<answer goto="tap_mana">Go ahead and tap some mana!</answer>
|
<answer goto="tap_mana">Go ahead and tap some mana!</answer>
|
||||||
</page>
|
</page>
|
||||||
|
|
||||||
@@ -32,22 +33,22 @@
|
|||||||
|
|
||||||
<page id="tap_mana_try_again">
|
<page id="tap_mana_try_again">
|
||||||
<type>dialog</type>
|
<type>dialog</type>
|
||||||
<text align="center">HMMM...</text>
|
<title>HMMM...</title>
|
||||||
<text y="15">It seems you didn't get that right</text>
|
<text>It seems you didn't get that right</text>
|
||||||
<text y="30">Simply navigate (with the D-Pad) to the land that appears on your screen,</text>
|
<text>Simply navigate (with the D-Pad) to the land that appears on your screen,</text>
|
||||||
<text y="45">then click on the action button (CIRCLE by default)</text>
|
<text>then click on the action button (CIRCLE by default)</text>
|
||||||
<answer goto="tap_mana">Let's try again!</answer>
|
<answer goto="tap_mana">Let's try again!</answer>
|
||||||
</page>
|
</page>
|
||||||
|
|
||||||
<page id="tap_mana_ok">
|
<page id="tap_mana_ok">
|
||||||
<type>dialog</type>
|
<type>dialog</type>
|
||||||
<text align="center">WELL DONE...NOW LET'S CAST A SPELL</text>
|
<title>WELL DONE...NOW LET'S CAST A SPELL</title>
|
||||||
<text y="15">That was too easy for you!</text>
|
<text>That was too easy for you!</text>
|
||||||
<text y="30">Now let's see if you can cast a spell...</text>
|
<text>Now let's see if you can cast a spell...</text>
|
||||||
<text y="45">Spells have a cost represented by mana symbols on the top right corner</text>
|
<text>Spells have a cost represented by mana symbols on the top right corner</text>
|
||||||
<text y="60">of the card. For example, 2 white mana icons on the top right of the card</text>
|
<text>of the card. For example, 2 white mana icons on the top right of the card</text>
|
||||||
<text y="75">means that you have to produce 2 white manas (by activating 2 plains)</text>
|
<text>means that you have to produce 2 white manas (by activating 2 plains)</text>
|
||||||
<text y="90">in order to put it into play.</text>
|
<text>in order to put it into play.</text>
|
||||||
<answer goto="cast_spell_1">Try to produce 2 white mana and put a white knight in play</answer>
|
<answer goto="cast_spell_1">Try to produce 2 white mana and put a white knight in play</answer>
|
||||||
</page>
|
</page>
|
||||||
|
|
||||||
@@ -59,24 +60,24 @@
|
|||||||
|
|
||||||
<page id="cast_spell_1_try_again">
|
<page id="cast_spell_1_try_again">
|
||||||
<type>dialog</type>
|
<type>dialog</type>
|
||||||
<text align="center">HMMM...</text>
|
<title>HMMM...</title>
|
||||||
<text y="15">It seems you didn't get that right</text>
|
<text>It seems you didn't get that right</text>
|
||||||
<text y="30">Simply navigate (with the D-Pad) to the lands that appear on your screen,</text>
|
<text>Simply navigate (with the D-Pad) to the lands that appear on your screen,</text>
|
||||||
<text y="45">then click on the action button (CIRCLE by default) on each of them to produce 2 white mana.</text>
|
<text>then click on the action button (CIRCLE by default) on each of them to produce 2 white mana.</text>
|
||||||
<text y="60">Once this is done, navigate to the White Knight in your hand and click (CIRCLE by default) on it.</text>
|
<text>Once this is done, navigate to the White Knight in your hand and click (CIRCLE by default) on it.</text>
|
||||||
<text y="75">Depending on your configuration, you might need to display your hand (RTRIGGER by default)</text>
|
<text>Depending on your configuration, you might need to display your hand (RTRIGGER by default)</text>
|
||||||
<answer goto="cast_spell_1">Let's try again!</answer>
|
<answer goto="cast_spell_1">Let's try again!</answer>
|
||||||
</page>
|
</page>
|
||||||
|
|
||||||
<page id="cast_spell_1_ok">
|
<page id="cast_spell_1_ok">
|
||||||
<type>dialog</type>
|
<type>dialog</type>
|
||||||
<text align="center">PERFECT...BUT THERE'S MORE TO IT</text>
|
<title>PERFECT...BUT THERE'S MORE TO IT</title>
|
||||||
<text y="15">You did great, young adventurer!</text>
|
<text>You did great, young adventurer!</text>
|
||||||
<text y="30">But you will see that some spells have slighlty different costs.</text>
|
<text>But you will see that some spells have slighlty different costs.</text>
|
||||||
<text y="45">Sometimes the cost contains a number with no mana color. It means you can</text>
|
<text>Sometimes the cost contains a number with no mana color. It means you can</text>
|
||||||
<text y="60">pay with mana of whatever color you want.</text>
|
<text>pay with mana of whatever color you want.</text>
|
||||||
<text y="75">for example a card which cost has a number "1" and a green icon</text>
|
<text>for example a card which cost has a number "1" and a green icon</text>
|
||||||
<text y="90">needs you to pay 1 green mana + a mana of any color if you want to play it.</text>
|
<text>needs you to pay 1 green mana + a mana of any color if you want to play it.</text>
|
||||||
<answer goto="cast_spell_2">Try to put a grizzly bear card in play.</answer>
|
<answer goto="cast_spell_2">Try to put a grizzly bear card in play.</answer>
|
||||||
</page>
|
</page>
|
||||||
|
|
||||||
@@ -88,25 +89,25 @@
|
|||||||
|
|
||||||
<page id="cast_spell_2_try_again">
|
<page id="cast_spell_2_try_again">
|
||||||
<type>dialog</type>
|
<type>dialog</type>
|
||||||
<text align="center">HMMM...</text>
|
<title>HMMM...</title>
|
||||||
<text y="15">It seems you didn't get that right</text>
|
<text>It seems you didn't get that right</text>
|
||||||
<text y="30">Simply navigate (with the D-Pad) to the lands that appear on your screen,</text>
|
<text>Simply navigate (with the D-Pad) to the lands that appear on your screen,</text>
|
||||||
<text y="45">then click on the action button (CIRCLE by default) on some of them to produce some mana.</text>
|
<text>then click on the action button (CIRCLE by default) on some of them to produce some mana.</text>
|
||||||
<text y="60">Remember, you need 1 green mana and one other mana of any color.</text>
|
<text>Remember, you need 1 green mana and one other mana of any color.</text>
|
||||||
<text y="75">Once this is done, navigate to the Grizzly Bears in your hand and click (CIRCLE by default) on it.</text>
|
<text>Once this is done, navigate to the Grizzly Bears in your hand and click (CIRCLE by default) on it.</text>
|
||||||
<answer goto="cast_spell_2">Let's try again!</answer>
|
<answer goto="cast_spell_2">Let's try again!</answer>
|
||||||
</page>
|
</page>
|
||||||
|
|
||||||
<page id="cast_spell_2_ok">
|
<page id="cast_spell_2_ok">
|
||||||
<type>dialog</type>
|
<type>dialog</type>
|
||||||
<text align="center">GREAT. NOW LET'S TALK ABOUT PHASES</text>
|
<title>GREAT. NOW LET'S TALK ABOUT PHASES</title>
|
||||||
<text y="15">Once you put them into play, you will want your creatures to attack your opponent.</text>
|
<text>Once you put them into play, you will want your creatures to attack your opponent.</text>
|
||||||
<text y="30">After all, they are here to help you defeat other sorcerers!</text>
|
<text>After all, they are here to help you defeat other sorcerers!</text>
|
||||||
<text y="45">Your creatures can't attack anytime they want, however,</text>
|
<text>Your creatures can't attack anytime they want, however,</text>
|
||||||
<text y="60">they must wait for the combat phase of your turn.</text>
|
<text>they must wait for the combat phase of your turn.</text>
|
||||||
<text y="75">Your turn is divided into several phases. You can go through the phases by</text>
|
<text>Your turn is divided into several phases. You can go through the phases by</text>
|
||||||
<text y="90">clicking on LTRIGGER by default. The name of the current phase is displayed on the</text>
|
<text>clicking on LTRIGGER by default. The name of the current phase is displayed on the</text>
|
||||||
<text y="105">top right corner of the screen.</text>
|
<text>top right corner of the screen.</text>
|
||||||
|
|
||||||
<answer goto="attack">Go to the "Attackers" phase, then click on your White Knight to attack.</answer>
|
<answer goto="attack">Go to the "Attackers" phase, then click on your White Knight to attack.</answer>
|
||||||
</page>
|
</page>
|
||||||
@@ -119,31 +120,31 @@
|
|||||||
|
|
||||||
<page id="attack_try_again">
|
<page id="attack_try_again">
|
||||||
<type>dialog</type>
|
<type>dialog</type>
|
||||||
<text align="center">HMMM...</text>
|
<title>HMMM...</title>
|
||||||
<text y="15">It seems you didn't get that right</text>
|
<text>It seems you didn't get that right</text>
|
||||||
<text y="30">Go to the "Attackers" phase by clicking on LTRIGGER several times,</text>
|
<text>Go to the "Attackers" phase by clicking on LTRIGGER several times,</text>
|
||||||
<text y="45">then click on your White Knight (with CIRCLE by default) to attack your opponent.</text>
|
<text>then click on your White Knight (with CIRCLE by default) to attack your opponent.</text>
|
||||||
<answer goto="attack">Let's try again!</answer>
|
<answer goto="attack">Let's try again!</answer>
|
||||||
</page>
|
</page>
|
||||||
|
|
||||||
<page id="attack_ok">
|
<page id="attack_ok">
|
||||||
<type>dialog</type>
|
<type>dialog</type>
|
||||||
<text align="center">GOOD!</text>
|
<title>GOOD!</title>
|
||||||
<text y="15">Let me tell you a bit more about phases.</text>
|
<text>Let me tell you a bit more about phases.</text>
|
||||||
<text y="30">Your turn is divided into several phases. The actions you can perform</text>
|
<text>Your turn is divided into several phases. The actions you can perform</text>
|
||||||
<text y="45">Depend on the phase you're in. For now, let's say that you can:</text>
|
<text>Depend on the phase you're in. For now, let's say that you can:</text>
|
||||||
<text y="60">- Play creatures during the "main phase 1" and the "main phase 2" phases of your turn.</text>
|
<text>- Play creatures during the "main phase 1" and the "main phase 2" phases of your turn.</text>
|
||||||
<text y="75">- Attack with your creatures during the "Attackers" phase of your turn.</text>
|
<text>- Attack with your creatures during the "Attackers" phase of your turn.</text>
|
||||||
<text y="90">- Block your opponent's attacking creatures during the "blockers" phase of his turn.</text>
|
<text>- Block your opponent's attacking creatures during the "blockers" phase of his turn.</text>
|
||||||
<text y="120">There are lots of other phases but we'll discuss them later</text>
|
<text>There are lots of other phases but we'll discuss them later</text>
|
||||||
|
|
||||||
<answer goto="End">Continue</answer>
|
<answer goto="End">Continue</answer>
|
||||||
</page>
|
</page>
|
||||||
|
|
||||||
<page id="End">
|
<page id="End">
|
||||||
<type>End</type>
|
<type>End</type>
|
||||||
<text align="center">CONGRATULATIONS!</text>
|
<title>CONGRATULATIONS!</title>
|
||||||
<text y="15">This is the end of this tutorial,</text>
|
<text>This is the end of this tutorial,</text>
|
||||||
<text y="30">now time for you to fight some real ennemies!</text>
|
<text>now time for you to fight some real ennemies!</text>
|
||||||
<text y="60">Click on the action button to go back to the main menu</text>
|
<text>Click on the action button to go back to the main menu</text>
|
||||||
</page>
|
</page>
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
Documentation for the Basic campaign system in Wagic
|
||||||
|
|
||||||
|
Each subfolder that contains a "story.xml" is considered as a "story". Stories appear in the menu and represent
|
||||||
|
a series of dialogs and duels.
|
||||||
|
|
||||||
|
#################################
|
||||||
|
1.Structure of story.xml:
|
||||||
|
#################################
|
||||||
|
|
||||||
|
===========================================
|
||||||
|
Elements of the root node
|
||||||
|
===========================================
|
||||||
|
|
||||||
|
page *
|
||||||
|
attributes:
|
||||||
|
id (compulsory)
|
||||||
|
|
||||||
|
===========================================
|
||||||
|
Elements of the page node
|
||||||
|
===========================================
|
||||||
|
|
||||||
|
type (dialog,duel,end)
|
||||||
|
|
||||||
|
|
||||||
|
===========================================
|
||||||
|
Additional Elmts of the "page" node if type == dialog
|
||||||
|
===========================================
|
||||||
|
|
||||||
|
title *
|
||||||
|
img *
|
||||||
|
text *
|
||||||
|
answer *
|
||||||
|
|
||||||
|
title, img, text, answer have the following common attributes:
|
||||||
|
x (optional - default 0)
|
||||||
|
0 means auto
|
||||||
|
0 < x < 1 means percentage of screen width
|
||||||
|
other value = absolute position
|
||||||
|
y (optional - default 0)
|
||||||
|
-1 means: go to previous line
|
||||||
|
0 means: auto
|
||||||
|
0 < y < 1 means: percentage of screen height
|
||||||
|
other value = absolute position
|
||||||
|
font (optional - default 0)
|
||||||
|
0, 1, or 2
|
||||||
|
align (optional - default left)
|
||||||
|
left, center, right
|
||||||
|
|
||||||
|
|
||||||
|
font and align not supported by title, which is equivalent to <text font="1" align="center">
|
||||||
|
|
||||||
|
answer specific attributes:
|
||||||
|
goto
|
||||||
|
id of a page to go to
|
||||||
|
|
||||||
|
===========================================
|
||||||
|
Additional Elmts of the "page" node if type == dialog
|
||||||
|
===========================================
|
||||||
|
onwin
|
||||||
|
id of a page to go to if duel lost
|
||||||
|
onlose
|
||||||
|
id of a page to go to if duel won
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#################################
|
||||||
|
2.Duel mode
|
||||||
|
#################################
|
||||||
@@ -8662,7 +8662,7 @@ name=Corpse Hatch
|
|||||||
target=creature[-black]
|
target=creature[-black]
|
||||||
auto=destroy
|
auto=destroy
|
||||||
auto=Token(-193507)*2
|
auto=Token(-193507)*2
|
||||||
text=Destroy target nonblack creature. -- Put two 0/1 colorless Eldrazi Spawn creature tokens onto the battlefield. They have “Sacrifice this creature: Add {1} to your mana pool.”
|
text=Destroy target nonblack creature. -- Put two 0/1 colorless Eldrazi Spawn creature tokens onto the battlefield. They have “Sacrifice this creature: Add {1} to your mana pool.�E
|
||||||
mana={3}{B}{B}
|
mana={3}{B}{B}
|
||||||
type=Sorcery
|
type=Sorcery
|
||||||
[/card]
|
[/card]
|
||||||
@@ -17052,6 +17052,8 @@ toughness=3
|
|||||||
name=Giant Growth
|
name=Giant Growth
|
||||||
text=Target creature gets +3/+3 until end of turn.
|
text=Target creature gets +3/+3 until end of turn.
|
||||||
mana={G}
|
mana={G}
|
||||||
|
target=creature
|
||||||
|
auto=3/3
|
||||||
type=Instant
|
type=Instant
|
||||||
[/card]
|
[/card]
|
||||||
[card]
|
[card]
|
||||||
@@ -18876,7 +18878,7 @@ name=Grizzly Fate
|
|||||||
auto=token(Bear,creature bear, 2/2,green)*2
|
auto=token(Bear,creature bear, 2/2,green)*2
|
||||||
auto=aslongas(*|mygraveyard) token(Bear,creature bear, 2/2,green)*2 >6
|
auto=aslongas(*|mygraveyard) token(Bear,creature bear, 2/2,green)*2 >6
|
||||||
autograveyard={5}{G}{G}:copy(this) && moveTo(mystack) asSorcery
|
autograveyard={5}{G}{G}:copy(this) && moveTo(mystack) asSorcery
|
||||||
text=Put two 2/2 green Bear creature tokens onto the battlefield. -- Threshold — Put four 2/2 green Bear creature tokens onto the battlefield instead if seven or more cards are in your graveyard. -- Flashback {2}{G}{G} (You may cast this card from your graveyard for its flashback cost. Then exile it.)
|
text=Put two 2/2 green Bear creature tokens onto the battlefield. -- Threshold �EPut four 2/2 green Bear creature tokens onto the battlefield instead if seven or more cards are in your graveyard. -- Flashback {2}{G}{G} (You may cast this card from your graveyard for its flashback cost. Then exile it.)
|
||||||
mana={3}{G}{G}
|
mana={3}{G}{G}
|
||||||
type=Sorcery
|
type=Sorcery
|
||||||
[/card]
|
[/card]
|
||||||
@@ -21713,7 +21715,7 @@ type=Enchantment
|
|||||||
name=Ior Ruin Expedition
|
name=Ior Ruin Expedition
|
||||||
auto=@movedTo(land|myBattlefield):may counter(0/0,1,Quest)
|
auto=@movedTo(land|myBattlefield):may counter(0/0,1,Quest)
|
||||||
auto={C(0/0,-3,Quest)}{S}:draw:2
|
auto={C(0/0,-3,Quest)}{S}:draw:2
|
||||||
text=Landfall — Whenever a land enters the battlefield under your control, you may put a quest counter on Ior Ruin Expedition. -- Remove three quest counters from Ior Ruin Expedition and sacrifice it: Draw two cards.
|
text=Landfall �EWhenever a land enters the battlefield under your control, you may put a quest counter on Ior Ruin Expedition. -- Remove three quest counters from Ior Ruin Expedition and sacrifice it: Draw two cards.
|
||||||
mana={1}{U}
|
mana={1}{U}
|
||||||
type=Enchantment
|
type=Enchantment
|
||||||
[/card]
|
[/card]
|
||||||
@@ -43026,7 +43028,7 @@ toughness=1
|
|||||||
name=Sunspring Expedition
|
name=Sunspring Expedition
|
||||||
auto=@movedTo(land|myBattlefield):may counter(0/0,1,Quest)
|
auto=@movedTo(land|myBattlefield):may counter(0/0,1,Quest)
|
||||||
auto={C(0/0,-3,Quest)}{S}:life:8
|
auto={C(0/0,-3,Quest)}{S}:life:8
|
||||||
text=Landfall — Whenever a land enters the battlefield under your control, you may put a quest counter on Sunspring Expedition. -- Remove three quest counters from Sunspring Expedition and sacrifice it: You gain 8 life.
|
text=Landfall �EWhenever a land enters the battlefield under your control, you may put a quest counter on Sunspring Expedition. -- Remove three quest counters from Sunspring Expedition and sacrifice it: You gain 8 life.
|
||||||
mana={W}
|
mana={W}
|
||||||
type=Enchantment
|
type=Enchantment
|
||||||
[/card]
|
[/card]
|
||||||
@@ -46531,7 +46533,7 @@ auto=foreach(other creature[red]|myBattlefield) counter(1/1,1)
|
|||||||
auto=foreach(other creature[green]|myBattlefield) counter(1/1,1)
|
auto=foreach(other creature[green]|myBattlefield) counter(1/1,1)
|
||||||
auto={1}{C(1/1,-1)}:damage:1 target(creature)
|
auto={1}{C(1/1,-1)}:damage:1 target(creature)
|
||||||
auto={1}{C(1/1,-1)}:token(Saproling,Creature Saproling,1/1,green)
|
auto={1}{C(1/1,-1)}:token(Saproling,Creature Saproling,1/1,green)
|
||||||
text=Ulasht, the Hate Seed enters the battlefield with a +1/+1 counter on it for each other red creature you control and a +1/+1 counter on it for each other green creature you control. -- {1}, Remove a +1/+1 counter from Ulasht: Choose one — Ulasht deals 1 damage to target creature; or put a 1/1 green Saproling creature token onto the battlefield.
|
text=Ulasht, the Hate Seed enters the battlefield with a +1/+1 counter on it for each other red creature you control and a +1/+1 counter on it for each other green creature you control. -- {1}, Remove a +1/+1 counter from Ulasht: Choose one �EUlasht deals 1 damage to target creature; or put a 1/1 green Saproling creature token onto the battlefield.
|
||||||
mana={2}{R}{G}
|
mana={2}{R}{G}
|
||||||
type=Legendary Creature
|
type=Legendary Creature
|
||||||
subtype=Hellion Hydra
|
subtype=Hellion Hydra
|
||||||
@@ -46557,7 +46559,7 @@ auto=@damaged(creature,player) from(mytgt):counter(0/0,2,Charge) all(this)
|
|||||||
auto={C(0/0,-1,Charge)}:2/2
|
auto={C(0/0,-1,Charge)}:2/2
|
||||||
auto={C(0/0,-1,Charge)}:-1/-1 target(creature)
|
auto={C(0/0,-1,Charge)}:-1/-1 target(creature)
|
||||||
auto={C(0/0,-1,Charge)}:life:2 controller
|
auto={C(0/0,-1,Charge)}:life:2 controller
|
||||||
text=Whenever equipped creature deals combat damage, put two charge counters on Umezawa's Jitte. -- Remove a charge counter from Umezawa's Jitte: Choose one — Equipped creature gets +2/+2 until end of turn; or target creature gets -1/-1 until end of turn; or you gain 2 life. -- Equip {2}
|
text=Whenever equipped creature deals combat damage, put two charge counters on Umezawa's Jitte. -- Remove a charge counter from Umezawa's Jitte: Choose one �EEquipped creature gets +2/+2 until end of turn; or target creature gets -1/-1 until end of turn; or you gain 2 life. -- Equip {2}
|
||||||
mana={2}
|
mana={2}
|
||||||
type=Legendary Artifact
|
type=Legendary Artifact
|
||||||
subtype=Equipment
|
subtype=Equipment
|
||||||
|
|||||||
@@ -389,7 +389,6 @@ shivan_hellkite.txt
|
|||||||
shock.txt
|
shock.txt
|
||||||
shock2.txt
|
shock2.txt
|
||||||
siege_gang_commander.txt
|
siege_gang_commander.txt
|
||||||
silent_arbiter.txt
|
|
||||||
simic_initiate.txt
|
simic_initiate.txt
|
||||||
slate_of_ancestry.txt
|
slate_of_ancestry.txt
|
||||||
sleeper_agent.txt
|
sleeper_agent.txt
|
||||||
|
|||||||
@@ -11,42 +11,48 @@ class GameObserver;
|
|||||||
#define CAMPAIGNS_FOLDER "Res/campaigns/"
|
#define CAMPAIGNS_FOLDER "Res/campaigns/"
|
||||||
|
|
||||||
|
|
||||||
class StoryGraphicalElement:public JGuiObject {
|
class StoryDialogElement:public JGuiObject {
|
||||||
public:
|
public:
|
||||||
float mX;
|
float mX;
|
||||||
float mY;
|
float mY;
|
||||||
StoryGraphicalElement(float x, float y);
|
StoryDialogElement(float x, float y, int id = 0);
|
||||||
|
void Entering(){};
|
||||||
|
bool Leaving(JButton key) {return false;};
|
||||||
|
bool ButtonPressed() {return false;};
|
||||||
|
bool hasFocus() {return false;};
|
||||||
|
virtual float getHeight() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class StoryText:public StoryGraphicalElement {
|
class StoryText:public StoryDialogElement {
|
||||||
public :
|
public :
|
||||||
string text;
|
string text;
|
||||||
int align;
|
int align;
|
||||||
StoryText(string text, float mX, float mY, string align = "center");
|
int font;
|
||||||
|
StoryText(string text, float mX, float mY, string align = "center", int font = 0, int id = 0);
|
||||||
|
|
||||||
void Render();
|
void Render();
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
virtual ostream& toString(ostream& out) const;
|
virtual ostream& toString(ostream& out) const;
|
||||||
|
float getHeight();
|
||||||
};
|
};
|
||||||
class StoryImage:public StoryGraphicalElement {
|
class StoryImage:public StoryDialogElement {
|
||||||
public :
|
public :
|
||||||
string img;
|
string img;
|
||||||
StoryImage(string img, float mX, float mY);
|
StoryImage(string img, float mX, float mY);
|
||||||
void Render();
|
void Render();
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
virtual ostream& toString(ostream& out) const;
|
virtual ostream& toString(ostream& out) const;
|
||||||
|
float getHeight();
|
||||||
};
|
};
|
||||||
|
|
||||||
class StoryChoice:public JGuiObject {
|
class StoryChoice:public StoryText {
|
||||||
public:
|
public:
|
||||||
string pageId;
|
string pageId;
|
||||||
string text;
|
|
||||||
float mX;
|
|
||||||
float mY;
|
|
||||||
|
|
||||||
bool mHasFocus;
|
bool mHasFocus;
|
||||||
float mScale;
|
float mScale;
|
||||||
float mTargetScale;
|
float mTargetScale;
|
||||||
StoryChoice(string id, string text, int JGOid, float mX, float mY, bool hasFocus);
|
StoryChoice(string id, string text, int JGOid, float mX, float mY, string _align, int _font, bool hasFocus);
|
||||||
void Render();
|
void Render();
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
|
|
||||||
@@ -55,6 +61,7 @@ public:
|
|||||||
bool ButtonPressed();
|
bool ButtonPressed();
|
||||||
bool hasFocus();
|
bool hasFocus();
|
||||||
virtual ostream& toString(ostream& out) const;
|
virtual ostream& toString(ostream& out) const;
|
||||||
|
float getHeight();
|
||||||
};
|
};
|
||||||
|
|
||||||
class StoryFlow;
|
class StoryFlow;
|
||||||
@@ -69,15 +76,18 @@ public:
|
|||||||
|
|
||||||
class StoryDialog:public StoryPage, public JGuiListener,public JGuiController {
|
class StoryDialog:public StoryPage, public JGuiListener,public JGuiController {
|
||||||
private:
|
private:
|
||||||
vector<StoryGraphicalElement *>graphics;
|
vector<StoryDialogElement *>graphics;
|
||||||
string safeAttribute(TiXmlElement* element, string attribute);
|
string safeAttribute(TiXmlElement* element, string attribute);
|
||||||
|
void RenderElement(StoryDialogElement * elmt);
|
||||||
public:
|
public:
|
||||||
StoryDialog(TiXmlElement* el,StoryFlow * mParent);
|
StoryDialog(TiXmlElement* el,StoryFlow * mParent);
|
||||||
~StoryDialog();
|
~StoryDialog();
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
void Render();
|
void Render();
|
||||||
void ButtonPressed(int,int);
|
void ButtonPressed(int,int);
|
||||||
|
|
||||||
|
static float currentY;
|
||||||
|
static float previousY;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -472,7 +472,6 @@ void GameStateMenu::Update(float dt)
|
|||||||
currentState = MENU_STATE_MAJOR_SUBMENU;
|
currentState = MENU_STATE_MAJOR_SUBMENU;
|
||||||
subMenuController = NEW SimpleMenu(102, this, Constants::MENU_FONT, 150,60);
|
subMenuController = NEW SimpleMenu(102, this, Constants::MENU_FONT, 150,60);
|
||||||
if (subMenuController){
|
if (subMenuController){
|
||||||
subMenuController->Add(SUBMENUITEM_STORY,"Story");
|
|
||||||
subMenuController->Add(SUBMENUITEM_CLASSIC,"Classic");
|
subMenuController->Add(SUBMENUITEM_CLASSIC,"Classic");
|
||||||
if (options[Options::MOMIR_MODE_UNLOCKED].number)
|
if (options[Options::MOMIR_MODE_UNLOCKED].number)
|
||||||
subMenuController->Add(SUBMENUITEM_MOMIR, "Momir Basic");
|
subMenuController->Add(SUBMENUITEM_MOMIR, "Momir Basic");
|
||||||
@@ -480,6 +479,7 @@ void GameStateMenu::Update(float dt)
|
|||||||
subMenuController->Add(SUBMENUITEM_RANDOM1, "Random 1 Color");
|
subMenuController->Add(SUBMENUITEM_RANDOM1, "Random 1 Color");
|
||||||
subMenuController->Add(SUBMENUITEM_RANDOM2, "Random 2 Colors");
|
subMenuController->Add(SUBMENUITEM_RANDOM2, "Random 2 Colors");
|
||||||
}
|
}
|
||||||
|
subMenuController->Add(SUBMENUITEM_STORY,"Story");
|
||||||
subMenuController->Add(SUBMENUITEM_CANCEL, "Cancel");
|
subMenuController->Add(SUBMENUITEM_CANCEL, "Cancel");
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
|||||||
@@ -9,26 +9,42 @@
|
|||||||
#include <JFileSystem.h>
|
#include <JFileSystem.h>
|
||||||
|
|
||||||
|
|
||||||
StoryGraphicalElement::StoryGraphicalElement(float x, float y): JGuiObject(0), mX(x),mY(y) {
|
#define LINE_SPACE 2
|
||||||
|
#define SPACE_BEFORE_CHOICES 10
|
||||||
|
|
||||||
|
float StoryDialog::currentY = 2;
|
||||||
|
float StoryDialog::previousY = 2;
|
||||||
|
|
||||||
|
StoryDialogElement::StoryDialogElement(float x, float y, int id): JGuiObject(id), mX(x),mY(y) {
|
||||||
}
|
}
|
||||||
|
|
||||||
StoryText::StoryText(string text, float _mX, float _mY, string _align):StoryGraphicalElement(_mX,_mY), text(text) {
|
StoryText::StoryText(string text, float _mX, float _mY, string _align, int _font, int id):StoryDialogElement(_mX,_mY, id), text(text), font(_font) {
|
||||||
align = JGETEXT_LEFT;
|
align = JGETEXT_LEFT;
|
||||||
if (_align.compare("center") == 0) {
|
if (_align.compare("center") == 0) {
|
||||||
align = JGETEXT_CENTER;
|
align = JGETEXT_CENTER;
|
||||||
|
if (mX == 0)
|
||||||
|
mX = SCREEN_WIDTH/2;
|
||||||
}else if (_align.compare("right") == 0) {
|
}else if (_align.compare("right") == 0) {
|
||||||
align = JGETEXT_RIGHT;
|
align = JGETEXT_RIGHT;
|
||||||
|
if (mX == 0)
|
||||||
|
mX = SCREEN_WIDTH - 10;
|
||||||
}
|
}
|
||||||
if (align == JGETEXT_CENTER && mX == 0){
|
if (align == JGETEXT_LEFT && mX <= 0){
|
||||||
mX = SCREEN_WIDTH/2;
|
mX += 10; //left margin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void StoryText::Render() {
|
void StoryText::Render() {
|
||||||
JLBFont * mFont = resources.GetJLBFont(Constants::MAIN_FONT);
|
JLBFont * mFont = resources.GetJLBFont(font);
|
||||||
mFont->SetColor(ARGB(200,255,255,255));
|
mFont->SetColor(ARGB(200,255,255,255));
|
||||||
mFont->SetScale(1.0);
|
mFont->SetScale(1.0);
|
||||||
mFont->DrawString(text.c_str(), mX, mY, align);
|
mFont->DrawString(text.c_str(), mX, mY, align);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float StoryText::getHeight() {
|
||||||
|
JLBFont * mFont = resources.GetJLBFont(font);
|
||||||
|
return mFont->GetHeight();
|
||||||
|
}
|
||||||
|
|
||||||
void StoryText::Update(float dt){
|
void StoryText::Update(float dt){
|
||||||
//Nothing for now
|
//Nothing for now
|
||||||
}
|
}
|
||||||
@@ -38,7 +54,7 @@ void StoryText::Render() {
|
|||||||
return out << "StoryText ::: text : " << text;
|
return out << "StoryText ::: text : " << text;
|
||||||
}
|
}
|
||||||
|
|
||||||
StoryImage::StoryImage(string img, float mX, float mY):StoryGraphicalElement(mX,mY), img(img) {
|
StoryImage::StoryImage(string img, float mX, float mY):StoryDialogElement(mX,mY), img(img) {
|
||||||
|
|
||||||
}
|
}
|
||||||
void StoryImage::Render() {
|
void StoryImage::Render() {
|
||||||
@@ -52,6 +68,15 @@ void StoryImage::Render() {
|
|||||||
JRenderer::GetInstance()->RenderQuad(quad,x, mY);
|
JRenderer::GetInstance()->RenderQuad(quad,x, mY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float StoryImage::getHeight() {
|
||||||
|
JQuad * quad = resources.RetrieveQuad(img);
|
||||||
|
if (quad) {
|
||||||
|
return quad->mHeight;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void StoryImage::Update(float dt){
|
void StoryImage::Update(float dt){
|
||||||
//Nothing for now
|
//Nothing for now
|
||||||
}
|
}
|
||||||
@@ -76,11 +101,16 @@ StoryFlow::StoryFlow(string folder): folder(folder){
|
|||||||
|
|
||||||
void StoryChoice::Render()
|
void StoryChoice::Render()
|
||||||
{
|
{
|
||||||
JLBFont * mFont = resources.GetJLBFont(Constants::MAIN_FONT);
|
JLBFont * mFont = resources.GetJLBFont(font);
|
||||||
mFont->SetColor(ARGB(200,255,255,255));
|
mFont->SetColor(ARGB(200,255,255,255));
|
||||||
if (mHasFocus) mFont->SetColor(ARGB(255,255,255,0));
|
if (mHasFocus) mFont->SetColor(ARGB(255,255,255,0));
|
||||||
mFont->SetScale(mScale);
|
mFont->SetScale(mScale);
|
||||||
mFont->DrawString(text.c_str(), mX, mY, JGETEXT_CENTER);
|
mFont->DrawString(text.c_str(), mX, mY, align);
|
||||||
|
}
|
||||||
|
|
||||||
|
float StoryChoice::getHeight() {
|
||||||
|
JLBFont * mFont = resources.GetJLBFont(font);
|
||||||
|
return mFont->GetHeight() * mScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StoryChoice::Update(float dt)
|
void StoryChoice::Update(float dt)
|
||||||
@@ -133,7 +163,7 @@ ostream& StoryChoice::toString(ostream& out) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
StoryChoice::StoryChoice(string pageId, string text, int JGOid, float mX, float mY, bool hasFocus):JGuiObject(JGOid),pageId(pageId),text(text),mX(mX),mY(mY),mHasFocus(hasFocus){
|
StoryChoice::StoryChoice(string pageId, string text, int JGOid, float mX, float mY, string _align, int _font, bool hasFocus):StoryText(text, mX, mY, _align, _font, JGOid),pageId(pageId),mHasFocus(hasFocus){
|
||||||
mScale = 1.0f;
|
mScale = 1.0f;
|
||||||
mTargetScale = 1.0f;
|
mTargetScale = 1.0f;
|
||||||
if(hasFocus) mTargetScale = 1.2f;
|
if(hasFocus) mTargetScale = 1.2f;
|
||||||
@@ -221,39 +251,47 @@ string StoryDialog::safeAttribute(TiXmlElement* element, string attribute) {
|
|||||||
|
|
||||||
StoryDialog::StoryDialog(TiXmlElement* root, StoryFlow * mParent):StoryPage(mParent), JGuiListener(), JGuiController(1,NULL) {
|
StoryDialog::StoryDialog(TiXmlElement* root, StoryFlow * mParent):StoryPage(mParent), JGuiListener(), JGuiController(1,NULL) {
|
||||||
|
|
||||||
|
currentY = 0;
|
||||||
|
|
||||||
for (TiXmlNode* node = root->FirstChild(); node; node = node->NextSibling()) {
|
for (TiXmlNode* node = root->FirstChild(); node; node = node->NextSibling()) {
|
||||||
TiXmlElement* element = node->ToElement();
|
TiXmlElement* element = node->ToElement();
|
||||||
if (element) {
|
if (element) {
|
||||||
|
string sX = safeAttribute(element, "x");
|
||||||
|
float x = atof(sX.c_str());
|
||||||
|
if (x>0 && x < 1){
|
||||||
|
x = SCREEN_WIDTH_F * x;
|
||||||
|
}
|
||||||
|
string sY = safeAttribute(element,"y");
|
||||||
|
float y = atof(sY.c_str());
|
||||||
|
if (y>0 && y < 1){
|
||||||
|
y = SCREEN_HEIGHT_F * y;
|
||||||
|
}
|
||||||
|
string align = safeAttribute(element,"align");
|
||||||
|
const char* textC = element->GetText();
|
||||||
|
string text = textC;
|
||||||
|
string sFont = safeAttribute(element,"font");
|
||||||
|
int font = atoi(sFont.c_str());
|
||||||
|
|
||||||
if (strcmp(element->Value(), "text")==0) {
|
if (strcmp(element->Value(), "text")==0) {
|
||||||
string sX = safeAttribute(element, "x");
|
graphics.push_back(NEW StoryText(text,x,y,align, font));
|
||||||
float x = atof(sX.c_str());
|
}
|
||||||
string sY = safeAttribute(element,"y");
|
else if (strcmp(element->Value(), "title")==0) {
|
||||||
float y = atof(sY.c_str());
|
graphics.push_back(NEW StoryText(text,x,y,"center", Constants::MENU_FONT));
|
||||||
string align = safeAttribute(element,"align");
|
|
||||||
const char* textC = element->GetText();
|
|
||||||
string text = textC;
|
|
||||||
graphics.push_back(NEW StoryText(text,x,y,align));
|
|
||||||
}
|
}
|
||||||
else if (strcmp(element->Value(), "img")==0) {
|
else if (strcmp(element->Value(), "img")==0) {
|
||||||
string sX = safeAttribute(element,"x");
|
|
||||||
float x = atof(sX.c_str());
|
|
||||||
//special case to force center
|
//special case to force center
|
||||||
if (sX.compare("") == 0 ){
|
if (sX.compare("") == 0 ){
|
||||||
x = -1;
|
x = -1;
|
||||||
}
|
}
|
||||||
string sY = safeAttribute(element,"y");
|
string img = string("campaigns/").append(mParent->folder).append("/").append(text);
|
||||||
float y = atof(sY.c_str());
|
|
||||||
const char* imgC = element->GetText();
|
|
||||||
string img = imgC;
|
|
||||||
img = string("campaigns/").append(mParent->folder).append("/").append(img);
|
|
||||||
graphics.push_back(NEW StoryImage(img,x,y));
|
graphics.push_back(NEW StoryImage(img,x,y));
|
||||||
}
|
}
|
||||||
else if (strcmp(element->Value(), "answer")==0){
|
else if (strcmp(element->Value(), "answer")==0){
|
||||||
string id = element->Attribute("goto");
|
string id = element->Attribute("goto");
|
||||||
const char* answerC = element->GetText();
|
if (!align.size()) align = "center";
|
||||||
string answer = answerC;
|
|
||||||
int i = mObjects.size();
|
int i = mObjects.size();
|
||||||
StoryChoice * sc = NEW StoryChoice(id,answer,i,SCREEN_WIDTH/2, SCREEN_HEIGHT-20 - i *20 , (i==0));
|
StoryChoice * sc = NEW StoryChoice(id,text,i,x, y , align, font, (i==0));
|
||||||
|
graphics.push_back(sc);
|
||||||
Add(sc);
|
Add(sc);
|
||||||
}else {
|
}else {
|
||||||
//Error
|
//Error
|
||||||
@@ -265,18 +303,38 @@ StoryDialog::StoryDialog(TiXmlElement* root, StoryFlow * mParent):StoryPage(mPar
|
|||||||
}
|
}
|
||||||
|
|
||||||
void StoryDialog::Update(float dt){
|
void StoryDialog::Update(float dt){
|
||||||
JGuiController::Update(dt);
|
|
||||||
for (size_t i = 0; i < graphics.size(); ++i){
|
for (size_t i = 0; i < graphics.size(); ++i){
|
||||||
graphics[i]->Update(dt);
|
graphics[i]->Update(dt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JButton key = mEngine->ReadButton();
|
||||||
|
CheckUserInput(key);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void StoryDialog::RenderElement(StoryDialogElement * elmt) {
|
||||||
|
float mYBackup = elmt->mY;
|
||||||
|
if (! elmt->mY) elmt->mY = currentY;
|
||||||
|
if (elmt->mY == -1) {
|
||||||
|
elmt->mY = previousY;
|
||||||
|
}
|
||||||
|
elmt->Render();
|
||||||
|
previousY = currentY;
|
||||||
|
currentY = elmt->mY + elmt->getHeight() + LINE_SPACE;
|
||||||
|
elmt->mY = mYBackup;
|
||||||
|
}
|
||||||
|
|
||||||
void StoryDialog::Render() {
|
void StoryDialog::Render() {
|
||||||
|
currentY = 2;
|
||||||
|
previousY = currentY;
|
||||||
for (size_t i = 0; i < graphics.size(); ++i){
|
for (size_t i = 0; i < graphics.size(); ++i){
|
||||||
graphics[i]->Render();
|
StoryDialogElement * elmt = (StoryDialogElement *)(graphics[i]);
|
||||||
|
if (elmt == mObjects[0])
|
||||||
|
currentY += SPACE_BEFORE_CHOICES;
|
||||||
|
RenderElement(elmt);
|
||||||
}
|
}
|
||||||
JGuiController::Render();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void StoryDialog::ButtonPressed(int controllerid,int controlid) {
|
void StoryDialog::ButtonPressed(int controllerid,int controlid) {
|
||||||
@@ -284,7 +342,8 @@ void StoryDialog::ButtonPressed(int controllerid,int controlid) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
StoryDialog::~StoryDialog(){
|
StoryDialog::~StoryDialog(){
|
||||||
for (size_t i = 0; i < graphics.size(); ++i){
|
mCount = 0; //avoid parent deleting
|
||||||
|
for (size_t i = 0; i < graphics.size(); ++i){
|
||||||
delete(graphics[i]);
|
delete(graphics[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user