1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-26 22:57:00 +02:00

* "%s substitutions in Right-click information in town hall

* windmill won't give wood
* hover text for heroes
* good background for the town hall screen in Stronghold
* fixed typo in hall.txt
* support for ZSoft-style PCX files in /Data (using SDL_image)
* minor improvements
This commit is contained in:
Michał W. Urbańczyk 2008-06-03 18:16:54 +00:00
parent 0b16616d7a
commit 61ce0c915c
10 changed files with 34 additions and 66 deletions

View File

@ -656,7 +656,11 @@ void CHallInterface::CBuildingBox::hover(bool on)
Hoverable::hover(on); Hoverable::hover(on);
if(on) if(on)
{ {
std::string toPrint = CGI->townh->hcommands[state]; std::string toPrint;
if(state==8)
toPrint = CGI->townh->hcommands[5];
else
toPrint = CGI->townh->hcommands[state];
std::vector<std::string> name; std::vector<std::string> name;
name.push_back(CGI->buildh->buildings[LOCPLINT->castleInt->town->subID][BID]->name); name.push_back(CGI->buildh->buildings[LOCPLINT->castleInt->town->subID][BID]->name);
LOCPLINT->statusbar->print(CSDL_Ext::processStr(toPrint,name)); LOCPLINT->statusbar->print(CSDL_Ext::processStr(toPrint,name));
@ -929,7 +933,7 @@ std::string CHallInterface::CBuildWindow::getTextForState(int state)
ret = CGI->townh->hcommands[state]; ret = CGI->townh->hcommands[state];
switch (state) switch (state)
{ {
case 4: case 4: case 5: case 6:
ret.replace(ret.find_first_of("%s"),2,CGI->buildh->buildings[tid][bid]->name); ret.replace(ret.find_first_of("%s"),2,CGI->buildh->buildings[tid][bid]->name);
break; break;
case 7: case 7:

View File

@ -356,7 +356,7 @@ void CVisitableOPW::onNAHeroVisit(CGObjectInstance *os, int heroID, bool already
break; break;
case 112: case 112:
mid = 170; mid = 170;
sub = rand() % 6; sub = (rand() % 5) + 1;
val = (rand() % 4) + 3; val = (rand() % 4) + 3;
break; break;
case 109: case 109:
@ -651,7 +651,14 @@ std::vector<int> CHeroScript::yourObjects() //returns IDs of objects which are h
ret.push_back(34); //hero ret.push_back(34); //hero
return ret; return ret;
} }
std::string CHeroScript::hoverText(CGObjectInstance *os)
{
CGHeroInstance* h = static_cast<CGHeroInstance*>(os);
std::string ret = CGI->generaltexth->allTexts[15];
boost::algorithm::replace_first(ret,"%s",h->name);
boost::algorithm::replace_first(ret,"%s",h->type->heroClass->name);
return ret;
}
void CMonsterS::newObject(CGObjectInstance *os) void CMonsterS::newObject(CGObjectInstance *os)
{ {
//os->blockVisit = true; //os->blockVisit = true;

1
CLua.h
View File

@ -171,6 +171,7 @@ class CHeroScript : public CCPPObjectScript
void newObject(CGObjectInstance *os); void newObject(CGObjectInstance *os);
void onHeroVisit(CGObjectInstance *os, int heroID); void onHeroVisit(CGObjectInstance *os, int heroID);
std::vector<int> yourObjects(); //returns IDs of objects which are handled by script std::vector<int> yourObjects(); //returns IDs of objects which are handled by script
std::string hoverText(CGObjectInstance *os);
friend void initGameState(CGameInfo * cgi); friend void initGameState(CGameInfo * cgi);
}; };

View File

@ -4,7 +4,7 @@ TPTHBKCS.BMP
10 11 12 13 | 7 8 9 | 5 22 | 16 10 11 12 13 | 7 8 9 | 5 22 | 16
14 15 | 0 1 2 3 | 6 14 15 | 0 1 2 3 | 6
21 | 18 19 21 | 18 19
30 37 | 31 38 | 32 39 | 33 40 30 37 | 31 38 | 32 39 | 33 40
34 41 | 35 42 | 36 43 34 41 | 35 42 | 36 43
1 1
TPTHBKRM.BMP TPTHBKRM.BMP
@ -42,7 +42,7 @@ TPTHBKDG.BMP
30 37 | 31 38 | 32 39 | 33 40 30 37 | 31 38 | 32 39 | 33 40
34 41 | 35 42 | 36 43 34 41 | 35 42 | 36 43
6 6
TPTHBKST.BMP TPTHBKTW.BMP
10 11 12 13 | 7 8 9 | 5 | 16 10 11 12 13 | 7 8 9 | 5 | 16
14 15 | 0 1 2 | 23 | 17 14 15 | 0 1 2 | 23 | 17
21 | 22 | 18 19 21 | 22 | 18 19

Binary file not shown.

View File

@ -7,6 +7,7 @@
#include <cctype> #include <cctype>
#include <cstring> #include <cstring>
#include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations #include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations
#include "SDL_image.h"
int readNormalNr (int pos, int bytCon, unsigned char * str) int readNormalNr (int pos, int bytCon, unsigned char * str)
{ {
int ret=0; int ret=0;
@ -252,52 +253,6 @@ SDL_Surface * CPCXConv::getSurface()
} }
return ret; return ret;
} }
SDL_Surface * CPCXConv::getSurfaceZ()
{
//int i=1;
//int type = pcx[i];i+=2;//0 -- Version 2.5 2 -- Version 2.8, palette included 3 -- Version 2.8, use default palette 5 -- Version 3.0 or better
//int bpp = pcx[3];i++;
//int xmin, ymin, xmax, ymax, w, h;
//xmin = readNormalNr(i,2,pcx);i+=2;
//ymin = readNormalNr(i,2,pcx);i+=2;
//xmax = readNormalNr(i,2,pcx);i+=2;
//ymax = readNormalNr(i,2,pcx);i+=2;
//w = xmax - xmin + 1; h = ymax - ymin + 1;
//i+=4; //DPI is not interesting
//char palette[48];
//memcpy(palette,pcx+i,48); i+=48;
//int reserved = pcx[i++];
//int planes = pcx[i++];
//int bytesPerLine = readNormalNr(i,2,pcx);i+=2;
//i = 128; //to the end of header
//int totalBytes = planes * bytesPerLine;
//int padding = ((bytesPerLine * planes) * (8 / bpp)) - ((xmax - xmin) + 1);
//char * buffer = new char[totalBytes];
//int index = 0, count, value, total=0;
//do
//{
// count=0; value=0;
// unsigned char byte = pcx[i++];
// if((byte & 0xC0) == 0xC0) //two top bits set
// {
// count = byte & 0x3f;
// value = pcx[i++];
// }
// else
// {
// count = 1;
// value = byte;
// }
// for(total+=count; count && (index < totalBytes); index++)
// {
// buffer[index] = value;
// count--;
// }
//} while(index<totalBytes);
//delete buffer;
std::cout<<"Warning - not supported ZSoft-style .png file!!!"<<std::endl;
return NULL;
}
SDL_Surface * CLodHandler::loadBitmap(std::string fname) SDL_Surface * CLodHandler::loadBitmap(std::string fname)
{ {
@ -324,32 +279,32 @@ SDL_Surface * CLodHandler::loadBitmap(std::string fname)
} }
else //file .bmp not present, check .pcx else //file .bmp not present, check .pcx
{ {
//TODO: zczytywanie nawala, dokonczyc wsparcie zsoftowych pcxow
char sign[3]; char sign[3];
fname.replace(fname.find_first_of('.'),fname.find_first_of('.')+4,".PCX"); fname.replace(fname.find_first_of('.'),fname.find_first_of('.')+4,".PCX");
f = fopen(fname.c_str(),"r"); f = fopen(fname.c_str(),"r");
if(!f) if(!f)
return NULL; return NULL;
fread(sign,1,3,f); fread(sign,1,3,f);
if(sign[0]=='B' && sign[1]=='M') //BMP - ¿eby Kulex móg³ mieszaæ PCXy z BMPami if(sign[0]=='B' && sign[1]=='M') //BMP named as PCX - people (eg. Kulex) sometimes use such files
{ {
fclose(f); fclose(f);
return SDL_LoadBMP(fname.c_str()); return SDL_LoadBMP(fname.c_str());
} }
else //PCX else //PCX - but we don't know which
{ {
CPCXConv cp;
pcx = new unsigned char[e->realSize];
memcpy(pcx,sign,3);
int res = fread((char*)pcx+3, 1, e->realSize-3, f);
fclose(f);
cp.openPCX((char*)pcx,e->realSize);
if((sign[0]==10) && (sign[1]<6) && (sign[2]==1)) //ZSoft PCX if((sign[0]==10) && (sign[1]<6) && (sign[2]==1)) //ZSoft PCX
{ {
return cp.getSurfaceZ(); fclose(f);
return IMG_Load(fname.c_str());
} }
else //H3 PCX else //H3-style PCX
{ {
CPCXConv cp;
pcx = new unsigned char[e->realSize];
memcpy(pcx,sign,3);
int res = fread((char*)pcx+3, 1, e->realSize-3, f);
fclose(f);
cp.openPCX((char*)pcx,e->realSize);
return cp.getSurface(); return cp.getSurface();
} }
} }

View File

@ -54,7 +54,7 @@ public:
void openPCX(); void openPCX();
void convert(); void convert();
SDL_Surface * getSurface(); //for standard H3 PCX SDL_Surface * getSurface(); //for standard H3 PCX
SDL_Surface * getSurfaceZ(); //for ZSoft PCX //SDL_Surface * getSurfaceZ(); //for ZSoft PCX
CPCXConv(){pcx=bmp=NULL;pcxs=bmps=0;}; CPCXConv(){pcx=bmp=NULL;pcxs=bmps=0;};
~CPCXConv(){if (pcxs) delete[] pcx; if(bmps) delete[] bmp;} ~CPCXConv(){if (pcxs) delete[] pcx; if(bmps) delete[] bmp;}
}; };

View File

@ -1,6 +1,7 @@
#include "../stdafx.h" #include "../stdafx.h"
#include "CSemiDefHandler.h" #include "CSemiDefHandler.h"
#include <fstream> #include <fstream>
#include "SDL_image.h"
extern SDL_Surface * screen; extern SDL_Surface * screen;
std::string CSemiDefHandler::nameFromType (EterrainType typ) std::string CSemiDefHandler::nameFromType (EterrainType typ)
{ {

View File

@ -3,7 +3,7 @@
#include "../global.h" #include "../global.h"
#include <string> #include <string>
#include "SDL.h" #include "SDL.h"
#include "SDL_image.h" //#include "SDL_image.h"
#include <vector> #include <vector>
struct Cimage struct Cimage