This commit is contained in:
Daveo 2001-05-05 21:18:12 +00:00
parent 16645de3b0
commit b26a6d76bb
38 changed files with 517 additions and 137 deletions

View File

@ -84,23 +84,18 @@ inline bool uvaprox( sUV &uv0, sUV &uv1 )
//***************************************************************************
void CFaceStore::SetTPageFlag(CFace &F,int MatFlag)
{
int Trans=0;
switch (MatFlag>>3)
{
// case 0: Trans=2; break; /* Subtractive */
case 1: Trans=1; break; /* Additive */
// case 0: F.TPageFlag=2; break; /* Subtractive */
case 1: F.TPageFlag=1; break; /* Additive */
default: F.TPageFlag=0; break;
}
// Trans=1;
F.TPageFlag=Trans<<5;
}
//***************************************************************************
CFace &CFaceStore::AddFace(vector<Vector3> const &P, const sGinTri &T, const sUVTri &uv,GString const &Tex,int MatFlag,bool ProcessTexFlag )
{
//int ListSize = FaceList.size();
// FaceList.resize(ListSize+1);
//CFace &F = FaceList[ListSize];
CFace F;
for (int i=0; i<3; i++)
@ -119,7 +114,8 @@ CFace F;
F.TexName=Tex;
F.Mat = -1;
SetTPageFlag(F,MatFlag);
return(AddFace(F,ProcessTexFlag));
CFace &NF=AddFace(F,ProcessTexFlag);
return(NF);
}
//***************************************************************************
@ -383,13 +379,17 @@ int V=ThisTex.v+H;
Out.uv1[0]=(uv1[0]-XOfs); Out.uv1[1]=(uv1[1]-YOfs);
Out.uv2[0]=(uv2[0]-XOfs); Out.uv2[1]=(uv2[1]-YOfs);
Out.TPage=ThisTex.Tpage | In.TPageFlag;
Out.TPage=ThisTex.Tpage;
Out.Clut=ThisTex.Clut;
Out.PolyCode=GPU_PolyFT3Code;
if (In.TPageFlag)
{
Out.PolyCode|=GPUCode_SemiTrans;
if (In.TPageFlag!=1)
{
Out.TPage|=In.TPageFlag<<5;
}
}
}

View File

@ -84,8 +84,8 @@ int Width,Height;
#ifdef _DEBUG
// AddLayer(LAYER_TYPE_SHADE,LAYER_SUBTYPE_NONE, Width, Height);
// AddLayer(LAYER_TYPE_TRIGGER,LAYER_SUBTYPE_NONE, Width, Height);
AddLayer(LAYER_TYPE_PLATFORM,LAYER_SUBTYPE_NONE, Width, Height);
// AddLayer(LAYER_TYPE_HAZARD,LAYER_SUBTYPE_NONE, Width, Height);
// AddLayer(LAYER_TYPE_PLATFORM,LAYER_SUBTYPE_NONE, Width, Height);
AddLayer(LAYER_TYPE_HAZARD,LAYER_SUBTYPE_NONE, Width, Height);
// AddLayer(LAYER_TYPE_FX,LAYER_SUBTYPE_NONE, Width, Height);
// AddLayer(LAYER_TYPE_ACTOR,LAYER_SUBTYPE_NONE, Width, Height);
// AddLayer(LAYER_TYPE_ITEM,LAYER_SUBTYPE_NONE, Width, Height);
@ -98,7 +98,7 @@ int Width,Height;
ActiveLayer=FindLayer(LAYER_TYPE_TILE,LAYER_SUBTYPE_ACTION);
#ifdef _DEBUG
ActiveLayer=FindLayer(LAYER_TYPE_PLATFORM,LAYER_SUBTYPE_NONE);
ActiveLayer=FindLayer(LAYER_TYPE_HAZARD,LAYER_SUBTYPE_NONE);
if (ActiveLayer<0) ActiveLayer=0;
#endif
CurrentLayer=Layer[ActiveLayer];
@ -258,6 +258,7 @@ CLayer *ThisLayer;
for (int i=StartLayer; i<EndLayer; i++)
{
ThisLayer->LoadGfx(this);
if (ThisLayer->IsVisible())
{
ThisLayer->Render(this,ThisCam,Is3dFlag);

View File

@ -277,7 +277,7 @@ int ListSize=TriList.size();
GString TexName=SceneTexList[TexID];
ThisName=SetPath+TexName;
TRACE2("%i !%s!\n",TexID,ThisName);
// TRACE2("%i !%s!\n",TexID,ThisName);
TexID=TexCache.ProcessTexture(ThisName);
}
// Sort Rest of Tri info

View File

@ -210,6 +210,8 @@ virtual bool MouseMove(CCore *Core,UINT nFlags, CPoint &CursorPos) {return
virtual bool Command(int CmdMsg,CCore *Core,int Param0=0,int Param1=0) {return(false);}
CPoint GetElemPos(int ID,int Width);
virtual void LoadGfx(CCore *Core){}
// Local
virtual bool CanClose() {return(true);}

View File

@ -183,6 +183,7 @@ std::vector<sTriFace> &ElemTriList=ThisElem.GetTriList();
OutTri.uv[p][0]=InTri.uvs[p].u;
OutTri.uv[p][1]=InTri.uvs[p].v;
}
OutTri.Flags=InTri.Flags;
TriList.push_back(OutTri);
}
}

View File

@ -141,6 +141,7 @@ struct sLayerThingPlatform
int PlatformMoveType;
int PlatformTriStart;
int PlatformTriCount;
int PlatformParam0;
};
struct sLayerThingTrigger
@ -149,6 +150,8 @@ struct sLayerThingTrigger
int TriggerHeight;
int TriggerTargetX;
int TriggerTargetY;
int TriggerTargetW;
int TriggerTargetH;
};
struct sLayerThingFX

View File

@ -32,6 +32,9 @@ void CGUILayerPlatform::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGUILayerPlatform)
DDX_Control(pDX, IDC_PLATFORM_PARAM_SPIN, m_Param0Spin);
DDX_Control(pDX, IDC_PLATFORM_PARAM0_TEXT, m_Param0Txt);
DDX_Control(pDX, IDC_PLATFORM_PARAM0, m_Param0);
DDX_Control(pDX, IDC_PLATFORM_TURNRATE_SPIN, m_TurnRateSpin);
DDX_Control(pDX, IDC_PLATFORM_SPEED_SPIN, m_SpeedSpin);
DDX_Control(pDX, IDC_PLATFORM_TYPE, m_Type);

View File

@ -19,6 +19,9 @@ public:
// Dialog Data
//{{AFX_DATA(CGUILayerPlatform)
enum { IDD = IDD_LAYER_PLATFORM };
CSpinButtonCtrl m_Param0Spin;
CStatic m_Param0Txt;
CEdit m_Param0;
CSpinButtonCtrl m_TurnRateSpin;
CSpinButtonCtrl m_SpeedSpin;
CComboBox m_Type;

View File

@ -30,6 +30,8 @@ void CGUILayerShade::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGUILayerShade)
DDX_Control(pDX, IDC_LAYERSHADE_GFX_YSPIN, m_GfxPosYSpin);
DDX_Control(pDX, IDC_LAYERSHADE_GFX_XSPIN, m_GfxPosXSpin);
DDX_Control(pDX, IDC_LAYERSHADE_DEF_LIST, m_DefList);
DDX_Control(pDX, IDC_LAYERSHADE_SHADECOUNT_SPIN, m_ShadeCountSpin);
DDX_Control(pDX, IDC_LAYERSHADE_SHADECOUNT, m_ShadeCount);
@ -48,9 +50,7 @@ void CGUILayerShade::DoDataExchange(CDataExchange* pDX)
DDX_Control(pDX, IDC_LAYERSHADE_GFX_CURRENT_SPIN, m_GfxCurrentSpin);
DDX_Control(pDX, IDC_LAYERSHADE_GFX_CURRENT, m_GfxCurrent);
DDX_Control(pDX, IDC_LAYERSHADE_GFX_LIST, m_GfxBankList);
DDX_Control(pDX, IDC_LAYERSHADE_GFX_XSPIN, m_GfxPosXSpin);
DDX_Control(pDX, IDC_LAYERSHADE_GFX_X, m_GfxPosX);
DDX_Control(pDX, IDC_LAYERSHADE_GFX_YSPIN, m_GfxPosYSpin);
DDX_Control(pDX, IDC_LAYERSHADE_GFX_Y, m_GfxPosY);
DDX_Control(pDX, IDC_LAYERSHADE_GFX_SPIN_X0, m_GfxSpinx0);
DDX_Control(pDX, IDC_LAYERSHADE_GFX_SPIN_Y0, m_GfxSpiny0);

View File

@ -22,6 +22,8 @@ public:
// Dialog Data
//{{AFX_DATA(CGUILayerShade)
enum { IDD = IDD_LAYER_SHADE };
CSpinButtonCtrl m_GfxPosYSpin;
CSpinButtonCtrl m_GfxPosXSpin;
CComboBox m_DefList;
CSpinButtonCtrl m_ShadeCountSpin;
CEdit m_ShadeCount;
@ -40,9 +42,7 @@ public:
CSpinButtonCtrl m_GfxCurrentSpin;
CEdit m_GfxCurrent;
CComboBox m_GfxBankList;
CEdit m_GfxPosXSpin;
CEdit m_GfxPosX;
CEdit m_GfxPosYSpin;
CEdit m_GfxPosY;
CSpinButtonCtrl m_GfxSpinx0;
CSpinButtonCtrl m_GfxSpiny0;

View File

@ -32,6 +32,11 @@ void CGUILayerTrigger::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGUILayerTrigger)
DDX_Control(pDX, IDC_TRIGGER_TARGETW_SPIN, m_TargetWSpin);
DDX_Control(pDX, IDC_TRIGGER_TARGETH_SPIN, m_TargetHSpin);
DDX_Control(pDX, IDC_TRIGGER_TEXT_TARGET_WH, m_TargetWHTxt);
DDX_Control(pDX, IDC_TRIGGER_TARGETW, m_TargetW);
DDX_Control(pDX, IDC_TRIGGER_TARGETH, m_TargetH);
DDX_Control(pDX, IDC_TRIGGER_TARGET, m_TargetTxt);
DDX_Control(pDX, IDC_TRIGGER_TARGETY_SPIN, m_TargetYSpin);
DDX_Control(pDX, IDC_TRIGGER_TARGETX_SPIN, m_TargetXSpin);
@ -51,6 +56,8 @@ BEGIN_MESSAGE_MAP(CGUILayerTrigger, CDialog)
ON_EN_CHANGE(IDC_TRIGGER_WIDTH, OnParamChange)
ON_EN_CHANGE(IDC_TRIGGER_TARGETX, OnParamChange)
ON_EN_CHANGE(IDC_TRIGGER_TARGETY, OnParamChange)
ON_EN_CHANGE(IDC_TRIGGER_TARGETH, OnParamChange)
ON_EN_CHANGE(IDC_TRIGGER_TARGETW, OnParamChange)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

View File

@ -19,6 +19,11 @@ public:
// Dialog Data
//{{AFX_DATA(CGUILayerTrigger)
enum { IDD = IDD_LAYER_TRIGGER };
CSpinButtonCtrl m_TargetWSpin;
CSpinButtonCtrl m_TargetHSpin;
CStatic m_TargetWHTxt;
CEdit m_TargetW;
CEdit m_TargetH;
CStatic m_TargetTxt;
CSpinButtonCtrl m_TargetYSpin;
CSpinButtonCtrl m_TargetXSpin;

View File

@ -70,6 +70,7 @@ virtual bool IsVisible() {return(LayerDef.VisibleFlag);}
virtual int GetType() {return(LayerDef.Type);}
virtual int GetSubType() {return(LayerDef.SubType);}
virtual void LoadGfx(CCore *Core)=0;
virtual void Render(CCore *Core,Vector3 &CamPos,bool Is3d){};
virtual void Render4TGA(const char *Filename){}

View File

@ -166,3 +166,18 @@ void CLayerHazard::GUIChanged(CCore *Core)
}
}
/*****************************************************************************/
void CLayerHazard::Export(CCore *Core,CExport &Exp)
{
CLayerThing::Export(Core,Exp);
}
/*****************************************************************************/
void CLayerHazard::ExportThingData(CCore *Core,CExport &Exp,sLayerThing &ThisThing,sLayerThingData &OutThing)
{
CElem &ThisElem=ThingBank->GetElem(ThisThing.ElemID,0);
Exp.ExportElem3d(Core,ThisElem,OutThing.Hazard.HazardTriStart,OutThing.Hazard.HazardTriCount);
}

View File

@ -34,6 +34,9 @@ public:
void GUIThingUpdate(bool OnlySel=false);
void GUIThingPointUpdate(bool OnlySel=false);
void Export(CCore *Core,CExport &Exp);
void ExportThingData(CCore *Core,CExport &Exp,sLayerThing &ThisThing,sLayerThingData &OutThing);
protected:
CGUILayerHazard GUIHazard;

View File

@ -58,7 +58,6 @@ sLayerThingDataOLD OldThing;
ThisThing.Data.Platform.PlatformCollisionFlag=OldThing.CollisionFlag;
ThisThing.Data.Platform.PlatformTriCount=OldThing.TriCount; // Not needed but what the hell!!
ThisThing.Data.Platform.PlatformTriStart=OldThing.TriStart; // Not needed but what the hell!!
}
@ -75,6 +74,7 @@ void CLayerPlatform::GUIInit(CCore *Core)
GUIPlatform.m_SpeedSpin.SetRange(0,255);
GUIPlatform.m_TurnRateSpin.SetRange(0,255);
GUIPlatform.m_Param0Spin.SetRange(0,255);
// Init type lists
{
@ -89,6 +89,10 @@ CComboBox &List=GUIPlatform.m_Type;
List.AddString("Weighted");
List.AddString("Rotating");
}
GUIPlatform.m_Param0Txt.ShowWindow(SW_HIDE);
GUIPlatform.m_Param0.ShowWindow(SW_HIDE);
GUIPlatform.m_Param0Spin.ShowWindow(SW_HIDE);
}
/*****************************************************************************/
@ -139,6 +143,22 @@ void CLayerPlatform::GUIThingUpdate(bool OnlySel)
GUIPlatform.m_Collision.SetCheck(ThisThing.Data.Platform.PlatformCollisionFlag);
GUIPlatform.m_MoveList.SetCurSel(ThisThing.Data.Platform.PlatformMoveType);
GUIPlatform.m_Type.SetCurSel(ThisThing.Data.Platform.PlatformType);
// Additional Params
char *Param0Txt=ThingScript.GetStr(ThisThing.Name,"Param0");
if (Param0Txt)
{
GUIPlatform.m_Param0Txt.SetWindowText(Param0Txt);
GUIPlatform.SetVal(GUIPlatform.m_Param0,ThisThing.Data.Platform.PlatformParam0);
GUIPlatform.m_Param0Txt.ShowWindow(SW_SHOW);
GUIPlatform.m_Param0.ShowWindow(SW_SHOW);
GUIPlatform.m_Param0Spin.ShowWindow(SW_SHOW);
}
else
{
GUIPlatform.m_Param0Txt.ShowWindow(SW_HIDE);
GUIPlatform.m_Param0.ShowWindow(SW_HIDE);
GUIPlatform.m_Param0Spin.ShowWindow(SW_HIDE);
}
}
else
{
@ -147,6 +167,7 @@ void CLayerPlatform::GUIThingUpdate(bool OnlySel)
GUIPlatform.m_Collision.SetCheck(false);
GUIPlatform.m_MoveList.SetCurSel(-1);
GUIPlatform.m_Type.SetCurSel(-1);
}
GUIPlatform.DisableCallback(false);
}
@ -168,6 +189,7 @@ void CLayerPlatform::GUIChanged(CCore *Core)
ThisThing.Data.Platform.PlatformCollisionFlag=GUIPlatform.m_Collision.GetCheck()!=0;
ThisThing.Data.Platform.PlatformMoveType=GUIPlatform.m_MoveList.GetCurSel();
ThisThing.Data.Platform.PlatformType=GUIPlatform.m_Type.GetCurSel();
ThisThing.Data.Platform.PlatformParam0=GUIPlatform.GetVal(GUIPlatform.m_Param0);
SetThingParams(ThisThing);
}
}

View File

@ -49,6 +49,7 @@ protected:
CGUILayerPlatform GUIPlatform;
};
/*****************************************************************************/

View File

@ -143,12 +143,12 @@ int i;
// Load GfxList
File->Read(&GfxCount,sizeof(int));
GfxList.resize(GfxCount);
for (i=0; i<GfxCount; i++)
{
sLayerShadeGfx &ThisGfx=GfxList[i];
File->Read(&ThisGfx,sizeof(sLayerShadeGfx));
}
if (GfxCount) CurrentGfx=0;
}
}
@ -243,7 +243,6 @@ float ZoomH=Core->GetZoomH();
Vector3 &Scale=Core->GetScaleVector();
Vector3 ScrOfs(ZoomW/2,ZoomH/2,0);
int i;
if (GfxBank->NeedLoad()) GfxBank->LoadAllSets(Core);
CElem Elem=GfxBank->GetElem(ThisGfx.Gfx,0);
@ -323,6 +322,7 @@ int i,ListSize;
GUIShade.m_GfxTransList.AddString("Subtractive");
GUIShade.m_GfxTransList.AddString("Another one");
GUIShade.m_GfxPosXSpin.SetRange(0,32000); GUIShade.m_GfxPosYSpin.SetRange(0,32000);
GUIShade.m_GfxSpinx0.SetRange(-32,+32); GUIShade.m_GfxSpiny0.SetRange(-32,+32);
GUIShade.m_GfxSpinx1.SetRange(-32,+32); GUIShade.m_GfxSpiny1.SetRange(-32,+32);
GUIShade.m_GfxSpinx2.SetRange(-32,+32); GUIShade.m_GfxSpiny2.SetRange(-32,+32);
@ -388,7 +388,7 @@ sLayerShadeGfx &ThisGfx=GfxList[CurrentGfx];
void CLayerShade::GUIChanged(CCore *Core)
{
int i,ListSize;
int LastGfx=CurrentGfx;
// Shade
for (i=0; i<LAYER_SHADE_MAX; i++)
{
@ -396,13 +396,12 @@ int i,ListSize;
}
GUIShade.GetVal(GUIShade.m_ShadeCount,ShadeCount,2,4);
// Gfx
GUIShade.GetVal(GUIShade.m_GfxCurrent,CurrentGfx);
ListSize=GfxList.size();
GUIShade.GetVal(GUIShade.m_GfxCurrent,ListSize,0,ListSize);
if (!ListSize || CurrentGfx==-1) return;
sLayerShadeGfx &ThisGfx=GfxList[CurrentGfx];
GUIShade.GetVal(GUIShade.m_GfxCurrent,ListSize,0,ListSize);
GUIShade.GetVal(GUIShade.m_GfxPosX,ThisGfx.Pos.x);
GUIShade.GetVal(GUIShade.m_GfxPosY,ThisGfx.Pos.y);
ThisGfx.Gfx=GUIShade.m_GfxBankList.GetCurSel();
@ -417,7 +416,10 @@ sLayerShadeGfx &ThisGfx=GfxList[CurrentGfx];
GUIShade.GetVal(GUIShade.m_Gfxx3,ThisGfx.Ofs[3].x); GUIShade.GetVal(GUIShade.m_Gfxy3,ThisGfx.Ofs[3].y);
ThisGfx.TransMode=GUIShade.m_GfxTransList.GetCurSel();
GUIUpdate(Core);
if (CurrentGfx!=LastGfx)
{
GUIUpdate(Core);
}
}
/*****************************************************************************/

View File

@ -57,6 +57,7 @@ public:
void Save(CFile *File);
void Export(CCore *Core,CExport &Exp);
virtual void LoadGfx(CCore *Core) {if (GfxBank->NeedLoad()) GfxBank->LoadAllSets(Core);}
// Functions
bool LButtonControl(CCore *Core,UINT nFlags, CPoint &CursorPos,bool DownFlag);

View File

@ -228,7 +228,6 @@ Vector3 ScrOfs(ZoomW/2,ZoomH/2,0);
ScrOfs.z=-4.0f;
}
if (ThingBank->NeedLoad()) ThingBank->LoadAllSets(Core);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
@ -353,6 +352,7 @@ bool Ret=false;
SelectThing(CursorPos);
break;
case MouseModeNew:
GUIChanged(Core);
AddThing(CursorPos);
break;
case MouseModePoints:

View File

@ -56,6 +56,8 @@ virtual void GUIChanged(CCore *Core);
int GetWidth();
int GetHeight();
virtual void LoadGfx(CCore *Core) {if (ThingBank->NeedLoad()) ThingBank->LoadAllSets(Core);}
virtual void GUIThingDefClear(){};
virtual void GUIThingUpdate(bool OnlySel=false){};
virtual void GUIThingUpdateList(CComboBox &List,bool OnlySel=false);

View File

@ -232,6 +232,16 @@ Vector3 Ofs;
}
}
/*****************************************************************************/
void CLayerTile::LoadGfx(CCore *Core)
{
if (TileBank->NeedLoad())
{
TileBank->LoadAllSets(Core);
Core->Validate(GetType());
}
}
/*****************************************************************************/
void CLayerTile::Render(CCore *Core,Vector3 &ThisCam,CMap &ThisMap,bool Render3d,float Alpha,Vector3 *Ofs)
{
@ -248,12 +258,6 @@ int StartY=(int)ThisCam.y;
float ShiftX=ThisCam.x - (int)ThisCam.x;
float ShiftY=ThisCam.y - (int)ThisCam.y;
if (TileBank->NeedLoad())
{
TileBank->LoadAllSets(Core);
Core->Validate(GetType());
}
if (StartX<0) StartX=0;
if (StartY<0) StartY=0;

View File

@ -52,7 +52,7 @@ virtual void GUIChanged(CCore *Core);
void Validate(CCore *Core);
void Export(CCore *Core,CExport &Exp);
void LoadGfx(CCore *Core);
// Functions
virtual bool LButtonControl(CCore *Core,UINT nFlags, CPoint &point,bool DownFlag);
virtual bool RButtonControl(CCore *Core,UINT nFlags, CPoint &point,bool DownFlag);

View File

@ -84,6 +84,7 @@ float Col=0.8f,A=0.8f;
glTranslatef(-ThisCam.x,ThisCam.y,0); // Set scroll offset
glTranslatef(-ScrOfs.x,ScrOfs.y,0); // Bring to top left corner
glPushMatrix();
glTranslatef(ThisThing.XY[0].x,-ThisThing.XY[0].y,0); // Set Pos
Core->RenderNumber(0);
@ -139,6 +140,39 @@ float H=-(ThisThing.Data.Trigger.TriggerHeight);
glEnd();
}
glPopMatrix();
if (Selected && ThingScript.GetInt(ThisThing.Name,"HasBox"))
{ // Draw Box
glTranslatef(ThisThing.Data.Trigger.TriggerTargetX,-ThisThing.Data.Trigger.TriggerTargetY,0); // Set Pos
W=ThisThing.Data.Trigger.TriggerTargetW;
H=-ThisThing.Data.Trigger.TriggerTargetH;
glBegin (GL_QUADS); // Draw Box
glColor4f(Col-0.25f,0,0,A/2.0f);
glVertex3f(0,0+1,0);
glVertex3f(W,0+1,0);
glVertex3f(W,H+1,0);
glVertex3f(0,H+1,0);
glEnd();
// Draw OutLine
glBegin(GL_LINES);
glColor4f(Col,Col,Col,A);
glVertex3f( 0,0+1,0);
glVertex3f( W,0+1,0);
glVertex3f( W,0+1,0);
glVertex3f( W,H+1,0);
glVertex3f( W,H+1,0);
glVertex3f( 0,H+1,0);
glVertex3f( 0,H+1,0);
glVertex3f( 0,0+1,0);
glEnd();
}
@ -157,10 +191,12 @@ void CLayerTrigger::GUIInit(CCore *Core)
Core->GUIAdd(GUIThing,IDD_LAYER_THING);
Core->GUIAdd(GUITrigger,IDD_LAYER_TRIGGER);
GUITrigger.DisableCallback(false);
GUITrigger.m_WidthSpin.SetRange(1,255);
GUITrigger.m_HeightSpin.SetRange(1,255);
GUITrigger.m_WidthSpin.SetRange(1,32000);
GUITrigger.m_HeightSpin.SetRange(1,32000);
GUITrigger.m_TargetXSpin.SetRange(0,32000);
GUITrigger.m_TargetYSpin.SetRange(0,32000);
GUITrigger.m_TargetWSpin.SetRange(1,32000);
GUITrigger.m_TargetHSpin.SetRange(1,32000);
}
/*****************************************************************************/
@ -199,7 +235,8 @@ CComboBox &List=GUIThing.m_DefList;
/*****************************************************************************/
void CLayerTrigger::GUIThingUpdate(bool OnlySel)
{
int TargetMode=SW_SHOW;
int TargetXYMode=SW_HIDE;
int TargetWHMode=SW_HIDE;
GUIThingUpdateList(GUIThing.m_List,false);
// Params
@ -211,23 +248,35 @@ int TargetMode=SW_SHOW;
GUITrigger.SetVal(GUITrigger.m_Height,ThisThing.Data.Trigger.TriggerHeight);
GUITrigger.SetVal(GUITrigger.m_TargetX,ThisThing.Data.Trigger.TriggerTargetX);
GUITrigger.SetVal(GUITrigger.m_TargetY,ThisThing.Data.Trigger.TriggerTargetY);
if (ThingScript.GetInt(ThisThing.Name,"HasTarget")==0)
GUITrigger.SetVal(GUITrigger.m_TargetW,ThisThing.Data.Trigger.TriggerTargetW);
GUITrigger.SetVal(GUITrigger.m_TargetH,ThisThing.Data.Trigger.TriggerTargetH);
if (ThingScript.GetInt(ThisThing.Name,"HasTarget"))
{
TargetMode=SW_HIDE;
TargetXYMode=SW_SHOW;
}
if (ThingScript.GetInt(ThisThing.Name,"HasBox"))
{
TargetXYMode=SW_SHOW;
TargetWHMode=SW_SHOW;
}
}
else
{
GUITrigger.m_Width.SetWindowText("");
GUITrigger.m_Height.SetWindowText("");
TargetMode=SW_HIDE;
}
GUITrigger.m_TargetTxt.ShowWindow(TargetMode);
GUITrigger.m_TargetX.ShowWindow(TargetMode);
GUITrigger.m_TargetY.ShowWindow(TargetMode);
GUITrigger.m_TargetXSpin.ShowWindow(TargetMode);
GUITrigger.m_TargetYSpin.ShowWindow(TargetMode);
GUITrigger.m_TargetTxt.ShowWindow(TargetXYMode);
GUITrigger.m_TargetX.ShowWindow(TargetXYMode);
GUITrigger.m_TargetY.ShowWindow(TargetXYMode);
GUITrigger.m_TargetXSpin.ShowWindow(TargetXYMode);
GUITrigger.m_TargetYSpin.ShowWindow(TargetXYMode);
GUITrigger.m_TargetWHTxt.ShowWindow(TargetWHMode);
GUITrigger.m_TargetW.ShowWindow(TargetWHMode);
GUITrigger.m_TargetH.ShowWindow(TargetWHMode);
GUITrigger.m_TargetWSpin.ShowWindow(TargetWHMode);
GUITrigger.m_TargetHSpin.ShowWindow(TargetWHMode);
GUITrigger.DisableCallback(false);
}
@ -248,6 +297,8 @@ void CLayerTrigger::GUIChanged(CCore *Core)
ThisThing.Data.Trigger.TriggerHeight=GUITrigger.GetVal(GUITrigger.m_Height);
ThisThing.Data.Trigger.TriggerTargetX=GUITrigger.GetVal(GUITrigger.m_TargetX);
ThisThing.Data.Trigger.TriggerTargetY=GUITrigger.GetVal(GUITrigger.m_TargetY);
ThisThing.Data.Trigger.TriggerTargetW=GUITrigger.GetVal(GUITrigger.m_TargetW);
ThisThing.Data.Trigger.TriggerTargetH=GUITrigger.GetVal(GUITrigger.m_TargetH);
}
}
@ -257,4 +308,8 @@ void CLayerTrigger::SetThingParams(sLayerThing &Thing)
Thing.Data.WaypointCount=1;
if (Thing.Data.Trigger.TriggerWidth<1) Thing.Data.Trigger.TriggerWidth=1;
if (Thing.Data.Trigger.TriggerHeight<1) Thing.Data.Trigger.TriggerHeight=1;
Thing.Data.Trigger.TriggerTargetX=Thing.XY[0].x; // Default target Pos
Thing.Data.Trigger.TriggerTargetY=Thing.XY[0].y;
Thing.Data.Trigger.TriggerTargetW=1;
Thing.Data.Trigger.TriggerTargetH=1;
}

View File

@ -2,7 +2,7 @@
[General Info]
Version=1
LastClass=CGUINewMap
LastClass=CGUILayerShade
LastTemplate=CDialog
NewFileInclude1=#include "stdafx.h"
NewFileInclude2=#include "mapedit.h"
@ -37,27 +37,27 @@ Class25=CMapEditDoc
Class26=CMapEditView
ResourceCount=21
Resource1=IDD_LAYER_COLLISION
Resource1=IDD_LAYER_HAZARD
Resource2=IDR_MAPEDITYPE (English (U.S.))
Resource3=IDD_ELEMLIST
Resource3=IDD_LAYER_COLLISION
Resource4=IDD_MULTIBAR (English (U.S.))
Resource5=IDD_LAYER_THING
Resource6=IDR_TOOLBAR (English (U.S.))
Resource7=IDD_LAYER_PLATFORM
Resource8=IDD_LAYER_TRIGGER
Resource9=IDD_TILEBANK
Resource10=IDD_NEWMAP
Resource11=IDR_MAINFRAME (English (U.S.))
Resource12=IDD_ABOUTBOX (English (U.S.))
Resource13=IDD_LAYER_ACTOR
Resource14=IDD_LAYER_LIST
Resource15=IDD_RESIZE
Resource16=IDD_LAYER_THING_POS
Resource17=IDD_ADDLAYER
Resource18=IDD_LAYER_FX
Resource19=IDD_TOOLBAR
Resource20=IDD_LAYER_SHADE
Resource21=IDD_LAYER_HAZARD
Resource5=IDD_LAYER_ACTOR
Resource6=IDD_LAYER_THING_POS
Resource7=IDD_LAYER_FX
Resource8=IDD_LAYER_PLATFORM
Resource9=IDD_ADDLAYER
Resource10=IDD_RESIZE
Resource11=IDD_LAYER_LIST
Resource12=IDD_LAYER_TRIGGER
Resource13=IDD_ELEMLIST
Resource14=IDR_TOOLBAR (English (U.S.))
Resource15=IDD_ABOUTBOX (English (U.S.))
Resource16=IDD_LAYER_THING
Resource17=IDD_NEWMAP
Resource18=IDR_MAINFRAME (English (U.S.))
Resource19=IDD_TILEBANK
Resource20=IDD_TOOLBAR
Resource21=IDD_LAYER_SHADE
[CLS:CChildFrame]
Type=0
@ -125,6 +125,9 @@ Type=0
BaseClass=CDialog
HeaderFile=GUILayerPlatform.h
ImplementationFile=GUILayerPlatform.cpp
Filter=D
VirtualFilter=dWC
LastObject=IDC_PLATFORM_PARAM_SPIN
[CLS:CGUILayerShade]
Type=0
@ -133,7 +136,7 @@ HeaderFile=GUILayerShade.h
ImplementationFile=GUILayerShade.cpp
Filter=D
VirtualFilter=dWC
LastObject=CGUILayerShade
LastObject=IDC_LAYERSHADE_GFX_XSPIN
[CLS:CGUILayerThing]
Type=0
@ -152,6 +155,9 @@ Type=0
BaseClass=CDialog
HeaderFile=GUILayerTrigger.h
ImplementationFile=GUILayerTrigger.cpp
Filter=D
VirtualFilter=dWC
LastObject=IDC_TRIGGER_TARGETW
[CLS:CGUIMultiBar]
Type=0
@ -317,7 +323,7 @@ Control3=IDC_LAYERLIST_DELETE,button,1342242816
[DLG:IDD_LAYER_PLATFORM]
Type=1
Class=CGUILayerPlatform
ControlCount=9
ControlCount=12
Control1=IDC_PLATFORM_SPEED_TEXT,static,1342308354
Control2=IDC_PLATFORM_SPEED,edit,1350633600
Control3=IDC_PLATFORM_SPEED_SPIN,msctls_updown32,1342177334
@ -327,6 +333,9 @@ Control6=IDC_PLATFORM_TURNRATE_SPIN,msctls_updown32,1342177334
Control7=IDC_PLATFORM_COLLISION,button,1342243363
Control8=IDC_PLATFORM_MOVE_TYPE,combobox,1344339971
Control9=IDC_PLATFORM_TYPE,combobox,1344339971
Control10=IDC_PLATFORM_PARAM0_TEXT,static,1342308354
Control11=IDC_PLATFORM_PARAM0,edit,1350633600
Control12=IDC_PLATFORM_PARAM_SPIN,msctls_updown32,1342177334
[DLG:IDD_LAYER_SHADE]
Type=1
@ -416,7 +425,7 @@ Control4=IDC_THING_POS_DELETE,button,1342242816
[DLG:IDD_LAYER_TRIGGER]
Type=1
Class=CGUILayerTrigger
ControlCount=10
ControlCount=15
Control1=IDC_TRIGGER_SIZE,static,1342308354
Control2=IDC_TRIGGER_WIDTH,edit,1350633600
Control3=IDC_TRIGGER_WIDTH_SPIN,msctls_updown32,1342177334
@ -427,6 +436,11 @@ Control7=IDC_TRIGGER_TARGETX,edit,1350633600
Control8=IDC_TRIGGER_TARGETX_SPIN,msctls_updown32,1342177334
Control9=IDC_TRIGGER_TARGETY,edit,1350633600
Control10=IDC_TRIGGER_TARGETY_SPIN,msctls_updown32,1342177334
Control11=IDC_TRIGGER_TEXT_TARGET_WH,static,1342308354
Control12=IDC_TRIGGER_TARGETW,edit,1350633600
Control13=IDC_TRIGGER_TARGETW_SPIN,msctls_updown32,1342177334
Control14=IDC_TRIGGER_TARGETH,edit,1350633600
Control15=IDC_TRIGGER_TARGETH_SPIN,msctls_updown32,1342177334
[DLG:IDD_MULTIBAR]
Type=1

View File

@ -644,16 +644,16 @@ BEGIN
ES_NUMBER | WS_GROUP
EDITTEXT IDC_LAYERSHADE_GFXB3,120,220,20,12,ES_AUTOHSCROLL |
ES_NUMBER | WS_GROUP
EDITTEXT IDC_LAYERSHADE_GFX_X,30,150,25,10,ES_AUTOHSCROLL |
EDITTEXT IDC_LAYERSHADE_GFX_X,30,150,35,10,ES_AUTOHSCROLL |
ES_READONLY | NOT WS_TABSTOP
CONTROL "Spin1",IDC_LAYERSHADE_GFX_XSPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,95,145,11,15
EDITTEXT IDC_LAYERSHADE_GFX_Y,55,150,25,10,ES_AUTOHSCROLL |
UDS_ARROWKEYS,124,146,11,15
EDITTEXT IDC_LAYERSHADE_GFX_Y,65,150,35,10,ES_AUTOHSCROLL |
ES_READONLY | NOT WS_TABSTOP
CONTROL "Spin3",IDC_LAYERSHADE_GFX_YSPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,110,145,11,15
UDS_ARROWKEYS,139,146,11,15
COMBOBOX IDC_LAYERSHADE_DEF_LIST,5,85,145,100,CBS_DROPDOWNLIST
END
@ -736,7 +736,7 @@ BEGIN
PUSHBUTTON "Pos Delete",IDC_THING_POS_DELETE,100,60,45,15
END
IDD_LAYER_PLATFORM DIALOG DISCARDABLE 0, 0, 156, 76
IDD_LAYER_PLATFORM DIALOG DISCARDABLE 0, 0, 156, 96
STYLE WS_CHILD
FONT 8, "MS Sans Serif"
BEGIN
@ -759,34 +759,51 @@ BEGIN
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_PLATFORM_TYPE,5,15,145,60,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
RTEXT "",IDC_PLATFORM_PARAM0_TEXT,5,70,35,8
EDITTEXT IDC_PLATFORM_PARAM0,41,70,35,12,ES_AUTOHSCROLL |
ES_READONLY
CONTROL "Spin1",IDC_PLATFORM_PARAM_SPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,75,70,11,10
END
IDD_LAYER_TRIGGER DIALOG DISCARDABLE 0, 0, 156, 46
IDD_LAYER_TRIGGER DIALOG DISCARDABLE 0, 0, 156, 71
STYLE WS_CHILD
FONT 8, "MS Sans Serif"
BEGIN
RTEXT "Size",IDC_TRIGGER_SIZE,5,5,17,8
EDITTEXT IDC_TRIGGER_WIDTH,25,5,24,12,ES_AUTOHSCROLL |
EDITTEXT IDC_TRIGGER_WIDTH,25,5,35,12,ES_AUTOHSCROLL |
ES_READONLY
CONTROL "Spin1",IDC_TRIGGER_WIDTH_SPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,90,5,11,10
EDITTEXT IDC_TRIGGER_HEIGHT,50,5,25,12,ES_AUTOHSCROLL |
UDS_ARROWKEYS,125,0,11,10
EDITTEXT IDC_TRIGGER_HEIGHT,60,5,35,12,ES_AUTOHSCROLL |
ES_READONLY
CONTROL "Spin1",IDC_TRIGGER_HEIGHT_SPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,100,5,11,10
UDS_ARROWKEYS,135,0,11,10
RTEXT "Target",IDC_TRIGGER_TARGET,0,25,22,8
EDITTEXT IDC_TRIGGER_TARGETX,25,25,24,12,ES_AUTOHSCROLL |
EDITTEXT IDC_TRIGGER_TARGETX,25,25,35,12,ES_AUTOHSCROLL |
ES_READONLY
CONTROL "Spin1",IDC_TRIGGER_TARGETX_SPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,90,25,11,10
EDITTEXT IDC_TRIGGER_TARGETY,50,25,25,12,ES_AUTOHSCROLL |
UDS_ARROWKEYS,125,20,11,10
EDITTEXT IDC_TRIGGER_TARGETY,60,25,35,12,ES_AUTOHSCROLL |
ES_READONLY
CONTROL "Spin1",IDC_TRIGGER_TARGETY_SPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,100,25,11,10
UDS_ARROWKEYS,135,20,11,10
RTEXT "WH",IDC_TRIGGER_TEXT_TARGET_WH,0,40,14,8
EDITTEXT IDC_TRIGGER_TARGETW,25,40,35,12,ES_AUTOHSCROLL |
ES_READONLY
CONTROL "Spin1",IDC_TRIGGER_TARGETW_SPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,125,35,11,10
EDITTEXT IDC_TRIGGER_TARGETH,60,40,35,12,ES_AUTOHSCROLL |
ES_READONLY
CONTROL "Spin1",IDC_TRIGGER_TARGETH_SPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,135,35,11,10
END
IDD_LAYER_FX DIALOG DISCARDABLE 0, 0, 156, 56
@ -795,18 +812,18 @@ FONT 8, "MS Sans Serif"
BEGIN
RTEXT "Speed",IDC_FX_SPEED_TEXT,5,25,20,8
RTEXT "Size",IDC_FX_SIZE_TEXT,5,5,17,8
EDITTEXT IDC_FX_WIDTH,25,5,24,12,ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_FX_WIDTH,25,5,35,12,ES_AUTOHSCROLL | ES_READONLY
CONTROL "Spin1",IDC_FX_WIDTH_SPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,90,5,11,10
EDITTEXT IDC_FX_HEIGHT,50,5,25,12,ES_AUTOHSCROLL | ES_READONLY
UDS_ARROWKEYS,120,5,11,10
EDITTEXT IDC_FX_HEIGHT,60,5,35,12,ES_AUTOHSCROLL | ES_READONLY
CONTROL "Spin1",IDC_FX_HEIGHT_SPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS,100,5,11,10
EDITTEXT IDC_FX_SPEED,25,25,24,12,ES_AUTOHSCROLL | ES_READONLY
UDS_ARROWKEYS,130,5,11,10
EDITTEXT IDC_FX_SPEED,25,25,35,12,ES_AUTOHSCROLL | ES_READONLY
CONTROL "Spin2",IDC_FX_SPEED_SPIN,"msctls_updown32",
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
UDS_ARROWKEYS | UDS_NOTHOUSANDS,50,25,11,13
UDS_ARROWKEYS | UDS_NOTHOUSANDS,130,25,11,13
END
IDD_LAYER_HAZARD DIALOG DISCARDABLE 0, 0, 156, 96
@ -957,7 +974,7 @@ BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 149
TOPMARGIN, 7
BOTTOMMARGIN, 69
BOTTOMMARGIN, 89
END
IDD_LAYER_TRIGGER, DIALOG
@ -965,7 +982,7 @@ BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 149
TOPMARGIN, 7
BOTTOMMARGIN, 39
BOTTOMMARGIN, 64
END
IDD_LAYER_FX, DIALOG

View File

@ -130,8 +130,11 @@
#define IDC_PLATFORM_MOVE_TYPE 1138
#define IDC_PLATFORM_TYPE 1139
#define IDC_TRIGGER_SIZE 1140
#define IDC_PLATFORM_PARAM0_TEXT 1140
#define IDC_TRIGGER_WIDTH 1141
#define IDC_PLATFORM_PARAM0 1141
#define IDC_TRIGGER_HEIGHT 1142
#define IDC_PLATFORM_PARAM_SPIN 1142
#define IDC_TRIGGER_WIDTH_SPIN 1143
#define IDC_FX_SPEED_TEXT 1144
#define IDC_TRIGGER_TARGET 1144
@ -141,12 +144,18 @@
#define IDC_FX_WIDTH 1147
#define IDC_TRIGGER_TARGETY 1147
#define IDC_FX_HEIGHT 1148
#define IDC_TRIGGER_TEXT_TARGET_WH 1148
#define IDC_FX_WIDTH_SPIN 1149
#define IDC_TRIGGER_TARGETW 1149
#define IDC_FX_HEIGHT_SPIN 1150
#define IDC_TRIGGER_TARGETW_SPIN 1150
#define IDC_FX_SPEED 1151
#define IDC_TRIGGER_TARGETH 1151
#define IDC_FX_SPEED_SPIN 1152
#define IDC_TRIGGER_HEIGHT_SPIN 1163
#define IDC_TRIGGER_TARGETY_SPIN 1164
#define IDC_TRIGGER_TARGETY_SPIN2 1165
#define IDC_TRIGGER_TARGETH_SPIN 1165
#define IDC_HAZARD_SPEED_TEXT 1169
#define IDC_HAZARD_TURNRATE_TEXT 1170
#define IDC_HAZARD_HEALTH_TEXT 1171
@ -186,7 +195,6 @@
#define IDC_LAYERSHADE_GFX_SPIN_Y3 1207
#define IDC_LAYERSHADE_GFX_TRANSLIST 1208
#define IDC_LAYERSHADE_GFX_X 1209
#define IDC_LAYERSHADE_GFX_NEW 1210
#define IDC_LAYERSHADE_GFX_XSPIN 1211
#define IDC_LAYERSHADE_GFX_Y 1212
#define IDC_LAYERSHADE_GFX_YSPIN 1213

View File

@ -32,7 +32,7 @@ char szBuf[256];
}
/**************************************************************************************/
const int TexAlignTable[]={1,2,4,8,16,32,64,128,256};
const int TexAlignTable[]={1,2,4,8,16,32,64,128,256,512,1024};
const int TexAlignTableSize=sizeof(TexAlignTable)/sizeof(int);
int AlignSize(int Size)
{

View File

@ -65,6 +65,7 @@ int i,ListSize=ThingList.size();
OutThing.Flags=ThisThing.Data.Platform.PlatformCollisionFlag;
OutThing.PointCount=PointCount;
OutThing.Gfx=RemapTable[i];
OutThing.Param0=ThisThing.Data.Platform.PlatformParam0;
fwrite(&OutThing,sizeof(sThingPlatform),1,File);
for (p=0;p<PointCount;p++)

View File

@ -33,7 +33,6 @@ sRGBCol *RGB=(sRGBCol*)iPtr;
ShadeHdr.RGB[i][2]=RGB->B;
RGB++;
}
iPtr=(int*)RGB;
ListSize=*iPtr++;
@ -41,10 +40,11 @@ sRGBCol *RGB=(sRGBCol*)iPtr;
sLayerShadeGfx *GfxPtr=(sLayerShadeGfx*)iPtr;
for (i=0; i<ListSize; i++)
{
sLayerShadeGfx &ThisGfx=GfxList[i];
GfxList[i]=*GfxPtr++;
}
iPtr=(int*)GfxPtr;
iPtr=(int*)GfxPtr;
ListSize=*iPtr++;
TypeNameList.resize(ListSize);
char *TypePtr=(char*)iPtr;
@ -132,13 +132,20 @@ int ThisPos=ftell(File);
Hdr.Height=Height;
fwrite(&Hdr,sizeof(sLayerHdr),1,File);
// Write Gfx Stuff
ShadeHdr.TypeList=(sLayerShadeBackGfxType*)WriteTypeList(File);
ShadeHdr.GfxList=(sLayerShadeBackGfx*)WriteGfxList(File);
int HdrPos=ftell(File);
fwrite(&ShadeHdr,sizeof(sLayerShadeHdr),1,File);
PadFile(File);
// Write Gfx Stuff
ShadeHdr.GfxList=(sLayerShadeBackGfx*)(WriteGfxList(File)-ThisPos);
ShadeHdr.TypeList=(sLayerShadeBackGfxType*)(WriteTypeList(File)-ThisPos);
// rewrite header
int RetPos=ftell(File);
fseek(File,HdrPos,SEEK_SET);
fwrite(&ShadeHdr,sizeof(sLayerShadeHdr),1,File);
fseek(File,RetPos,SEEK_SET);
return(ThisPos);
}
@ -164,11 +171,11 @@ int CMkLevelLayerShade::WriteGfxList(FILE *File)
int Pos=ftell(File);
int i,ListSize=GfxList.size();
ShadeHdr.GfxCount=GfxList.size();
ShadeHdr.GfxCount=ListSize;
for (i=0; i<ListSize; i++)
{
sLayerShadeGfx &ThisGfx=GfxList[i];
sLayerShadeGfx &ThisGfx=GfxList[i];
sLayerShadeBackGfx Out;
Out.Type=ThisGfx.Gfx;
@ -177,12 +184,13 @@ int i,ListSize=GfxList.size();
Out.Trans=ThisGfx.TransMode;
for (int p=0; p<4; p++)
{
Out.Ofs[i][0]=ThisGfx.Ofs[i].x;
Out.Ofs[i][1]=ThisGfx.Ofs[i].y;
Out.RGB[i][0]=ThisGfx.RGB[i].R;
Out.RGB[i][1]=ThisGfx.RGB[i].G;
Out.RGB[i][2]=ThisGfx.RGB[i].B;
Out.Ofs[p][0]=ThisGfx.Ofs[p].x;
Out.Ofs[p][1]=ThisGfx.Ofs[p].y;
Out.RGB[p][0]=ThisGfx.RGB[p].R;
Out.RGB[p][1]=ThisGfx.RGB[p].G;
Out.RGB[p][2]=ThisGfx.RGB[p].B;
}
fwrite(&Out,sizeof(sLayerShadeBackGfx),1,File);
}
return(Pos);
}

View File

@ -56,6 +56,8 @@ int i,ListSize=ThingList.size();
OutThing.Height=ThisThing.Data.Trigger.TriggerHeight;
OutThing.TargetPos.X=ThisThing.Data.Trigger.TriggerTargetX;
OutThing.TargetPos.Y=ThisThing.Data.Trigger.TriggerTargetY;
OutThing.TargetSize.X=ThisThing.Data.Trigger.TriggerTargetW;
OutThing.TargetSize.Y=ThisThing.Data.Trigger.TriggerTargetH;
fwrite(&OutThing,sizeof(sThingTrigger),1,File);
}

View File

@ -105,6 +105,7 @@ GFName Path;
FlatFace[0].uv[0][0]=1; FlatFace[0].uv[0][1]=1;
FlatFace[0].uv[1][0]=0; FlatFace[0].uv[1][1]=0;
FlatFace[0].uv[2][0]=1; FlatFace[0].uv[2][1]=0;
FlatFace[0].Flags=0;
FlatFace[1].vtx[0].x=-0.5f; FlatFace[1].vtx[0].y= 0.0f; FlatFace[1].vtx[0].z=-4.0f;
FlatFace[1].vtx[1].x=+0.5f; FlatFace[1].vtx[1].y=+1.0f; FlatFace[1].vtx[1].z=-4.0f;
@ -112,6 +113,7 @@ GFName Path;
FlatFace[1].uv[0][0]=0; FlatFace[1].uv[0][1]=0;
FlatFace[1].uv[1][0]=1; FlatFace[1].uv[1][1]=1;
FlatFace[1].uv[2][0]=0; FlatFace[1].uv[2][1]=1;
FlatFace[1].Flags=0;
}
@ -166,9 +168,7 @@ int TriCount=NodeTriList.size();
if (Mat>SceneTexList.size()) GObject::Error(ERR_FATAL,"Crap Material ID, wanted %i, only have %i\n",Mat,SceneTexList.size());
GString TexName=RootPath+SceneTexList[Mat];
CFace &F=ModelFaceList.AddFace( NodeVtxList, NodeTriList[T], NodeUVList[T], TexName,SceneMaterials[Mat].Flags,false);
// ModelFaceList.SetTPageFlag(F,SceneMaterials[Mat].Flags);
}
int ChildCount=ThisNode.GetPruneChildCount();
@ -200,7 +200,7 @@ int Idx;
CFace F;
ExpTri2Face(ThisTri,F);
ModelFaceList.SetTPageFlag(F,ThisTri.Flags);
ModelFaceList.SetTPageFlag(F,ThisTri.Flags*0);
ModelFaceList.AddFace(F,false);
}
@ -225,7 +225,7 @@ int TriStart=OutFaceList.GetFaceCount();
ListSize=ModelList.size();
for (i=0; i<ListSize; i++)
{
printf("%s = %i %i\n",ModelList[i].Name,ModelList[i].TriStart,ModelList[i].TriCount);
// printf("%s = %i %i\n",ModelList[i].Name,ModelList[i].TriStart,ModelList[i].TriCount);
ModelList[i].TriStart+=TriStart;
}
}
@ -303,6 +303,7 @@ u8 *TilePtr=(u8*) &ByteHdr[FileHdr->TileOfs];
sExpTile &InTile=InTileList[i];
InTile=*ThisTilePtr;
// Skip RGB Image, not needed (and too buggy)
// InTile.RGB=(u8*)malloc(RGBSize);
// memcpy(InTile.RGB,TilePtr+sizeof(sExpTile),RGBSize);
InTile.RGB=0;
@ -573,7 +574,7 @@ int TileID=OutTile3dList.size();
for (i=0; i<SrcTile.TriCount; i++)
{
int ListPos;
sExpTri ThisTri=InTriList[SrcTile.TriStart+i];
sExpTri &ThisTri=InTriList[SrcTile.TriStart+i];
float ThisZPos;
ThisZPos=ThisTri.vtx[0].z;
@ -592,15 +593,19 @@ int TileID=OutTile3dList.size();
}
else
{ // create flat tile (This is WRONG, flip tex are gen, need to flip goem)
int TexID=Create2dTex(InTile.Tile,InTile.Flags);
// int TexID=Create2dTex(InTile.Tile,InTile.Flags);
int TexID=Create2dTex(InTile.Tile,0);
ThisTile.TriCount=2;
for (int i=0; i<2; i++)
{
FlatFace[i].Flags=0;
FlatFace[i].TexID=TexID;
SortList.push_back(FlatFace[i]);
}
InTile.Flags=0;
// InTile.Flags=0;
}
// Add sorted list to main list
@ -668,24 +673,25 @@ int TileID=OutTile3dList.size();
int CMkLevel::Create2dTex(int Tile,int Flags)
{
sExpTile &SrcTile=InTileList[Tile];
//sMkLevelTex InTex;
// InTex.RGB=SrcTile.RGB;
// Try and find RGB data match
// not working
// Idx=FindRGBMatch(InTex);
// if (Idx!=-1) return(Idx);
sMkLevelTex InTex;
int Idx;
// Must be new, add it
// InTex.Set=SrcTile.Set;
// InTex.Flags=Flags;
// InTex.XOfs=SrcTile.XOfs;
// InTex.YOfs=SrcTile.YOfs;
InTex.Tile=Tile;
InTex.Flags=Flags;
Idx=Tex2dList.Find(InTex);
int TexID=BuildTileTex(SrcTile,Flags);
// Tex2dList.push_back(InTex);
return(TexID);
if (Idx!=-1)
{
return(Tex2dList[Idx].TexID);
}
InTex.TexID=BuildTileTex(SrcTile,Flags);
Tex2dList.push_back(InTex);
return(InTex.TexID);
}
//***************************************************************************
@ -980,7 +986,7 @@ int i,ListSize=QuadList.size();
// Write It
fwrite(&Q,1,sizeof(sQuad),File);
}
printf("Quad %i\n",ListSize,MaxOT);
printf("Quad %i\n",ListSize);
return(ThisPos);
}
@ -1090,9 +1096,40 @@ int Ofs=ftell(File);
Out.TriCount=ThisModel.TriCount;
Out.TriStart=ThisModel.TriStart;
printf("Writing Model %s (%i/%i)- %i Tris\n",ThisModel.Name,i+1,ListSize,Out.TriCount);
CalcModelBBox(ThisModel,Out.BBox);
printf("Writing Model %s (%i/%i) (%i Tris) (BBox %i,%i->%i,%i)\n",ThisModel.Name,i+1,ListSize,Out.TriCount,Out.BBox.XMin,Out.BBox.YMin,Out.BBox.XMax,Out.BBox.YMax);
fwrite(&Out,1,sizeof(sModel),File);
}
return(Ofs);
}
//***************************************************************************
void CMkLevel::CalcModelBBox(sMkLevelModel &ThisModel,sBBox &BBox)
{
vector<sTri> &TriList=OutFaceList.GetOutTriList();
vector<sVtx> const &VtxList=OutFaceList.GetVtxList();
int Vtx[3];
BBox.XMin=+32000;
BBox.XMax=-32000;
BBox.YMin=+32000;
BBox.YMax=-32000;
for (int T=0; T<ThisModel.TriCount; T++)
{
sTri &ThisTri=TriList[T+ThisModel.TriStart];
Vtx[0]=ThisTri.P0;
Vtx[1]=ThisTri.P1;
Vtx[2]=ThisTri.P2;
for (int V=0; V<3; V++)
{
sVtx const &ThisVtx=VtxList[Vtx[V]];
if (BBox.XMin>+ThisVtx.vx) BBox.XMin=+ThisVtx.vx;
if (BBox.XMax<+ThisVtx.vx) BBox.XMax=+ThisVtx.vx;
if (BBox.YMin>-ThisVtx.vy) BBox.YMin=-ThisVtx.vy;
if (BBox.YMax<-ThisVtx.vy) BBox.YMax=-ThisVtx.vy;
}
}
}

View File

@ -37,6 +37,26 @@ bool operator ==(sMkLevelTex const &v1)
}
};
*/
struct sMkLevelTex
{
// int Set;
// int XOfs,YOfs;
int Tile;
int Flags;
int TexID;
bool operator ==(sMkLevelTex const &v1)
{
// if (Set!=v1.Set) return(false);
// if (XOfs!=v1.XOfs) return(false);
// if (YOfs!=v1.YOfs) return(false);
if (Tile!=v1.Tile) return(false);
if (Flags!=v1.Flags) return(false);
return(true);
}
};
//***************************************************************************
struct sMkLevelModel
{
@ -112,7 +132,7 @@ protected:
int WriteQuadList();
int WriteVtxList();
void WriteTileBank();
void CalcModelBBox(sMkLevelModel &ThisModel,sBBox &BBox);
void BuildTiles();
void ExpTri2Face(sExpTri &In,CFace &Out,bool ImportTex=true);
@ -138,7 +158,7 @@ protected:
CList<sExpLayerTile> Tile2dList;
CList<sExpLayerTile> Tile3dList;
// CList<sMkLevelTex> Tex2dList;
CList<sMkLevelTex> Tex2dList;
CTexGrab TexGrab;
CList<Frame> BmpList;

View File

@ -37,7 +37,7 @@ struct sLang
struct sInFile
{
char Name[32];
char Name[256];
int Chunks;
int Offset;
};
@ -211,6 +211,7 @@ sInFile InFile;
InFile.Chunks=0;
while (!IsWhiteSpace(*Ptr) && Ptr<EndPtr) InFile.Name[i++]=*Ptr++;
InFile.Name[i]=0;
strupr(InFile.Name);
FileList.push_back(InFile);
// printf("%s\n",InFile.Name);
}
@ -308,7 +309,7 @@ int FileCount=FileList.size();
int Offset=0;
sprintf(HdrStr,"__%s_SPEECH_DEFINES_H__",strupr(fname));
sprintf(EqStr,"%s_STR_",strupr(fname));
sprintf(EqStr,"%s_SPEECH_",strupr(fname));
OutFile= fopen( IncludeFilename,"wt" );
if(!OutFile)
@ -326,7 +327,7 @@ int Offset=0;
sInFile &ThisFile=FileList[File];
ConvertString(ThisFile.Name);
fprintf( OutFile, "%s%s = 0x%x,\n", EqStr,ThisFile.Name, Offset+(BankNo<<BANK_SHIFT));
fprintf( OutFile, "%s%s = 0x%x,\n", "SPEECH_",ThisFile.Name, Offset+(BankNo<<BANK_SHIFT));
Offset+=ThisFile.Chunks+1; // +1 for pad
}
fprintf( OutFile, "};\n" );

View File

@ -50,7 +50,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"C:\PRLSR\tools\MkSpeech.exe"
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"..\..\tools\MkSpeech.exe"
!ELSEIF "$(CFG)" == "MkSpeech - Win32 Debug"
@ -63,6 +63,7 @@ LINK32=link.exe
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c

View File

@ -46,6 +46,8 @@
#include "level\level.h"
#endif
#include "sound\sound.h"
#include "sound\speech.h"
/* Std Lib
------- */
@ -78,6 +80,134 @@
/*----------------------------------------------------------------------
Vars
---- */
struct sSpeechTable
{
int TextID;
int SpeechID;
};
const sSpeechTable SpeechTable[]=
{
{-1,SPEECH_CH1_BREAD},
{STR__INGAME__CH1__L2__SANDY3 ,SPEECH_CH1_HELMET},
{STR__INGAME__CH1__L2__SANDY2 ,SPEECH_CH1_I_LIKE_YOU},
{STR__INGAME__CH2__L1__KRUSTY1 ,SPEECH_CH1_SPNGEBOB_ARRRG},
{STR__INGAME__CH1__L4__KRUSTY2 ,SPEECH_CH1_SPONGEBOB_VACATION},
{STR__INGAME__CH1__L2__SANDY1 ,SPEECH_CH1_TAKE_THAT_YOU},
{-1,SPEECH_CH1_YIPPE},
{-1,SPEECH_SPONGEBOB_ANNOYING_LAUGH},
{-1,SPEECH_SPONGEBOB_BREATHING},
{-1,SPEECH_SPONGEBOB_BUBBLEBLOW},
{-1,SPEECH_SPONGEBOB_BURP},
{-1,SPEECH_SPONGEBOB_COUGH_COUGH},
{-1,SPEECH_SPONGEBOB_HIYA},
{-1,SPEECH_SPONGEBOB_IM_READY},
{-1,SPEECH_SPONGEBOB_I_LOVE_BIKIBI_BOTTOM},
{-1,SPEECH_SPONGEBOB_I_NEED_WATER},
{-1,SPEECH_SPONGEBOB_LET_ME_JUST_GRAB},
{-1,SPEECH_SPONGEBOB_OPPPS_PANTS},
{-1,SPEECH_SPONGEBOB_OUCH},
{-1,SPEECH_SPONGEBOB_YIKES},
{-1,SPEECH_SPONGEBOB_YOU_CANT_FOOL_ME},
{-1,SPEECH_CH2_BACK_ALREADY},
{-1,SPEECH_CH2_BACK_TO_MERMAID_MAN},
{-1,SPEECH_CH2_FIND_FALSE_TEETH},
{-1,SPEECH_CH2_GARY_FOLLOW_ME},
{STR__INGAME__CH2__L2__PATRICK1 ,SPEECH_CH2_HEY_SPNGEBOB},
{STR__INGAME__CH2__L2__PATRICK2 ,SPEECH_CH2_HWERE_USE_MY_BALLON},
{-1,SPEECH_CH2_IM_ON_MY_WAY},
{-1,SPEECH_CH2_IM_READY_OOPS},
{-1,SPEECH_CH2_MOIST},
{STR__INGAME__CH4__L3__KRUSTY1 ,SPEECH_CH2_NOW_LISTEN_BOY},
{STR__INGAME__CH2__L1__KRUSTY2 ,SPEECH_CH2_USE_THE_CORAL_BLOWER},
{-1,SPEECH_CH2_YIPEE},
{-1,SPEECH_SQUIDWARD_ARE_YOU_INSANE},
{-1,SPEECH_SQUIDWARD_CAN_WE_LOWER_VOLUME},
{-1,SPEECH_SQUIDWARD_HAHAHONKHONK},
{-1,SPEECH_SQUIDWARD_HMM_OH_BOY},
{-1,SPEECH_SQUIDWARD_HOW_DID_I},
{-1,SPEECH_SQUIDWARD_TUT},
{STR__INGAME__CH3__L1__PLANKTON1 ,SPEECH_CH3_BLAST_YOU_SPONGEBREATH},
{-1,SPEECH_CH3_BY_THE_POWER_OF_NEPTUNE},
{STR__INGAME__CH3__L3__PATRICK1 ,SPEECH_CH3_DADADADADA},
{STR__INGAME__CH3__L3__PATRICK2 ,SPEECH_CH3_DIPPED_AND_READY_TO_GO},
{-1,SPEECH_CH3_GASP},
{-1,SPEECH_CH3_HAHAHAHAHAHA},
{-1,SPEECH_CH3_HA_TO_THE_KELP_JUNGLE},
{-1,SPEECH_CH3_LOOK_WHAT_IVE_GOT_FOR_YOU},
{-1,SPEECH_CH3_LOOK_YOU_ARE_BUGGING_ME},
{-1,SPEECH_CH3_PATRICK},
{-1,SPEECH_CH3_SURPRISE_IM_BACK},
{-1,SPEECH_CH3_TARZAN},
{-1,SPEECH_CH3_THAT_IS_AMAZING},
{-1,SPEECH_CH3_UH_OH_THOSE_PLANTS},
{-1,SPEECH_CH3_UNIFORMS},
{-1,SPEECH_CH3_WHATS_THAT_SMELL},
{-1,SPEECH_DUTCHMAN_BET_YOUR_LIVERS},
{-1,SPEECH_DUTCHMAN_HAHA_YOU_SCALLYWAGS},
{-1,SPEECH_DUTCHMAN_IM_GONNA_STEAL_YOUR_SOUL},
{-1,SPEECH_DUTCHMAN_WAHAHA},
{-1,SPEECH_PARTY_HAPPY_BIRTHADAY_PATRICK},
{-1,SPEECH_PARTY_STAND_STILL},
{-1,SPEECH_PARTY_TODAY_IS_MY_BIRTDAY_HMMMM},
{-1,SPEECH_CH4_DOES_A_SNAIL_MEOW},
{-1,SPEECH_CH4_HMM_THATS_FUNNY___I_KNOW},
{-1,SPEECH_CH4_SQUEAKYBOOTS},
{-1,SPEECH_CH4_TARTAR},
{-1,SPEECH_CH4_THIS_ONES_EMPTY_TOO},
{-1,SPEECH_CH4_THIS_ONE_TOO},
{-1,SPEECH_CH4_TV_FIXED},
{STR__INGAME__CH4__L3__KRUSTY2 ,SPEECH_CH4_WEAR_YOUR_BOOTS},
{-1,SPEECH_CH4_YIHEEE_IVE_GOT_A_KANDY_BAR},
{-1,SPEECH_PATRICK_ANYONE_WANT_A_DANC3},
{-1,SPEECH_PATRICK_DONT_WORRY_BUDDY},
{-1,SPEECH_PATRICK_HURH_HURH},
{-1,SPEECH_PATRICK_ITS_MY_BIRTDAY},
{-1,SPEECH_PATRICK_MERRY_XMAS},
{-1,SPEECH_PATRICK_TECHNIQUE},
{-1,SPEECH_PATRICK_YIKES},
{-1,SPEECH_PATRICK_YOUR_DOING_FINE},
{-1,SPEECH_CH5_BIRTDAY_SURPRISE},
{-1,SPEECH_CH5_CONGFRATUS},
{-1,SPEECH_CH5_FIND_AN_AERIAL},
{-1,SPEECH_CH5_FREINDSHIP_PRICELESS},
{-1,SPEECH_CH5_NEED_A_TV_FIXED},
{-1,SPEECH_CH5_NEED_MONKEY_WRENCH},
{-1,SPEECH_CH5_NOPE_JUST_FORCE_THAT},
{-1,SPEECH_CH5_OILRIG_IDEA},
{-1,SPEECH_CH5_POURUS_FRTEAK},
{-1,SPEECH_SANDY_HEHEHEHEHEHE},
{-1,SPEECH_SANDY_HIYAH},
{-1,SPEECH_SANDY_HOLD_ON_THERE_DUDE},
{-1,SPEECH_SANDY_I_LIKE_YOU_SPONGEBOB},
{-1,SPEECH_SANDY_TAKE_THAT_YOU_OLD},
{-1,SPEECH_SANDY_YEEHAR},
{-1,SPEECH_SANDY_YOUR_A_FUNNY_LITTLE},
{-1,SPEECH_INTRO_AH_HERE_WE_ARE_AT},
{-1,SPEECH_INTRO_GARY_I_JUST_HAD_AN_IDEA},
{STR__INGAME__CH1__L1__SPONGEY1 ,SPEECH_INTRO_HI_SQUIDWOOD_READY_FOR_A},
{-1,SPEECH_INTRO_ITS_MY_BEST_FRIEND},
{-1,SPEECH_INTRO_LIKE_A_CALCULATOR},
{STR__INGAME__CH1__L1__SQUIDWARD2 ,SPEECH_INTRO_LOOK_SPONGEBOB},
{-1,SPEECH_INTRO_MEOW},
{-1,SPEECH_INTRO_OH_NO_NOT_YOU_AGAIN},
{-1,SPEECH_INTRO_SEANUT_BUTTER},
{STR__INGAME__CH1__L1__SQUIDWARD1 ,SPEECH_INTRO_TODAYS_SUNDAY},
{-1,SPEECH_INTRO_TODAY_HE_IS_IN_SEARCH},
{-1,SPEECH_INTRO_WELL_WE_ARE_A_BIT_BUSY},
{-1,SPEECH_INTRO_YIPPED____NOW},
{-1,SPEECH_KRABS_HELLO_ME_BOY},
{-1,SPEECH_KRABS_ILL_BE_IN_MY_QUARTERS},
{-1,SPEECH_KRABS_WELL_LAD},
{-1,SPEECH_PLANKTON_COLLEGE},
{-1,SPEECH_PLANKTON_GVE_ME_THE_PATTY},
{-1,SPEECH_PLANKTON_HAND_ME_CRABBY_PATTY},
{-1,SPEECH_PLANKTON_MWAHAHHAHA},
{-1,SPEECH_PLANKTON_OUCH},
{-1,SPEECH_PLANKTON_THIS_STINKS},
{-1,SPEECH_PLANKTON_YOU_POROUS_FREAK},
};
const int SpeechTableSize=sizeof(SpeechTable)/sizeof(sSpeechTable);
CConversation::CHAR_ICON_FRAMES CConversation::s_characterIconFrames[]=
{
@ -178,6 +308,7 @@ void CConversation::think(int _frames)
{
s_currentScript=NULL;
s_currentState=STATE_INACTIVE;
CSoundMediator::stopSpeech();
}
}
}
@ -270,6 +401,15 @@ void CConversation::setCharacterAndText(int _characterId,int _textId)
s_faceFrame=(s_characterIconFrames[_characterId].m_frame);
s_speechId=_textId;
s_TextOffset=0;
for (int i=0; i<SpeechTableSize; i++)
{
if (SpeechTable[i].TextID==_textId)
{
CSoundMediator::playSpeech((SpeechEquate)SpeechTable[i].SpeechID);
break;
}
}
}

View File

@ -558,7 +558,7 @@ POLY_FT4 *Ft4;
}
else
{
printf("NO FREE NODES\n");
// printf("NO FREE NODES\n");
ThisNode=PoolEntry->ActorCache.Head;
}
ASSERT(ThisNode);

View File

@ -624,7 +624,7 @@ void CSoundMediator::stopAllSfx()
void CSoundMediator::playSpeech(SpeechEquate _speech)
{
stopSpeech();
CXAStream::PlaySpeech(_speech);
CXAStream::PlaySpeech(_speech,1);
// s_volumeDirty[SPEECH]=true; // Force a volume update
}