Formatted TIKI source files

This commit is contained in:
smallmodel 2023-11-06 18:08:21 +01:00
parent dcbb39d640
commit 17af75a9bb
No known key found for this signature in database
GPG key ID: 9F2D623CEDF08512
30 changed files with 3767 additions and 4086 deletions

View file

@ -1,7 +1,6 @@
/*
===========================================================================
Copyright (C) 2008 Leszek Godlewski
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -21,8 +20,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
===========================================================================
*/
#ifndef __TIKI_H__
#define __TIKI_H__
#pragma once
#include "q_shared.h"
@ -30,86 +28,86 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#ifdef __cplusplus
class Archiver;
#include "../qcommon/mem_blockalloc.h"
#include "../qcommon/con_set.h"
#include "../qcommon/str.h"
# include "../qcommon/mem_blockalloc.h"
# include "../qcommon/con_set.h"
# include "../qcommon/str.h"
#endif
typedef struct AliasList_s AliasList_t;
typedef struct AliasList_s AliasList_t;
typedef struct AliasListNode_s AliasListNode_t;
typedef struct msg_s msg_t;
typedef struct msg_s msg_t;
typedef struct {
int indexes[ 3 ];
int indexes[3];
} tikiTriangle_t;
typedef struct {
float st[ 2 ];
float st[2];
} tikiSt_t;
typedef struct {
short unsigned int xyz[ 3 ];
short int normal;
short unsigned int xyz[3];
short int normal;
} tikiXyzNormal_t;
typedef struct {
float origin[ 3 ];
float axis[ 3 ][ 3 ];
float origin[3];
float axis[3][3];
} tikiTagData_t;
typedef struct {
char name[ 64 ];
char name[64];
} tikiTag_t;
typedef struct {
qboolean valid;
int surface;
vec3_t position;
vec3_t normal;
float damage_multiplier;
qboolean valid;
int surface;
vec3_t position;
vec3_t normal;
float damage_multiplier;
} tikimdl_intersection_t;
typedef struct {
int indexes[ 3 ];
int indexes[3];
} skelTriangle_t;
typedef struct dtikicmd_s {
int frame_num;
int num_args;
char **args;
int frame_num;
int num_args;
char **args;
} dtikicmd_t;
typedef struct {
int frame_num;
int num_args;
char **args;
char location[ 256 ];
int frame_num;
int num_args;
char **args;
char location[256];
} dloadframecmd_t;
typedef struct {
int num_args;
char **args;
int num_args;
char **args;
} dloadinitcmd_t;
typedef struct {
char name[ 32 ];
char shader[ 4 ][ 64 ];
int numskins;
int flags;
float damage_multiplier;
char name[32];
char shader[4][64];
int numskins;
int flags;
float damage_multiplier;
} dloadsurface_t;
typedef struct {
char *alias;
char name[ 128 ];
char location[ 256 ];
float weight;
float blendtime;
int flags;
int num_client_cmds;
int num_server_cmds;
dloadframecmd_t *loadservercmds[ 32 ];
dloadframecmd_t *loadclientcmds[ 128 ];
char *alias;
char name[128];
char location[256];
float weight;
float blendtime;
int flags;
int num_client_cmds;
int num_server_cmds;
dloadframecmd_t *loadservercmds[32];
dloadframecmd_t *loadclientcmds[128];
} dloadanim_t;
typedef struct dloaddef_s dloaddef_t;
@ -119,26 +117,26 @@ typedef struct dloaddef_s dloaddef_t;
#ifdef __cplusplus
typedef struct dloaddef_s {
const char *path;
class TikiScript tikiFile;
const char *path;
class TikiScript tikiFile;
dloadanim_t *loadanims[ 4095 ];
dloadinitcmd_t *loadserverinitcmds[ 160 ];
dloadinitcmd_t *loadclientinitcmds[ 160 ];
dloadanim_t *loadanims[4095];
dloadinitcmd_t *loadserverinitcmds[160];
dloadinitcmd_t *loadclientinitcmds[160];
int skelIndex_ld[ 12 ];
int numanims;
int numserverinitcmds;
int numclientinitcmds;
int skelIndex_ld[12];
int numanims;
int numserverinitcmds;
int numclientinitcmds;
char headmodels[ 4096 ];
char headskins[ 4096 ];
qboolean bIsCharacter;
char headmodels[4096];
char headskins[4096];
qboolean bIsCharacter;
struct msg_s *modelBuf;
unsigned char modelData[ 8192 ];
struct msg_s *modelBuf;
unsigned char modelData[8192];
qboolean bInIncludesSection;
qboolean bInIncludesSection;
} dloaddef_t;
#endif
@ -158,5 +156,3 @@ typedef struct dloaddef_s {
#include "../tiki/tiki_frame.h"
#include "../tiki/tiki_surface.h"
#include "../tiki/tiki_mesh.h"
#endif // __TIKI_H__

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -27,34 +27,31 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "tiki.h"
#include "../tiki/tiki_shared.h"
int cache_numskel = 0;
int cache_maxskel = 0;
skelcache_t skelcache[ TIKI_MAX_SKELCACHE ];
int cache_numskel = 0;
int cache_maxskel = 0;
skelcache_t skelcache[TIKI_MAX_SKELCACHE];
/*
===============
TIKI_AddPointToBounds
===============
*/
void TIKI_AddPointToBounds( float *v, float *mins, float *maxs )
void TIKI_AddPointToBounds(float *v, float *mins, float *maxs)
{
int i;
vec_t val;
int i;
vec_t val;
for( i = 0; i < 3; i++ )
{
val = v[ i ];
for (i = 0; i < 3; i++) {
val = v[i];
if( val < mins[ i ] )
{
mins[ i ] = val;
}
if (val < mins[i]) {
mins[i] = val;
}
if( val > maxs[ i ] )
{
maxs[ i ] = val;
}
}
if (val > maxs[i]) {
maxs[i] = val;
}
}
}
/*
@ -62,15 +59,15 @@ void TIKI_AddPointToBounds( float *v, float *mins, float *maxs )
TIKI_Message
===============
*/
void TIKI_Message( const char *fmt, ... )
void TIKI_Message(const char *fmt, ...)
{
char msg[ 1024 ];
va_list va;
char msg[1024];
va_list va;
va_start( va, fmt );
vsprintf( msg, fmt, va );
va_end( va );
Skel_DPrintf( msg );
va_start(va, fmt);
vsprintf(msg, fmt, va);
va_end(va);
Skel_DPrintf(msg);
}
/*
@ -78,15 +75,15 @@ void TIKI_Message( const char *fmt, ... )
TIKI_Warning
===============
*/
void TIKI_Warning( const char *fmt, ... )
void TIKI_Warning(const char *fmt, ...)
{
char msg[ 1024 ];
va_list va;
char msg[1024];
va_list va;
va_start( va, fmt );
vsprintf( msg, fmt, va );
va_end( va );
Skel_DPrintf( msg );
va_start(va, fmt);
vsprintf(msg, fmt, va);
va_end(va);
Skel_DPrintf(msg);
}
/*
@ -94,15 +91,15 @@ void TIKI_Warning( const char *fmt, ... )
TIKI_Error
===============
*/
void TIKI_Error( const char *fmt, ... )
void TIKI_Error(const char *fmt, ...)
{
char msg[ 1024 ];
va_list va;
char msg[1024];
va_list va;
va_start( va, fmt );
vsprintf( msg, fmt, va );
va_end( va );
Skel_DPrintf( msg );
va_start(va, fmt);
vsprintf(msg, fmt, va);
va_end(va);
Skel_DPrintf(msg);
}
/*
@ -110,27 +107,25 @@ void TIKI_Error( const char *fmt, ... )
TIKI_SetupIndividualSurface
===============
*/
void TIKI_SetupIndividualSurface( const char *filename, dtikisurface_t *surf, const char *name, dloadsurface_t *loadsurf )
void TIKI_SetupIndividualSurface(const char *filename, dtikisurface_t *surf, const char *name, dloadsurface_t *loadsurf)
{
int j;
int j;
surf->numskins = 0;
for( j = 0; j < loadsurf->numskins; j++ )
{
if( surf->numskins >= MAX_TIKI_SHADER )
{
TIKI_Error( "TIKI_SetupIndividualSurface: Too many skins defined for surface %s in %s.\n", loadsurf->name, filename );
}
else
{
strncpy( surf->name, name, sizeof( surf->name ) );
strncpy( surf->shader[ surf->numskins ], loadsurf->shader[ j ], sizeof( surf->shader[ surf->numskins ] ) );
surf->numskins++;
}
}
surf->numskins = 0;
for (j = 0; j < loadsurf->numskins; j++) {
if (surf->numskins >= MAX_TIKI_SHADER) {
TIKI_Error(
"TIKI_SetupIndividualSurface: Too many skins defined for surface %s in %s.\n", loadsurf->name, filename
);
} else {
strncpy(surf->name, name, sizeof(surf->name));
strncpy(surf->shader[surf->numskins], loadsurf->shader[j], sizeof(surf->shader[surf->numskins]));
surf->numskins++;
}
}
surf->flags = loadsurf->flags;
surf->damage_multiplier = loadsurf->damage_multiplier;
surf->flags = loadsurf->flags;
surf->damage_multiplier = loadsurf->damage_multiplier;
}
/*
@ -138,83 +133,74 @@ void TIKI_SetupIndividualSurface( const char *filename, dtikisurface_t *surf, co
TIKI_CalcAnimDefSize
===============
*/
size_t TIKI_CalcAnimDefSize(dloaddef_t* ld)
size_t TIKI_CalcAnimDefSize(dloaddef_t *ld)
{
int i, j, k;
int i, j, k;
// initial cmds
size_t defsize = 0;
// other animations
defsize += sizeof(dtikianimdef_t) * ld->numanims;
defsize += ld->numclientinitcmds * sizeof(dtikicmd_t);
defsize += ld->numserverinitcmds * sizeof(dtikicmd_t);
// initial cmds
size_t defsize = 0;
// other animations
defsize += sizeof(dtikianimdef_t) * ld->numanims;
defsize += ld->numclientinitcmds * sizeof(dtikicmd_t);
defsize += ld->numserverinitcmds * sizeof(dtikicmd_t);
for (i = 0; i < ld->numserverinitcmds; i++)
{
const dloadinitcmd_t* initcmd = ld->loadserverinitcmds[i];
defsize += sizeof(*initcmd->args) * initcmd->num_args;
for (i = 0; i < ld->numserverinitcmds; i++) {
const dloadinitcmd_t *initcmd = ld->loadserverinitcmds[i];
defsize += sizeof(*initcmd->args) * initcmd->num_args;
for (j = 0; j < initcmd->num_args; j++)
{
defsize += strlen(initcmd->args[j]) + 1;
}
for (j = 0; j < initcmd->num_args; j++) {
defsize += strlen(initcmd->args[j]) + 1;
}
defsize = PAD(defsize, sizeof(void*));
}
defsize = PAD(defsize, sizeof(void *));
}
for (i = 0; i < ld->numclientinitcmds; i++)
{
const dloadinitcmd_t* initcmd = ld->loadclientinitcmds[i];
defsize += sizeof(*initcmd->args) * initcmd->num_args;
for (i = 0; i < ld->numclientinitcmds; i++) {
const dloadinitcmd_t *initcmd = ld->loadclientinitcmds[i];
defsize += sizeof(*initcmd->args) * initcmd->num_args;
for (j = 0; j < initcmd->num_args; j++)
{
defsize += strlen(initcmd->args[j]) + 1;
}
for (j = 0; j < initcmd->num_args; j++) {
defsize += strlen(initcmd->args[j]) + 1;
}
defsize = PAD(defsize, sizeof(void*));
}
defsize = PAD(defsize, sizeof(void *));
}
for (i = 0; i < ld->numanims; i++)
{
const dloadanim_t* loadanim = ld->loadanims[i];
for (i = 0; i < ld->numanims; i++) {
const dloadanim_t *loadanim = ld->loadanims[i];
defsize += sizeof(dtikianimdef_t);
defsize += loadanim->num_server_cmds * sizeof(dtikicmd_t);
defsize += loadanim->num_client_cmds * sizeof(dtikianimdef_t);
defsize += sizeof(dtikianimdef_t);
defsize += loadanim->num_server_cmds * sizeof(dtikicmd_t);
defsize += loadanim->num_client_cmds * sizeof(dtikianimdef_t);
for (j = 0; j < loadanim->num_server_cmds; j++)
{
const dloadframecmd_t* loadframecmd = loadanim->loadservercmds[j];
defsize += sizeof(*loadframecmd->args) * loadframecmd->num_args;
for (j = 0; j < loadanim->num_server_cmds; j++) {
const dloadframecmd_t *loadframecmd = loadanim->loadservercmds[j];
defsize += sizeof(*loadframecmd->args) * loadframecmd->num_args;
for (k = 0; k < loadframecmd->num_args; k++)
{
defsize += strlen(loadframecmd->args[k]) + 1;
}
for (k = 0; k < loadframecmd->num_args; k++) {
defsize += strlen(loadframecmd->args[k]) + 1;
}
defsize = PAD(defsize, sizeof(void*));
}
defsize = PAD(defsize, sizeof(void *));
}
for (j = 0; j < loadanim->num_client_cmds; j++)
{
const dloadframecmd_t* loadframecmd = loadanim->loadclientcmds[j];
defsize += sizeof(*loadframecmd->args) * loadframecmd->num_args;
for (j = 0; j < loadanim->num_client_cmds; j++) {
const dloadframecmd_t *loadframecmd = loadanim->loadclientcmds[j];
defsize += sizeof(*loadframecmd->args) * loadframecmd->num_args;
for (k = 0; k < loadframecmd->num_args; k++)
{
defsize += strlen(loadframecmd->args[k]) + 1;
}
for (k = 0; k < loadframecmd->num_args; k++) {
defsize += strlen(loadframecmd->args[k]) + 1;
}
defsize = PAD(defsize, sizeof(void*));
}
defsize = PAD(defsize, sizeof(void *));
}
defsize = PAD(defsize, sizeof(void*));
}
defsize = PAD(defsize, sizeof(void *));
}
defsize += ld->modelBuf->cursize + strlen(ld->headmodels) + 1 + strlen(ld->headskins) + 1;
defsize = PAD(defsize, sizeof(void*));
return defsize;
defsize += ld->modelBuf->cursize + strlen(ld->headmodels) + 1 + strlen(ld->headskins) + 1;
defsize = PAD(defsize, sizeof(void *));
return defsize;
}
/*
@ -222,15 +208,15 @@ size_t TIKI_CalcAnimDefSize(dloaddef_t* ld)
TIKI_FillTIKIStructureSkel
===============
*/
dtikianim_t *TIKI_FillTIKIStructureSkel( dloaddef_t *ld )
dtikianim_t *TIKI_FillTIKIStructureSkel(dloaddef_t *ld)
{
size_t animdefsize;
size_t defsize;
size_t animdefsize;
size_t defsize;
animdefsize = TIKI_CalcAnimDefSize(ld);
defsize = sizeof(dtikianim_t);
// anim name
defsize += strlen(ld->path) + 1;
animdefsize = TIKI_CalcAnimDefSize(ld);
defsize = sizeof(dtikianim_t);
// anim name
defsize += strlen(ld->path) + 1;
return TIKI_InitTiki(ld, PAD(animdefsize + defsize, sizeof(void*)));
return TIKI_InitTiki(ld, PAD(animdefsize + defsize, sizeof(void *)));
}

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -22,27 +22,25 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
// tiki_main.h : TIKI main
#ifndef __TIKI_MAIN_H__
#define __TIKI_MAIN_H__
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
extern int cache_numskel;
extern int cache_maxskel;
extern skelcache_t skelcache[];
extern int cache_numskel;
extern int cache_maxskel;
extern skelcache_t skelcache[];
void TIKI_AddPointToBounds( float *v, float *mins, float *maxs );
void TIKI_Message( const char *fmt, ... );
void TIKI_Warning( const char *fmt, ... );
void TIKI_Error( const char *fmt, ... );
void TIKI_SetupIndividualSurface( const char *filename, dtikisurface_t *surf, const char *name, dloadsurface_t *loadsurf );
size_t TIKI_CalcAnimDefSize( dloaddef_t *ld );
dtikianim_t *TIKI_FillTIKIStructureSkel( dloaddef_t *ld );
void TIKI_AddPointToBounds(float *v, float *mins, float *maxs);
void TIKI_Message(const char *fmt, ...);
void TIKI_Warning(const char *fmt, ...);
void TIKI_Error(const char *fmt, ...);
void
TIKI_SetupIndividualSurface(const char *filename, dtikisurface_t *surf, const char *name, dloadsurface_t *loadsurf);
size_t TIKI_CalcAnimDefSize(dloaddef_t *ld);
dtikianim_t *TIKI_FillTIKIStructureSkel(dloaddef_t *ld);
#ifdef __cplusplus
}
#endif
#endif // __TIKI_MAIN_H__

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -22,132 +22,131 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
// tiki_script.h : TIKI script
#ifndef TIKI_SCRIPT_H
#define TIKI_SCRIPT_H
#pragma once
#define TOKENCOMMENT (';')
#define TOKENCOMMENT2 ('#')
#define TOKENEOL ('\n')
#define TOKENCOMMENT (';')
#define TOKENCOMMENT2 ('#')
#define TOKENEOL ('\n')
//#define TOKENNULL ('\0')
#define TOKENSPACE (' ')
#define TOKENSPECIAL ('$')
#define TOKENSPACE (' ')
#define TOKENSPECIAL ('$')
#define TIKI_MAXTOKEN 256
#define TIKI_MAXTOKEN 256
#define TIKI_MAXMACROS 48
#define TIKI_MAXMACROS 48
typedef struct {
char name[TIKI_MAXTOKEN];
char macro[TIKI_MAXTOKEN];
char name[TIKI_MAXTOKEN];
char macro[TIKI_MAXTOKEN];
} tiki_macro_t;
typedef struct {
const char *mark_script_p;
qboolean mark_tokenready;
char mark_token[TIKI_MAXTOKEN];
const char *mark_script_p;
qboolean mark_tokenready;
char mark_token[TIKI_MAXTOKEN];
} tiki_mark_t;
#ifdef __cplusplus
class TikiScript {
class TikiScript
{
protected:
qboolean error;
qboolean tokenready;
class TikiScript *include;
class TikiScript *parent;
char filename[TIKI_MAXTOKEN];
const char *script_p;
const char *end_p;
tiki_macro_t macros[TIKI_MAXMACROS];
int nummacros;
int line;
char token[TIKI_MAXTOKEN];
qboolean releaseBuffer;
tiki_mark_t mark[ 64 ];
int mark_pos;
qboolean error;
qboolean tokenready;
class TikiScript *include;
class TikiScript *parent;
char filename[TIKI_MAXTOKEN];
const char *script_p;
const char *end_p;
tiki_macro_t macros[TIKI_MAXMACROS];
int nummacros;
int line;
char token[TIKI_MAXTOKEN];
qboolean releaseBuffer;
tiki_mark_t mark[64];
int mark_pos;
public:
char *buffer;
int length;
char path[ MAX_QPATH ];
static class TikiScript *currentScript;
char *buffer;
int length;
char path[MAX_QPATH];
static class TikiScript *currentScript;
protected:
qboolean AtComment();
qboolean AtExtendedComment();
qboolean AtCommand();
qboolean AtString( qboolean crossline );
qboolean ProcessCommand( qboolean crossline );
qboolean Completed();
qboolean SafeCheckOverflow();
void CheckOverflow();
void Uninclude();
const char *FindMacro( const char *macro );
void AddMacro( const char *macro, const char *expansion );
qboolean SkipToEOL();
void SkipWhiteSpace( qboolean crossline );
void SkipNonToken( qboolean crossline );
qboolean CommentAvailable( qboolean crossline );
void SkipExtendedComment();
qboolean AtComment();
qboolean AtExtendedComment();
qboolean AtCommand();
qboolean AtString(qboolean crossline);
qboolean ProcessCommand(qboolean crossline);
qboolean Completed();
qboolean SafeCheckOverflow();
void CheckOverflow();
void Uninclude();
const char *FindMacro(const char *macro);
void AddMacro(const char *macro, const char *expansion);
qboolean SkipToEOL();
void SkipWhiteSpace(qboolean crossline);
void SkipNonToken(qboolean crossline);
qboolean CommentAvailable(qboolean crossline);
void SkipExtendedComment();
public:
TikiScript();
~TikiScript();
TikiScript();
~TikiScript();
void Close();
const char *Filename();
int GetLineNumber();
void Reset();
qboolean TokenAvailable( qboolean crossline );
void UnGetToken();
const char *GetToken( qboolean crossline );
const char *GetLine( qboolean crossline );
const char *GetAndIgnoreLine( qboolean crossline );
const char *GetRaw();
const char *GetString( qboolean crossline );
qboolean GetSpecific( const char *string );
int GetInteger( qboolean crossline );
double GetDouble( qboolean crossline );
float GetFloat( qboolean crossline );
void GetVector( qboolean crossline, float *vec );
int LinesInFile();
void Parse( char *data, int length, const char *name );
qboolean LoadFile( const char *name, qboolean quiet );
const char *Token();
void MarkPos();
void ReturnToMark();
void ReplaceLineWithWhitespace( bool deleteFromStartOfLine );
void Exclude();
const char *GetParentToken();
void Close();
const char *Filename();
int GetLineNumber();
void Reset();
qboolean TokenAvailable(qboolean crossline);
void UnGetToken();
const char *GetToken(qboolean crossline);
const char *GetLine(qboolean crossline);
const char *GetAndIgnoreLine(qboolean crossline);
const char *GetRaw();
const char *GetString(qboolean crossline);
qboolean GetSpecific(const char *string);
int GetInteger(qboolean crossline);
double GetDouble(qboolean crossline);
float GetFloat(qboolean crossline);
void GetVector(qboolean crossline, float *vec);
int LinesInFile();
void Parse(char *data, int length, const char *name);
qboolean LoadFile(const char *name, qboolean quiet);
const char *Token();
void MarkPos();
void ReturnToMark();
void ReplaceLineWithWhitespace(bool deleteFromStartOfLine);
void Exclude();
const char *GetParentToken();
};
class TikiSwitchKey {
class TikiSwitchKey
{
public:
str sKeyName;
str sKeyValue;
TikiSwitchKey *pNextKey;
str sKeyName;
str sKeyValue;
TikiSwitchKey *pNextKey;
TikiSwitchKey();
TikiSwitchKey();
};
class TikiSwitcher {
TikiSwitchKey *m_pSwitchKeys;
class TikiSwitcher
{
TikiSwitchKey *m_pSwitchKeys;
private:
TikiSwitchKey *GetSwitchKey( const char * );
void RemoveUnwantedSwitchOptions( TikiScript * );
TikiSwitchKey *GetSwitchKey(const char *);
void RemoveUnwantedSwitchOptions(TikiScript *);
public:
TikiSwitcher();
TikiSwitcher();
void AddSwitchKey( const char *, const char * );
void ChangeSwitchKey( const char *, const char * );
void AddOrChangeSwitchKey( const char *, const char * );
str& GetSwitchKeyValue( const char * );
void PrecompileTikiScript( TikiScript * );
void AddSwitchKey(const char *, const char *);
void ChangeSwitchKey(const char *, const char *);
void AddOrChangeSwitchKey(const char *, const char *);
str& GetSwitchKeyValue(const char *);
void PrecompileTikiScript(TikiScript *);
};
#endif
#endif // TIKI_SCRIPT_H

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -34,11 +34,12 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
AnimCompareFunc
===============
*/
static void* context;
static int AnimCompareFunc(const void *a, const void *b )
static void *context;
static int AnimCompareFunc(const void *a, const void *b)
{
dloaddef_t *ld = (dloaddef_t*)context;
return stricmp( ld->loadanims[ *( int * )a ]->alias, ld->loadanims[ *( int * )b ]->alias );
dloaddef_t *ld = (dloaddef_t *)context;
return stricmp(ld->loadanims[*(int *)a]->alias, ld->loadanims[*(int *)b]->alias);
}
/*
@ -46,14 +47,15 @@ static int AnimCompareFunc(const void *a, const void *b )
TIKI_GetAnimOrder
===============
*/
void TIKI_GetAnimOrder( dloaddef_t *ld, int *order )
void TIKI_GetAnimOrder(dloaddef_t *ld, int *order)
{
int i;
int i;
for( i = 0; i < ld->numanims; i++ )
order[ i ] = i;
context = ld;
qsort( order, ld->numanims, sizeof( int ), AnimCompareFunc);
for (i = 0; i < ld->numanims; i++) {
order[i] = i;
}
context = ld;
qsort(order, ld->numanims, sizeof(int), AnimCompareFunc);
}
/*
@ -61,10 +63,10 @@ void TIKI_GetAnimOrder( dloaddef_t *ld, int *order )
TIKI_Anim_NameForNum
===============
*/
const char *TIKI_Anim_NameForNum( dtiki_t *pmdl, int animnum )
{
dtikianimdef_t *panimdef = pmdl->a->animdefs[ animnum ];
return panimdef->alias;
const char *TIKI_Anim_NameForNum(dtiki_t *pmdl, int animnum)
{
dtikianimdef_t *panimdef = pmdl->a->animdefs[animnum];
return panimdef->alias;
}
/*
@ -72,121 +74,101 @@ const char *TIKI_Anim_NameForNum( dtiki_t *pmdl, int animnum )
TIKI_Anim_NumForName
===============
*/
int TIKI_Anim_NumForName( dtiki_t *pmdl, const char *name )
int TIKI_Anim_NumForName(dtiki_t *pmdl, const char *name)
{
int iTop;
int iBottom;
int iMiddle;
int iComp;
dtikianimdef_t *panimdef;
float fAnimWeights[ MAX_FRAMEINFOS ];
float fWeight;
float fTotalWeight;
int iAnimCount;
int i, k;
int iTop;
int iBottom;
int iMiddle;
int iComp;
dtikianimdef_t *panimdef;
float fAnimWeights[MAX_FRAMEINFOS];
float fWeight;
float fTotalWeight;
int iAnimCount;
int i, k;
if( !pmdl )
{
return -1;
}
if (!pmdl) {
return -1;
}
iBottom = 0;
iTop = pmdl->a->num_anims - 1;
iBottom = 0;
iTop = pmdl->a->num_anims - 1;
while( iBottom <= iTop )
{
iMiddle = ( iBottom + iTop ) / 2;
while (iBottom <= iTop) {
iMiddle = (iBottom + iTop) / 2;
panimdef = pmdl->a->animdefs[ iMiddle ];
if( !panimdef )
{
iComp = -1;
}
else
{
iComp = stricmp( panimdef->alias, name );
}
panimdef = pmdl->a->animdefs[iMiddle];
if (!panimdef) {
iComp = -1;
} else {
iComp = stricmp(panimdef->alias, name);
}
if( !iComp )
{
if( !( panimdef->flags & TAF_RANDOM ) )
{
return iMiddle;
}
if (!iComp) {
if (!(panimdef->flags & TAF_RANDOM)) {
return iMiddle;
}
for( i = iMiddle; i > 0; i-- )
{
if( !pmdl->a->animdefs[ i - 1 ] || stricmp( panimdef->alias, pmdl->a->animdefs[ i - 1 ]->alias ) ) {
break;
}
}
for (i = iMiddle; i > 0; i--) {
if (!pmdl->a->animdefs[i - 1] || stricmp(panimdef->alias, pmdl->a->animdefs[i - 1]->alias)) {
break;
}
}
k = i;
k = i;
for( iMiddle++; iMiddle < pmdl->a->num_anims; iMiddle++ )
{
if( !pmdl->a->animdefs[ iMiddle ] || stricmp( panimdef->alias, pmdl->a->animdefs[ iMiddle ]->alias ) ) {
break;
}
}
for (iMiddle++; iMiddle < pmdl->a->num_anims; iMiddle++) {
if (!pmdl->a->animdefs[iMiddle] || stricmp(panimdef->alias, pmdl->a->animdefs[iMiddle]->alias)) {
break;
}
}
fTotalWeight = 0.0f;
iAnimCount = 0;
fTotalWeight = 0.0f;
iAnimCount = 0;
for( ; i < iMiddle; i++ )
{
panimdef = pmdl->a->animdefs[ i ];
if( !panimdef )
{
continue;
}
for (; i < iMiddle; i++) {
panimdef = pmdl->a->animdefs[i];
if (!panimdef) {
continue;
}
if( panimdef->flags & TAF_AUTOSTEPS )
{
fAnimWeights[ iAnimCount ] = 0.0f;
panimdef->flags &= ~TAF_AUTOSTEPS;
}
else
{
fAnimWeights[ iAnimCount ] = panimdef->weight;
fTotalWeight += panimdef->weight;
}
if (panimdef->flags & TAF_AUTOSTEPS) {
fAnimWeights[iAnimCount] = 0.0f;
panimdef->flags &= ~TAF_AUTOSTEPS;
} else {
fAnimWeights[iAnimCount] = panimdef->weight;
fTotalWeight += panimdef->weight;
}
iAnimCount++;
}
iAnimCount++;
}
fWeight = randweight() * fTotalWeight;
for( i = 0; i < iAnimCount; i++ )
{
if( fWeight < fAnimWeights[ i ] ) {
break;
}
fWeight = randweight() * fTotalWeight;
for (i = 0; i < iAnimCount; i++) {
if (fWeight < fAnimWeights[i]) {
break;
}
fWeight -= fAnimWeights[ i ];
}
fWeight -= fAnimWeights[i];
}
iMiddle = i + k;
panimdef = pmdl->a->animdefs[iMiddle];
if (panimdef && panimdef->flags & TAF_NOREPEAT) {
panimdef->flags |= TAF_AUTOSTEPS;
}
iMiddle = i + k;
panimdef = pmdl->a->animdefs[ iMiddle ];
if( panimdef && panimdef->flags & TAF_NOREPEAT )
{
panimdef->flags |= TAF_AUTOSTEPS;
}
return iMiddle;
}
return iMiddle;
}
if (iComp > 0) {
iTop = iMiddle - 1;
} else {
iBottom = iMiddle + 1;
}
}
if( iComp > 0 )
{
iTop = iMiddle - 1;
}
else
{
iBottom = iMiddle + 1;
}
}
return -1;
return -1;
}
/*
@ -194,66 +176,61 @@ int TIKI_Anim_NumForName( dtiki_t *pmdl, const char *name )
TIKI_Anim_Random
===============
*/
int TIKI_Anim_Random( dtiki_t *pmdl, const char *name )
int TIKI_Anim_Random(dtiki_t *pmdl, const char *name)
{
dtikianimdef_t *panimdef;
int i;
float totalweight;
float weights[ MAX_FRAMEINFOS ];
int anim[ MAX_FRAMEINFOS ];
int num;
size_t len;
int diff;
float weight;
dtikianimdef_t *panimdef;
int i;
float totalweight;
float weights[MAX_FRAMEINFOS];
int anim[MAX_FRAMEINFOS];
int num;
size_t len;
int diff;
float weight;
len = strlen( name );
if( !len || !pmdl )
{
return -1;
}
len = strlen(name);
if (!len || !pmdl) {
return -1;
}
num = 0;
totalweight = 0.0f;
for( i = 0; i < pmdl->a->num_anims; i++ )
{
panimdef = pmdl->a->animdefs[ i ];
diff = strnicmp( panimdef->alias, name, len );
if( diff || panimdef->alias[ len ] == '_' )
{
if( diff > 0 )
break;
}
else
{
if( num >= MAX_FRAMEINFOS )
break;
num = 0;
totalweight = 0.0f;
for (i = 0; i < pmdl->a->num_anims; i++) {
panimdef = pmdl->a->animdefs[i];
diff = strnicmp(panimdef->alias, name, len);
if (diff || panimdef->alias[len] == '_') {
if (diff > 0) {
break;
}
} else {
if (num >= MAX_FRAMEINFOS) {
break;
}
totalweight += panimdef->weight;
anim[ num ] = i;
weights[ num ] = panimdef->weight;
totalweight += panimdef->weight;
anim[num] = i;
weights[num] = panimdef->weight;
num++;
}
}
num++;
}
}
// animation name not found
if( !num )
{
return -1;
}
// animation name not found
if (!num) {
return -1;
}
// find a random animation based on the weight
weight = randweight() * totalweight;
for( i = 0; i < num; i++ )
{
if( weight < weights[ i ] ) {
break;
}
// find a random animation based on the weight
weight = randweight() * totalweight;
for (i = 0; i < num; i++) {
if (weight < weights[i]) {
break;
}
weight -= weights[ i ];
}
weight -= weights[i];
}
return anim[ i ];
return anim[i];
}
/*
@ -261,18 +238,18 @@ int TIKI_Anim_Random( dtiki_t *pmdl, const char *name )
TIKI_Anim_NumFrames
===============
*/
int TIKI_Anim_NumFrames( dtiki_t *pmdl, int animnum )
int TIKI_Anim_NumFrames(dtiki_t *pmdl, int animnum)
{
if (!pmdl) {
return 0;
return 0;
}
if (!pmdl->a || animnum < 0 || animnum >= pmdl->a->num_anims) {
return 0;
}
skelAnimDataGameHeader_t *animData = SkeletorCacheGetData( pmdl->a->m_aliases[ animnum ] );
return animData->numFrames;
skelAnimDataGameHeader_t *animData = SkeletorCacheGetData(pmdl->a->m_aliases[animnum]);
return animData->numFrames;
}
/*
@ -280,21 +257,20 @@ int TIKI_Anim_NumFrames( dtiki_t *pmdl, int animnum )
TIKI_Anim_Time
===============
*/
float TIKI_Anim_Time( dtiki_t *pmdl, int animnum )
float TIKI_Anim_Time(dtiki_t *pmdl, int animnum)
{
if (!pmdl) {
return 0.0;
}
if (!pmdl) {
return 0.0;
}
if (!pmdl->a || animnum < 0 || animnum >= pmdl->a->num_anims) {
return 0.0;
}
if (!pmdl->a || animnum < 0 || animnum >= pmdl->a->num_anims) {
return 0.0;
}
skelAnimDataGameHeader_t *animData = SkeletorCacheGetData( pmdl->a->m_aliases[ animnum ] );
skelAnimDataGameHeader_t *animData = SkeletorCacheGetData(pmdl->a->m_aliases[animnum]);
return animData->flags & TAF_DELTADRIVEN
? animData->frameTime * animData->numFrames
: animData->frameTime * ( animData->numFrames - 1 );
return animData->flags & TAF_DELTADRIVEN ? animData->frameTime * animData->numFrames
: animData->frameTime * (animData->numFrames - 1);
}
/*
@ -302,18 +278,18 @@ float TIKI_Anim_Time( dtiki_t *pmdl, int animnum )
TIKI_Anim_Frametime
===============
*/
float TIKI_Anim_Frametime( dtiki_t *pmdl, int animnum )
float TIKI_Anim_Frametime(dtiki_t *pmdl, int animnum)
{
if (!pmdl) {
return 0.0;
return 0.0;
}
if (!pmdl->a || animnum < 0 || animnum >= pmdl->a->num_anims) {
return 0.0;
}
skelAnimDataGameHeader_t *animData = SkeletorCacheGetData( pmdl->a->m_aliases[ animnum ] );
return animData->frameTime;
skelAnimDataGameHeader_t *animData = SkeletorCacheGetData(pmdl->a->m_aliases[animnum]);
return animData->frameTime;
}
/*
@ -321,18 +297,18 @@ float TIKI_Anim_Frametime( dtiki_t *pmdl, int animnum )
TIKI_Anim_Delta
===============
*/
void TIKI_Anim_Delta( dtiki_t *pmdl, int animnum, float *delta )
void TIKI_Anim_Delta(dtiki_t *pmdl, int animnum, float *delta)
{
if (!pmdl) {
return;
return;
}
if (!pmdl->a || animnum < 0 || animnum >= pmdl->a->num_anims) {
return;
}
skelAnimDataGameHeader_t *animData = SkeletorCacheGetData( pmdl->a->m_aliases[ animnum ] );
VectorScale( animData->totalDelta, pmdl->load_scale, delta );
skelAnimDataGameHeader_t *animData = SkeletorCacheGetData(pmdl->a->m_aliases[animnum]);
VectorScale(animData->totalDelta, pmdl->load_scale, delta);
}
/*
@ -340,18 +316,18 @@ void TIKI_Anim_Delta( dtiki_t *pmdl, int animnum, float *delta )
TIKI_Anim_HasDelta
===============
*/
qboolean TIKI_Anim_HasDelta( dtiki_t *pmdl, int animnum )
qboolean TIKI_Anim_HasDelta(dtiki_t *pmdl, int animnum)
{
if (!pmdl) {
return qfalse;
return qfalse;
}
if (!pmdl->a || animnum < 0 || animnum >= pmdl->a->num_anims) {
return qfalse;
}
skelAnimDataGameHeader_t *animData = SkeletorCacheGetData( pmdl->a->m_aliases[ animnum ] );
return animData->bHasDelta;
skelAnimDataGameHeader_t *animData = SkeletorCacheGetData(pmdl->a->m_aliases[animnum]);
return animData->bHasDelta;
}
/*
@ -359,36 +335,33 @@ qboolean TIKI_Anim_HasDelta( dtiki_t *pmdl, int animnum )
TIKI_Anim_DeltaOverTime
===============
*/
void TIKI_Anim_DeltaOverTime( dtiki_t *pTiki, int iAnimnum, float fTime1, float fTime2, vec3_t vDelta )
void TIKI_Anim_DeltaOverTime(dtiki_t *pTiki, int iAnimnum, float fTime1, float fTime2, vec3_t vDelta)
{
int realAnimIndex;
skelAnimDataGameHeader_t *animData;
SkelVec3 absDelta;
int realAnimIndex;
skelAnimDataGameHeader_t *animData;
SkelVec3 absDelta;
if (!pTiki || !pTiki->a) {
return;
}
if (!pTiki || !pTiki->a) {
return;
}
if (iAnimnum >= pTiki->a->num_anims || iAnimnum < 0) {
return;
}
if (iAnimnum >= pTiki->a->num_anims || iAnimnum < 0) {
return;
}
if (fTime2 < fTime1) {
return;
}
if (fTime2 < fTime1) {
return;
}
realAnimIndex = pTiki->a->m_aliases[ iAnimnum ];
if( realAnimIndex != -1 )
{
animData = SkeletorCacheGetData( realAnimIndex );
absDelta = animData->GetDeltaOverTime( fTime1, fTime2 );
VectorScale( absDelta, pTiki->load_scale, vDelta );
}
else
{
TIKI_Error( "Skeletor GetDeltaOverTime: Couldn't find animation with index %i\n", iAnimnum );
VectorClear( vDelta );
}
realAnimIndex = pTiki->a->m_aliases[iAnimnum];
if (realAnimIndex != -1) {
animData = SkeletorCacheGetData(realAnimIndex);
absDelta = animData->GetDeltaOverTime(fTime1, fTime2);
VectorScale(absDelta, pTiki->load_scale, vDelta);
} else {
TIKI_Error("Skeletor GetDeltaOverTime: Couldn't find animation with index %i\n", iAnimnum);
VectorClear(vDelta);
}
}
/*
@ -396,36 +369,33 @@ void TIKI_Anim_DeltaOverTime( dtiki_t *pTiki, int iAnimnum, float fTime1, float
TIKI_Anim_AngularDeltaOverTime
===============
*/
void TIKI_Anim_AngularDeltaOverTime(dtiki_t* pTiki, int iAnimnum, float fTime1, float fTime2, float* fDelta)
void TIKI_Anim_AngularDeltaOverTime(dtiki_t *pTiki, int iAnimnum, float fTime1, float fTime2, float *fDelta)
{
int realAnimIndex;
skelAnimDataGameHeader_t* animData;
int realAnimIndex;
skelAnimDataGameHeader_t *animData;
*fDelta = 0;
*fDelta = 0;
if (!pTiki || !pTiki->a) {
return;
}
if (!pTiki || !pTiki->a) {
return;
}
if (iAnimnum >= pTiki->a->num_anims || iAnimnum < 0) {
return;
}
if (iAnimnum >= pTiki->a->num_anims || iAnimnum < 0) {
return;
}
if (fTime2 < fTime1) {
return;
}
if (fTime2 < fTime1) {
return;
}
realAnimIndex = pTiki->a->m_aliases[iAnimnum];
if (realAnimIndex != -1)
{
animData = SkeletorCacheGetData(realAnimIndex);
*fDelta = animData->GetAngularDeltaOverTime(fTime1, fTime2);
}
else
{
TIKI_Error("Skeletor GetAngularDeltaOverTime: Couldn't find animation with index %i\n", iAnimnum);
*fDelta = 0;
}
realAnimIndex = pTiki->a->m_aliases[iAnimnum];
if (realAnimIndex != -1) {
animData = SkeletorCacheGetData(realAnimIndex);
*fDelta = animData->GetAngularDeltaOverTime(fTime1, fTime2);
} else {
TIKI_Error("Skeletor GetAngularDeltaOverTime: Couldn't find animation with index %i\n", iAnimnum);
*fDelta = 0;
}
}
/*
@ -433,18 +403,18 @@ void TIKI_Anim_AngularDeltaOverTime(dtiki_t* pTiki, int iAnimnum, float fTime1,
TIKI_Anim_Flags
===============
*/
int TIKI_Anim_Flags( dtiki_t *pmdl, int animnum )
int TIKI_Anim_Flags(dtiki_t *pmdl, int animnum)
{
if (!pmdl) {
return 0;
return 0;
}
if (!pmdl->a || animnum < 0 || animnum >= pmdl->a->num_anims) {
return 0;
}
dtikianimdef_t *panimdef = pmdl->a->animdefs[ animnum ];
return panimdef->flags;
dtikianimdef_t *panimdef = pmdl->a->animdefs[animnum];
return panimdef->flags;
}
/*
@ -452,32 +422,35 @@ int TIKI_Anim_Flags( dtiki_t *pmdl, int animnum )
TIKI_Anim_FlagsSkel
===============
*/
int TIKI_Anim_FlagsSkel( dtiki_t *pmdl, int animnum )
int TIKI_Anim_FlagsSkel(dtiki_t *pmdl, int animnum)
{
if (!pmdl) {
return 0;
return 0;
}
if (!pmdl->a || animnum < 0 || animnum >= pmdl->a->num_anims) {
return 0;
}
skelAnimDataGameHeader_t *animData;
int flags;
skelAnimDataGameHeader_t *animData;
int flags;
animData = SkeletorCacheGetData( pmdl->a->m_aliases[ animnum ] );
flags = animData->flags;
animData = SkeletorCacheGetData(pmdl->a->m_aliases[animnum]);
flags = animData->flags;
if( animData->bHasDelta )
flags |= TAF_HASDELTA;
if (animData->bHasDelta) {
flags |= TAF_HASDELTA;
}
if( animData->bHasMorph )
flags |= TAF_HASMORPH;
if (animData->bHasMorph) {
flags |= TAF_HASMORPH;
}
if (animData->bHasUpper)
flags |= TAF_HASUPPER;
if (animData->bHasUpper) {
flags |= TAF_HASUPPER;
}
return flags;
return flags;
}
/*
@ -485,18 +458,18 @@ int TIKI_Anim_FlagsSkel( dtiki_t *pmdl, int animnum )
TIKI_Anim_HasServerCommands
===============
*/
qboolean TIKI_Anim_HasServerCommands( dtiki_t *pmdl, int animnum )
qboolean TIKI_Anim_HasServerCommands(dtiki_t *pmdl, int animnum)
{
if (!pmdl) {
return qfalse;
return qfalse;
}
if (!pmdl->a || animnum < 0 || animnum >= pmdl->a->num_anims) {
return qfalse;
}
dtikianimdef_t *panimdef = pmdl->a->animdefs[ animnum ];
return panimdef->num_server_cmds > 0;
dtikianimdef_t *panimdef = pmdl->a->animdefs[animnum];
return panimdef->num_server_cmds > 0;
}
/*
@ -504,18 +477,18 @@ qboolean TIKI_Anim_HasServerCommands( dtiki_t *pmdl, int animnum )
TIKI_Anim_HasClientCommands
===============
*/
qboolean TIKI_Anim_HasClientCommands( dtiki_t *pmdl, int animnum )
qboolean TIKI_Anim_HasClientCommands(dtiki_t *pmdl, int animnum)
{
if (!pmdl) {
return qfalse;
return qfalse;
}
if (!pmdl->a || animnum < 0 || animnum >= pmdl->a->num_anims) {
return qfalse;
}
dtikianimdef_t *panimdef = pmdl->a->animdefs[ animnum ];
return panimdef->num_client_cmds > 0;
dtikianimdef_t *panimdef = pmdl->a->animdefs[animnum];
return panimdef->num_client_cmds > 0;
}
/*
@ -523,16 +496,16 @@ qboolean TIKI_Anim_HasClientCommands( dtiki_t *pmdl, int animnum )
TIKI_Anim_CrossblendTime
===============
*/
float TIKI_Anim_CrossblendTime( dtiki_t *pmdl, int animnum )
float TIKI_Anim_CrossblendTime(dtiki_t *pmdl, int animnum)
{
if (!pmdl) {
return 0.0;
return 0.0;
}
if (!pmdl->a || animnum < 0 || animnum >= pmdl->a->num_anims) {
return 0.0;
}
dtikianimdef_t *panimdef = pmdl->a->animdefs[ animnum ];
return panimdef->blendtime;
dtikianimdef_t *panimdef = pmdl->a->animdefs[animnum];
return panimdef->blendtime;
}

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -22,32 +22,29 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
// tiki_anim.h : TIKI Anim
#ifndef __TIKI_ANIM_H__
#define __TIKI_ANIM_H__
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
void TIKI_GetAnimOrder( dloaddef_t *ld, int *order );
const char *TIKI_Anim_NameForNum( dtiki_t *pmdl, int animnum );
int TIKI_Anim_NumForName( dtiki_t *pmdl, const char *name );
int TIKI_Anim_Random( dtiki_t *pmdl, const char *name );
int TIKI_Anim_NumFrames( dtiki_t *pmdl, int animnum );
float TIKI_Anim_Time( dtiki_t *pmdl, int animnum );
float TIKI_Anim_Frametime( dtiki_t *pmdl, int animnum );
void TIKI_Anim_Delta( dtiki_t *pmdl, int animnum, float *delta );
qboolean TIKI_Anim_HasDelta( dtiki_t *pmdl, int animnum );
void TIKI_Anim_DeltaOverTime( dtiki_t *pTiki, int iAnimnum, float fTime1, float fTime2, vec3_t vDelta );
void TIKI_Anim_AngularDeltaOverTime( dtiki_t *pTiki, int iAnimnum, float fTime1, float fTime2, float *fDelta );
int TIKI_Anim_Flags( dtiki_t *pmdl, int animnum );
int TIKI_Anim_FlagsSkel( dtiki_t *pmdl, int animnum );
qboolean TIKI_Anim_HasServerCommands( dtiki_t *pmdl, int animnum );
qboolean TIKI_Anim_HasClientCommands( dtiki_t *pmdl, int animnum );
float TIKI_Anim_CrossblendTime( dtiki_t *pmdl, int animnum );
void TIKI_GetAnimOrder(dloaddef_t *ld, int *order);
const char *TIKI_Anim_NameForNum(dtiki_t *pmdl, int animnum);
int TIKI_Anim_NumForName(dtiki_t *pmdl, const char *name);
int TIKI_Anim_Random(dtiki_t *pmdl, const char *name);
int TIKI_Anim_NumFrames(dtiki_t *pmdl, int animnum);
float TIKI_Anim_Time(dtiki_t *pmdl, int animnum);
float TIKI_Anim_Frametime(dtiki_t *pmdl, int animnum);
void TIKI_Anim_Delta(dtiki_t *pmdl, int animnum, float *delta);
qboolean TIKI_Anim_HasDelta(dtiki_t *pmdl, int animnum);
void TIKI_Anim_DeltaOverTime(dtiki_t *pTiki, int iAnimnum, float fTime1, float fTime2, vec3_t vDelta);
void TIKI_Anim_AngularDeltaOverTime(dtiki_t *pTiki, int iAnimnum, float fTime1, float fTime2, float *fDelta);
int TIKI_Anim_Flags(dtiki_t *pmdl, int animnum);
int TIKI_Anim_FlagsSkel(dtiki_t *pmdl, int animnum);
qboolean TIKI_Anim_HasServerCommands(dtiki_t *pmdl, int animnum);
qboolean TIKI_Anim_HasClientCommands(dtiki_t *pmdl, int animnum);
float TIKI_Anim_CrossblendTime(dtiki_t *pmdl, int animnum);
#ifdef __cplusplus
}
#endif
#endif // __TIKI_ANIM_H__

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -31,21 +31,23 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "tiki_skel.h"
struct pchar {
const char *m_Value;
const char *m_Value;
pchar() { m_Value = NULL; }
pchar( const char *value ) { m_Value = value; }
friend bool operator==( const pchar& l, const pchar& r ) { return !strcmp( l.m_Value, r.m_Value ); }
pchar() { m_Value = NULL; }
pchar(const char *value) { m_Value = value; }
friend bool operator==(const pchar& l, const pchar& r) { return !strcmp(l.m_Value, r.m_Value); }
};
con_map< pchar, dtikianim_t * > *tikianimcache;
con_map< pchar, dtiki_t * > *tikicache;
static skeletor_c *skel_entity_cache[ 1024 ];
con_map<pchar, dtikianim_t *> *tikianimcache;
con_map<pchar, dtiki_t *> *tikicache;
static skeletor_c *skel_entity_cache[1024];
template<>
int HashCode< pchar >( const pchar& key )
int HashCode<pchar>(const pchar& key)
{
return HashCode< const char * >( key.m_Value );
return HashCode<const char *>(key.m_Value);
}
/*
@ -53,21 +55,20 @@ int HashCode< pchar >( const pchar& key )
TIKI_FindTikiAnim
===============
*/
dtikianim_t *TIKI_FindTikiAnim( const char *path )
dtikianim_t *TIKI_FindTikiAnim(const char *path)
{
char filename[ 1024 ];
char filename[1024];
if( tikianimcache )
{
dtikianim_t **t;
if (tikianimcache) {
dtikianim_t **t;
t = tikianimcache->find( filename );
if( t ) {
return *t;
}
}
t = tikianimcache->find(filename);
if (t) {
return *t;
}
}
return NULL;
return NULL;
}
/*
@ -75,21 +76,20 @@ dtikianim_t *TIKI_FindTikiAnim( const char *path )
TIKI_FindTiki
===============
*/
dtiki_t *TIKI_FindTiki( const char *path )
dtiki_t *TIKI_FindTiki(const char *path)
{
char filename[ 1024 ];
char filename[1024];
if( tikicache )
{
dtiki_t **t;
if (tikicache) {
dtiki_t **t;
t = tikicache->find( filename );
if( t ) {
return *t;
}
}
t = tikicache->find(filename);
if (t) {
return *t;
}
}
return NULL;
return NULL;
}
/*
@ -97,41 +97,36 @@ dtiki_t *TIKI_FindTiki( const char *path )
TIKI_RegisterTikiAnimFlags
===============
*/
dtikianim_t *TIKI_RegisterTikiAnimFlags( const char *path, qboolean use )
dtikianim_t *TIKI_RegisterTikiAnimFlags(const char *path, qboolean use)
{
dtikianim_t *tiki;
char filename[ 1024 ];
dtikianim_t *tiki;
char filename[1024];
strcpy( filename, path );
FS_CanonicalFilename( filename );
strcpy(filename, path);
FS_CanonicalFilename(filename);
if( tikianimcache )
{
dtikianim_t **t;
if (tikianimcache) {
dtikianim_t **t;
t = tikianimcache->find( filename );
if( t ) {
return *t;
}
}
else
{
tikianimcache = new con_map < pchar, dtikianim_t * > ;
}
t = tikianimcache->find(filename);
if (t) {
return *t;
}
} else {
tikianimcache = new con_map<pchar, dtikianim_t *>;
}
tiki = TIKI_LoadTikiAnim( filename );
if( tiki )
{
if( use )
{
Com_Printf( "^~^~^ Add the following line to the *_precache.scr map script:\n" );
Com_Printf( "cache %s\n", filename );
}
tiki = TIKI_LoadTikiAnim(filename);
if (tiki) {
if (use) {
Com_Printf("^~^~^ Add the following line to the *_precache.scr map script:\n");
Com_Printf("cache %s\n", filename);
}
( *tikianimcache )[ tiki->name ] = tiki;
}
(*tikianimcache)[tiki->name] = tiki;
}
return tiki;
return tiki;
}
/*
@ -139,9 +134,9 @@ dtikianim_t *TIKI_RegisterTikiAnimFlags( const char *path, qboolean use )
TIKI_RegisterTikiAnim
===============
*/
dtikianim_t *TIKI_RegisterTikiAnim( const char *path )
dtikianim_t *TIKI_RegisterTikiAnim(const char *path)
{
return TIKI_RegisterTikiAnimFlags( path, qfalse );
return TIKI_RegisterTikiAnimFlags(path, qfalse);
}
/*
@ -149,75 +144,69 @@ dtikianim_t *TIKI_RegisterTikiAnim( const char *path )
TIKI_RegisterTikiFlags
===============
*/
dtiki_t *TIKI_RegisterTikiFlags( const char *path, qboolean use )
dtiki_t *TIKI_RegisterTikiFlags(const char *path, qboolean use)
{
dtiki_t *tiki = NULL;
dtikianim_t* tikianim = NULL;
con_map< str, str > keyValues;
const char *next_path;
str key;
str value;
const char *name;
char filename[ 1024 ];
char full_filename[ 1024 ];
dtiki_t *tiki = NULL;
dtikianim_t *tikianim = NULL;
con_map<str, str> keyValues;
const char *next_path;
str key;
str value;
const char *name;
char filename[1024];
char full_filename[1024];
full_filename[ 0 ] = 0;
full_filename[0] = 0;
name = path;
for(next_path = strstr(name, "|"); next_path; next_path = strstr(name, "|"))
{
key = name;
key[next_path - name] = 0;
name = path;
for (next_path = strstr(name, "|"); next_path; next_path = strstr(name, "|")) {
key = name;
key[next_path - name] = 0;
name = next_path + 1;
next_path = strstr(name, "|" );
if( !next_path ) {
break;
}
name = next_path + 1;
next_path = strstr(name, "|");
if (!next_path) {
break;
}
value = name;
value[next_path - name] = 0;
name = next_path + 1;
value = name;
value[next_path - name] = 0;
name = next_path + 1;
// add it to the entry
keyValues[key] = value;
// add it to the entry
keyValues[key] = value;
strcat(full_filename, key.c_str());
strcat(full_filename, "|");
strcat(full_filename, value.c_str());
strcat(full_filename, "|");
}
strcat(full_filename, key.c_str());
strcat(full_filename, "|");
strcat(full_filename, value.c_str());
strcat(full_filename, "|");
}
strcpy(filename, name);
FS_CanonicalFilename(filename);
strcat(full_filename, filename);
strcpy(filename, name);
FS_CanonicalFilename(filename);
strcat(full_filename, filename);
if (!tikicache)
{
tikicache = new con_map<pchar, dtiki_t*>;
}
else
{
dtiki_t **t;
if (!tikicache) {
tikicache = new con_map<pchar, dtiki_t *>;
} else {
dtiki_t **t;
t = tikicache->find(full_filename);
if (t) {
return *t;
}
}
t = tikicache->find(full_filename);
if (t) {
return *t;
}
}
tikianim = TIKI_RegisterTikiAnimFlags(filename, use);
if (tikianim)
{
tiki = TIKI_LoadTikiModel(tikianim, full_filename, &keyValues);
if (tiki)
{
// cache the tiki
(*tikicache)[tiki->name] = tiki;
}
}
tikianim = TIKI_RegisterTikiAnimFlags(filename, use);
if (tikianim) {
tiki = TIKI_LoadTikiModel(tikianim, full_filename, &keyValues);
if (tiki) {
// cache the tiki
(*tikicache)[tiki->name] = tiki;
}
}
return tiki;
return tiki;
}
/*
@ -225,9 +214,9 @@ dtiki_t *TIKI_RegisterTikiFlags( const char *path, qboolean use )
TIKI_RegisterTiki
===============
*/
dtiki_t *TIKI_RegisterTiki( const char *path )
dtiki_t *TIKI_RegisterTiki(const char *path)
{
return TIKI_RegisterTikiFlags( path, qfalse );
return TIKI_RegisterTikiFlags(path, qfalse);
}
/*
@ -237,28 +226,26 @@ TIKI_FreeAll
*/
void TIKI_FreeAll()
{
dtiki_t **entry;
dtikianim_t **entryanim;
dtiki_t *tiki;
dtikianim_t *tikianim;
int i;
dtiki_t **entry;
dtikianim_t **entryanim;
dtiki_t *tiki;
dtikianim_t *tikianim;
int i;
if( tikicache )
{
con_map_enum< pchar, dtiki_t * > en = *tikicache;
if (tikicache) {
con_map_enum<pchar, dtiki_t *> en = *tikicache;
for( entry = en.NextValue(); entry != NULL; entry = en.NextValue() )
{
skeletor_c *skeletor;
for (entry = en.NextValue(); entry != NULL; entry = en.NextValue()) {
skeletor_c *skeletor;
tiki = *entry;
skeletor = ( skeletor_c * )tiki->skeletor;
if( skeletor ) {
delete skeletor;
}
tiki = *entry;
skeletor = (skeletor_c *)tiki->skeletor;
if (skeletor) {
delete skeletor;
}
tiki->m_boneList.CleanUpChannels();
/*
tiki->m_boneList.CleanUpChannels();
/*
if( tiki->a->m_aliases )
{
TIKI_Free( tiki->a->m_aliases );
@ -267,46 +254,40 @@ void TIKI_FreeAll()
}
*/
TIKI_Free( tiki );
}
TIKI_Free(tiki);
}
tikicache->clear();
}
tikicache->clear();
}
if( tikianimcache )
{
con_map_enum< pchar, dtikianim_t * > en = *tikianimcache;
if (tikianimcache) {
con_map_enum<pchar, dtikianim_t *> en = *tikianimcache;
for( entryanim = en.NextValue(); entryanim != NULL; entryanim = en.NextValue() )
{
tikianim = *entryanim;
for (entryanim = en.NextValue(); entryanim != NULL; entryanim = en.NextValue()) {
tikianim = *entryanim;
TIKI_RemoveTiki( tikianim );
TIKI_RemoveTiki(tikianim);
if( tikianim->m_aliases )
{
TIKI_Free( tikianim->m_aliases );
tikianim->m_aliases = NULL;
tikianim->num_anims = 0;
}
if (tikianim->m_aliases) {
TIKI_Free(tikianim->m_aliases);
tikianim->m_aliases = NULL;
tikianim->num_anims = 0;
}
TIKI_Free( tikianim );
}
TIKI_Free(tikianim);
}
tikianimcache->clear();
}
tikianimcache->clear();
}
tiki_loading = true;
if( skelcache )
{
for( i = 0; i < cache_maxskel; i++ )
{
if (skelcache->skel)
{
TIKI_FreeSkel(i);
}
}
}
tiki_loading = true;
if (skelcache) {
for (i = 0; i < cache_maxskel; i++) {
if (skelcache->skel) {
TIKI_FreeSkel(i);
}
}
}
}
/*
@ -315,32 +296,31 @@ TIKI_GetSkeletor
===============
*/
static qboolean tiki_started;
void *TIKI_GetSkeletor( dtiki_t *tiki, int entnum )
void *TIKI_GetSkeletor(dtiki_t *tiki, int entnum)
{
skeletor_c *skel;
skeletor_c *skel;
if( entnum == ENTITYNUM_NONE )
{
if( !tiki->skeletor ) tiki->skeletor = new skeletor_c( tiki );
skel = ( skeletor_c * )tiki->skeletor;
}
else
{
skel = skel_entity_cache[ entnum ];
if( skel )
{
if( skel->m_Tiki == tiki ) {
return skel_entity_cache[ entnum ];
}
if (entnum == ENTITYNUM_NONE) {
if (!tiki->skeletor) {
tiki->skeletor = new skeletor_c(tiki);
}
skel = (skeletor_c *)tiki->skeletor;
} else {
skel = skel_entity_cache[entnum];
if (skel) {
if (skel->m_Tiki == tiki) {
return skel_entity_cache[entnum];
}
delete skel;
}
delete skel;
}
skel = new skeletor_c( tiki );
skel_entity_cache[ entnum ] = skel;
}
skel = new skeletor_c(tiki);
skel_entity_cache[entnum] = skel;
}
return skel;
return skel;
}
/*
@ -348,21 +328,19 @@ void *TIKI_GetSkeletor( dtiki_t *tiki, int entnum )
TIKI_DeleteSkeletor
===============
*/
static void TIKI_DeleteSkeletor( int entnum )
static void TIKI_DeleteSkeletor(int entnum)
{
skeletor_c *skel;
skeletor_c *skel;
if( entnum == ENTITYNUM_NONE )
{
return;
}
if (entnum == ENTITYNUM_NONE) {
return;
}
skel = skel_entity_cache[ entnum ];
if( skel )
{
delete skel;
skel_entity_cache[ entnum ] = 0;
}
skel = skel_entity_cache[entnum];
if (skel) {
delete skel;
skel_entity_cache[entnum] = 0;
}
}
/*
@ -370,14 +348,15 @@ static void TIKI_DeleteSkeletor( int entnum )
TIKI_Begin
===============
*/
void TIKI_Begin( void )
void TIKI_Begin(void)
{
int i;
int i;
for( i = 0; i < TIKI_MAX_SKELCACHE; i++ )
skel_entity_cache[ i ] = 0;
for (i = 0; i < TIKI_MAX_SKELCACHE; i++) {
skel_entity_cache[i] = 0;
}
tiki_started = true;
tiki_started = true;
}
/*
@ -385,14 +364,15 @@ void TIKI_Begin( void )
TIKI_End
===============
*/
void TIKI_End( void )
void TIKI_End(void)
{
int i;
int i;
for( i = 0; i < TIKI_MAX_SKELCACHE; i++ )
TIKI_DeleteSkeletor( i );
for (i = 0; i < TIKI_MAX_SKELCACHE; i++) {
TIKI_DeleteSkeletor(i);
}
tiki_started = false;
tiki_started = false;
}
/*
@ -400,32 +380,28 @@ void TIKI_End( void )
TIKI_FinishLoad
===============
*/
void TIKI_FinishLoad( void )
void TIKI_FinishLoad(void)
{
con_map_enum< pchar, dtikianim_t * > en;
dtikianim_t **entry;
con_map_enum<pchar, dtikianim_t *> en;
dtikianim_t **entry;
if( !tiki_loading )
{
return;
}
if (!tiki_loading) {
return;
}
tiki_loading = false;
SkeletorCacheCleanCache();
tiki_loading = false;
SkeletorCacheCleanCache();
if( !low_anim_memory || !low_anim_memory->integer )
{
return;
}
if (!low_anim_memory || !low_anim_memory->integer) {
return;
}
if( tikianimcache )
{
en = *tikianimcache;
for( entry = en.NextValue(); entry != NULL; entry = en.NextValue() )
{
TIKI_LoadAnim( *entry );
}
}
if (tikianimcache) {
en = *tikianimcache;
for (entry = en.NextValue(); entry != NULL; entry = en.NextValue()) {
TIKI_LoadAnim(*entry);
}
}
}
/*
@ -433,33 +409,29 @@ void TIKI_FinishLoad( void )
TIKI_FreeImages
===============
*/
void TIKI_FreeImages( void )
void TIKI_FreeImages(void)
{
dtikisurface_t *dsurf;
dtiki_t *tiki;
int j, k;
dtiki_t **entry;
con_map_enum< pchar, dtiki_t * > en;
dtikisurface_t *dsurf;
dtiki_t *tiki;
int j, k;
dtiki_t **entry;
con_map_enum<pchar, dtiki_t *> en;
if( !tikicache )
{
return;
}
if (!tikicache) {
return;
}
en = *tikicache;
for( entry = en.NextValue(); entry != NULL; entry = en.NextValue() )
{
tiki = *entry;
for( k = 0; k < tiki->num_surfaces; k++ )
{
dsurf = &tiki->surfaces[ k ];
en = *tikicache;
for (entry = en.NextValue(); entry != NULL; entry = en.NextValue()) {
tiki = *entry;
for (k = 0; k < tiki->num_surfaces; k++) {
dsurf = &tiki->surfaces[k];
for( j = 0; j < dsurf->numskins; j++ )
{
dsurf->hShader[ j ] = 0;
}
}
}
for (j = 0; j < dsurf->numskins; j++) {
dsurf->hShader[j] = 0;
}
}
}
}
/*
@ -467,20 +439,18 @@ void TIKI_FreeImages( void )
TIKI_TikiAnimList_f
===============
*/
void TIKI_TikiAnimList_f( void )
void TIKI_TikiAnimList_f(void)
{
con_map_enum< pchar, dtikianim_t * > en;
dtikianim_t **entry;
con_map_enum<pchar, dtikianim_t *> en;
dtikianim_t **entry;
Com_Printf( "\ntikianimlist:\n" );
if( tikicache )
{
en = *tikianimcache;
for( entry = en.NextValue(); entry != NULL; entry = en.NextValue() )
{
Com_Printf( "%s\n", ( *entry )->name );
}
}
Com_Printf("\ntikianimlist:\n");
if (tikicache) {
en = *tikianimcache;
for (entry = en.NextValue(); entry != NULL; entry = en.NextValue()) {
Com_Printf("%s\n", (*entry)->name);
}
}
}
/*
@ -488,18 +458,16 @@ void TIKI_TikiAnimList_f( void )
TIKI_TikiList_f
===============
*/
void TIKI_TikiList_f( void )
void TIKI_TikiList_f(void)
{
con_map_enum< pchar, dtiki_t * > en;
dtiki_t **entry;
con_map_enum<pchar, dtiki_t *> en;
dtiki_t **entry;
Com_Printf( "\ntikilist:\n" );
if( tikicache )
{
en = *tikicache;
for( entry = en.NextValue(); entry != NULL; entry = en.NextValue() )
{
Com_Printf( "%s\n", ( *entry )->name );
}
}
Com_Printf("\ntikilist:\n");
if (tikicache) {
en = *tikicache;
for (entry = en.NextValue(); entry != NULL; entry = en.NextValue()) {
Com_Printf("%s\n", (*entry)->name);
}
}
}

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -22,31 +22,28 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
// tiki_cache.h : TIKI Cache
#ifndef __TIKI_CACHE_H__
#define __TIKI_CACHE_H__
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
dtikianim_t *TIKI_FindTikiAnim( const char *path );
dtiki_t *TIKI_FindTiki( const char *path );
dtikianim_t *TIKI_RegisterTikiAnimFlags( const char *path, qboolean use );
dtikianim_t *TIKI_RegisterTikiAnim( const char *path );
dtiki_t *TIKI_RegisterTikiFlags( const char *path, qboolean use );
dtiki_t *TIKI_RegisterTiki( const char *path );
void TIKI_FreeAll();
void *TIKI_GetSkeletor( dtiki_t *tiki, int entnum );
static void TIKI_DeleteSkeletor( int entnum );
void TIKI_Begin( void );
void TIKI_End( void );
void TIKI_FinishLoad( void );
void TIKI_FreeImages( void );
void TIKI_TikiAnimList_f( void );
void TIKI_TikiList_f( void );
dtikianim_t *TIKI_FindTikiAnim(const char *path);
dtiki_t *TIKI_FindTiki(const char *path);
dtikianim_t *TIKI_RegisterTikiAnimFlags(const char *path, qboolean use);
dtikianim_t *TIKI_RegisterTikiAnim(const char *path);
dtiki_t *TIKI_RegisterTikiFlags(const char *path, qboolean use);
dtiki_t *TIKI_RegisterTiki(const char *path);
void TIKI_FreeAll();
void *TIKI_GetSkeletor(dtiki_t *tiki, int entnum);
static void TIKI_DeleteSkeletor(int entnum);
void TIKI_Begin(void);
void TIKI_End(void);
void TIKI_FinishLoad(void);
void TIKI_FreeImages(void);
void TIKI_TikiAnimList_f(void);
void TIKI_TikiList_f(void);
#ifdef __cplusplus
}
#endif
#endif // __TIKI_CACHE_H__

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -32,8 +32,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
TIKI_ModelInfo
===============
*/
void TIKI_ModelInfo( dtiki_t *tiki )
void TIKI_ModelInfo(dtiki_t *tiki)
{
// fixme: wtf ? what should it do
Com_Printf( "This function is broken. So sorry... KDT\n" );
// fixme: wtf ? what should it do
Com_Printf("This function is broken. So sorry... KDT\n");
}

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -22,17 +22,14 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
// tiki_commands.h : TIKI Commands
#ifndef __TIKI_COMMANDS_H__
#define __TIKI_COMMANDS_H__
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
void TIKI_ModelInfo( dtiki_t *tiki );
void TIKI_ModelInfo(dtiki_t *tiki);
#ifdef __cplusplus
}
#endif
#endif // __TIKI_COMMANDS_H__

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -22,8 +22,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
// tiki_files.h : TIKI Files
#ifndef __TIKI_FILES_H__
#define __TIKI_FILES_H__
#pragma once
#include "../qcommon/tiki.h"
@ -31,44 +30,42 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
extern "C" {
#endif
extern qboolean tiki_loading;
extern qboolean tiki_loading;
extern cvar_t *dumploadedanims;
extern cvar_t *low_anim_memory;
extern cvar_t *showLoad;
extern cvar_t *convertAnims;
extern cvar_t *dumploadedanims;
extern cvar_t *low_anim_memory;
extern cvar_t *showLoad;
extern cvar_t *convertAnims;
extern dloaddef_t loaddef;
extern dloaddef_t loaddef;
void TIKI_FreeStorage( dloaddef_t *ld );
void *TIKI_AllocateLoadData( size_t length );
char *TIKI_CopyString( const char *s );
dtikianim_t *TIKI_LoadTikiAnim( const char *path );
void TIKI_FreeStorage(dloaddef_t *ld);
void *TIKI_AllocateLoadData(size_t length);
char *TIKI_CopyString(const char *s);
dtikianim_t *TIKI_LoadTikiAnim(const char *path);
#ifdef __cplusplus
dtiki_t *TIKI_LoadTikiModel( dtikianim_t *tikianim, const char *name, con_map<str, str> *keyValues );
dtiki_t *TIKI_LoadTikiModel(dtikianim_t *tikianim, const char *name, con_map<str, str> *keyValues);
#endif
void TIKI_CalcRadius( dtiki_t *tiki );
skelAnimDataGameHeader_t *SkeletorCacheFileCallback( const char *path );
skelAnimDataGameHeader_t *SkeletorCacheGetData( int index );
void TIKI_CalcRadius(dtiki_t *tiki);
skelAnimDataGameHeader_t *SkeletorCacheFileCallback(const char *path);
skelAnimDataGameHeader_t *SkeletorCacheGetData(int index);
#ifdef __cplusplus
bool SkeletorCacheFindFilename( const char *path, int *indexPtr );
bool SkeletorCacheLoadData( const char *path, bool precache, int newIndex );
void SkeletorCacheUnloadData( int index );
void SkeletorCacheCleanCache();
void TikiAddToBounds( dtikianim_t *tiki, SkelVec3 *newBounds );
bool SkeletorCacheFindFilename(const char *path, int *indexPtr);
bool SkeletorCacheLoadData(const char *path, bool precache, int newIndex);
void SkeletorCacheUnloadData(int index);
void SkeletorCacheCleanCache();
void TikiAddToBounds(dtikianim_t *tiki, SkelVec3 *newBounds);
#endif
void TIKI_AnimList_f();
void TIKI_FixFrameNum( dtikianim_t *ptiki, skelAnimDataGameHeader_t *animData, dtikicmd_t *cmd, const char *alias );
void TIKI_LoadAnim( dtikianim_t *ptiki );
dtikianim_t *TIKI_InitTiki( dloaddef_t *ld, size_t defsize );
void TIKI_RemoveTiki( dtikianim_t *ptiki );
void TIKI_AnimList_f();
void TIKI_FixFrameNum(dtikianim_t *ptiki, skelAnimDataGameHeader_t *animData, dtikicmd_t *cmd, const char *alias);
void TIKI_LoadAnim(dtikianim_t *ptiki);
dtikianim_t *TIKI_InitTiki(dloaddef_t *ld, size_t defsize);
void TIKI_RemoveTiki(dtikianim_t *ptiki);
#ifdef __cplusplus
}
#endif
#endif // __TIKI_FILES_H__

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -34,46 +34,48 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
TIKI_Frame_Commands_Server
===============
*/
qboolean TIKI_Frame_Commands_Server( dtiki_t *pmdl, int animnum, int framenum, tiki_cmd_t *tiki_cmd )
qboolean TIKI_Frame_Commands_Server(dtiki_t *pmdl, int animnum, int framenum, tiki_cmd_t *tiki_cmd)
{
dtikicmd_t *pcmd;
dtikianimdef_t *panimdef;
qboolean found;
int i;
dtikicmd_t *pcmd;
dtikianimdef_t *panimdef;
qboolean found;
int i;
if (!pmdl || !pmdl->a) {
return qfalse;
}
if (!pmdl || !pmdl->a) {
return qfalse;
}
if (animnum >= pmdl->a->num_anims || animnum < 0) {
return qfalse;
}
if (animnum >= pmdl->a->num_anims || animnum < 0) {
return qfalse;
}
tiki_cmd->num_cmds = 0;
panimdef = pmdl->a->animdefs[ animnum ];
found = false;
tiki_cmd->num_cmds = 0;
panimdef = pmdl->a->animdefs[animnum];
found = false;
for( i = 0; i < panimdef->num_server_cmds; i++ )
{
pcmd = &panimdef->server_cmds[ i ];
for (i = 0; i < panimdef->num_server_cmds; i++) {
pcmd = &panimdef->server_cmds[i];
if( ( pcmd->frame_num == framenum ) || ( pcmd->frame_num == TIKI_FRAME_EVERY && framenum >= 0 ) )
{
if( tiki_cmd->num_cmds >= TIKI_MAX_COMMANDS )
{
TIKI_Error( "TIKI_Frame_Commands_Client: Too many cmds for anim %d frame %d for %s.\n", animnum, framenum, pmdl->a->name );
return false;
}
if ((pcmd->frame_num == framenum) || (pcmd->frame_num == TIKI_FRAME_EVERY && framenum >= 0)) {
if (tiki_cmd->num_cmds >= TIKI_MAX_COMMANDS) {
TIKI_Error(
"TIKI_Frame_Commands_Client: Too many cmds for anim %d frame %d for %s.\n",
animnum,
framenum,
pmdl->a->name
);
return false;
}
tiki_cmd->cmds[ tiki_cmd->num_cmds ].num_args = pcmd->num_args;
tiki_cmd->cmds[ tiki_cmd->num_cmds ].args = pcmd->args;
tiki_cmd->num_cmds++;
tiki_cmd->cmds[tiki_cmd->num_cmds].num_args = pcmd->num_args;
tiki_cmd->cmds[tiki_cmd->num_cmds].args = pcmd->args;
tiki_cmd->num_cmds++;
found = true;
}
}
found = true;
}
}
return found;
return found;
}
/*
@ -81,12 +83,12 @@ qboolean TIKI_Frame_Commands_Server( dtiki_t *pmdl, int animnum, int framenum, t
TIKI_Frame_Commands_Client
===============
*/
qboolean TIKI_Frame_Commands_Client( dtiki_t *pmdl, int animnum, int framenum, tiki_cmd_t *tiki_cmd )
qboolean TIKI_Frame_Commands_Client(dtiki_t *pmdl, int animnum, int framenum, tiki_cmd_t *tiki_cmd)
{
dtikicmd_t *pcmd;
dtikianimdef_t *panimdef;
qboolean found;
int i;
dtikicmd_t *pcmd;
dtikianimdef_t *panimdef;
qboolean found;
int i;
if (!pmdl || !pmdl->a) {
return qfalse;
@ -96,31 +98,33 @@ qboolean TIKI_Frame_Commands_Client( dtiki_t *pmdl, int animnum, int framenum, t
return qfalse;
}
tiki_cmd->num_cmds = 0;
panimdef = pmdl->a->animdefs[ animnum ];
found = false;
tiki_cmd->num_cmds = 0;
panimdef = pmdl->a->animdefs[animnum];
found = false;
for( i = 0; i < panimdef->num_client_cmds; i++ )
{
pcmd = &panimdef->client_cmds[ i ];
for (i = 0; i < panimdef->num_client_cmds; i++) {
pcmd = &panimdef->client_cmds[i];
if( ( pcmd->frame_num == framenum ) || ( pcmd->frame_num == TIKI_FRAME_EVERY && framenum >= 0 ) )
{
if( tiki_cmd->num_cmds >= TIKI_MAX_COMMANDS )
{
TIKI_Error( "TIKI_Frame_Commands_Client: Too many cmds for anim %d frame %d for %s.\n", animnum, framenum, pmdl->a->name );
return false;
}
if ((pcmd->frame_num == framenum) || (pcmd->frame_num == TIKI_FRAME_EVERY && framenum >= 0)) {
if (tiki_cmd->num_cmds >= TIKI_MAX_COMMANDS) {
TIKI_Error(
"TIKI_Frame_Commands_Client: Too many cmds for anim %d frame %d for %s.\n",
animnum,
framenum,
pmdl->a->name
);
return false;
}
tiki_cmd->cmds[ tiki_cmd->num_cmds ].num_args = pcmd->num_args;
tiki_cmd->cmds[ tiki_cmd->num_cmds ].args = pcmd->args;
tiki_cmd->num_cmds++;
tiki_cmd->cmds[tiki_cmd->num_cmds].num_args = pcmd->num_args;
tiki_cmd->cmds[tiki_cmd->num_cmds].args = pcmd->args;
tiki_cmd->num_cmds++;
found = true;
}
}
found = true;
}
}
return found;
return found;
}
/*
@ -128,13 +132,13 @@ qboolean TIKI_Frame_Commands_Client( dtiki_t *pmdl, int animnum, int framenum, t
TIKI_Frame_Commands_ClientTime
===============
*/
qboolean TIKI_Frame_Commands_ClientTime( dtiki_t *pmdl, int animnum, float start, float end, tiki_cmd_t *tiki_cmd )
qboolean TIKI_Frame_Commands_ClientTime(dtiki_t *pmdl, int animnum, float start, float end, tiki_cmd_t *tiki_cmd)
{
dtikicmd_t *pcmd;
dtikianimdef_t *panimdef;
qboolean found;
int i;
float cmdTime;
dtikicmd_t *pcmd;
dtikianimdef_t *panimdef;
qboolean found;
int i;
float cmdTime;
if (!pmdl || !pmdl->a) {
return qfalse;
@ -144,30 +148,33 @@ qboolean TIKI_Frame_Commands_ClientTime( dtiki_t *pmdl, int animnum, float start
return qfalse;
}
tiki_cmd->num_cmds = 0;
panimdef = pmdl->a->animdefs[ animnum ];
found = false;
tiki_cmd->num_cmds = 0;
panimdef = pmdl->a->animdefs[animnum];
found = false;
for( i = 0; i < panimdef->num_client_cmds; i++ )
{
pcmd = &panimdef->client_cmds[ i ];
cmdTime = pcmd->frame_num / 1000.0f;
for (i = 0; i < panimdef->num_client_cmds; i++) {
pcmd = &panimdef->client_cmds[i];
cmdTime = pcmd->frame_num / 1000.0f;
if( cmdTime >= start && cmdTime <= end )
{
if( tiki_cmd->num_cmds >= TIKI_MAX_COMMANDS )
{
TIKI_Error( "TIKI_Frame_Commands_Client: Too many cmds for anim %d times %f %f for %s.\n", animnum, start, end, pmdl->a->name );
return false;
}
if (cmdTime >= start && cmdTime <= end) {
if (tiki_cmd->num_cmds >= TIKI_MAX_COMMANDS) {
TIKI_Error(
"TIKI_Frame_Commands_Client: Too many cmds for anim %d times %f %f for %s.\n",
animnum,
start,
end,
pmdl->a->name
);
return false;
}
tiki_cmd->cmds[ tiki_cmd->num_cmds ].num_args = pcmd->num_args;
tiki_cmd->cmds[ tiki_cmd->num_cmds ].args = pcmd->args;
tiki_cmd->num_cmds++;
tiki_cmd->cmds[tiki_cmd->num_cmds].num_args = pcmd->num_args;
tiki_cmd->cmds[tiki_cmd->num_cmds].args = pcmd->args;
tiki_cmd->num_cmds++;
found = true;
}
}
found = true;
}
}
return true;
return true;
}

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -22,19 +22,16 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
// tiki_frames.h : TIKI Frame
#ifndef __TIKI_FRAME_H__
#define __TIKI_FRAME_H__
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
qboolean TIKI_Frame_Commands_Server( dtiki_t *pmdl, int animnum, int framenum, tiki_cmd_t *tiki_cmd );
qboolean TIKI_Frame_Commands_Client( dtiki_t *pmdl, int animnum, int framenum, tiki_cmd_t *tiki_cmd );
qboolean TIKI_Frame_Commands_ClientTime( dtiki_t *pmdl, int animnum, float start, float end, tiki_cmd_t *tiki_cmd );
qboolean TIKI_Frame_Commands_Server(dtiki_t *pmdl, int animnum, int framenum, tiki_cmd_t *tiki_cmd);
qboolean TIKI_Frame_Commands_Client(dtiki_t *pmdl, int animnum, int framenum, tiki_cmd_t *tiki_cmd);
qboolean TIKI_Frame_Commands_ClientTime(dtiki_t *pmdl, int animnum, float start, float end, tiki_cmd_t *tiki_cmd);
#ifdef __cplusplus
}
#endif
#endif // __TIKI_FRAME_H__

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -26,34 +26,34 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "qcommon.h"
#include "tiki_imports.h"
void TIKI_DPrintf( const char *fmt, ... )
void TIKI_DPrintf(const char *fmt, ...)
{
char msg[ 4096 ];
va_list va;
char msg[4096];
va_list va;
va_start( va, fmt );
vsprintf( msg, fmt, va );
va_end( va );
va_start(va, fmt);
vsprintf(msg, fmt, va);
va_end(va);
Com_DPrintf( "%s", msg );
Com_DPrintf("%s", msg);
}
void TIKI_Free( void *ptr )
void TIKI_Free(void *ptr)
{
Z_Free( ptr );
Z_Free(ptr);
}
void *TIKI_Alloc( size_t size )
void *TIKI_Alloc(size_t size)
{
return Z_TagMalloc( size, TAG_TIKI );
return Z_TagMalloc(size, TAG_TIKI);
}
void TIKI_FreeFile( void *buffer )
void TIKI_FreeFile(void *buffer)
{
FS_FreeFile( buffer );
FS_FreeFile(buffer);
}
int TIKI_ReadFileEx( const char *qpath, void **buffer, qboolean quiet )
int TIKI_ReadFileEx(const char *qpath, void **buffer, qboolean quiet)
{
return FS_ReadFileEx( qpath, buffer, quiet );
return FS_ReadFileEx(qpath, buffer, quiet);
}

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -28,13 +28,13 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
extern "C" {
#endif
void TIKI_DPrintf( const char *fmt, ... );
void TIKI_DPrintf(const char *fmt, ...);
void TIKI_Free( void *ptr );
void *TIKI_Alloc( size_t size );
void TIKI_Free(void *ptr);
void *TIKI_Alloc(size_t size);
void TIKI_FreeFile( void *buffer );
int TIKI_ReadFileEx( const char *qpath, void **buffer, qboolean quiet );
void TIKI_FreeFile(void *buffer);
int TIKI_ReadFileEx(const char *qpath, void **buffer, qboolean quiet);
#ifdef __cplusplus
}

View file

@ -24,13 +24,13 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "tiki.h"
int TIKI_Skel_Bones_Index;
int skeletorMorphCacheIndex;
int TIKI_Skel_Bones_Index;
int skeletorMorphCacheIndex;
skelBoneCache_t TIKI_Skel_Bones[MAX_SKELBONES];
int skeletorMorphCache[MAX_SKELMORPH];
int skeletorMorphCache[MAX_SKELMORPH];
void TIKI_Reset_Caches()
{
TIKI_Skel_Bones_Index = 0;
TIKI_Skel_Bones_Index = 0;
skeletorMorphCacheIndex = 0;
}

View file

@ -26,15 +26,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
extern "C" {
#endif
#define MAX_SKELBONES 20000
#define MAX_SKELMORPH 12800
#define MAX_SKELBONES 20000
#define MAX_SKELMORPH 12800
extern int TIKI_Skel_Bones_Index;
extern int skeletorMorphCacheIndex;
extern skelBoneCache_t TIKI_Skel_Bones[];
extern int skeletorMorphCache[];
extern int TIKI_Skel_Bones_Index;
extern int skeletorMorphCacheIndex;
extern skelBoneCache_t TIKI_Skel_Bones[];
extern int skeletorMorphCache[];
void TIKI_Reset_Caches();
void TIKI_Reset_Caches();
#ifdef __cplusplus
}

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -20,38 +20,58 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
===========================================================================
*/
#ifndef TIKI_PARSE_H
#define TIKI_PARSE_H
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
const char *TIKI_FileExtension( const char *in );
void TIKI_ParseFrameCommands( dloaddef_t *ld, dloadframecmd_t **cmdlist, int maxcmds, int *numcmds );
void TIKI_ParseAnimationCommands( dloaddef_t *ld, dloadanim_t *anim );
void TIKI_ParseAnimationFlags( dloaddef_t *ld, dloadanim_t *anim );
void TIKI_ParseAnimationsFail( dloaddef_t *ld );
qboolean TIKI_ParseIncludes( dloaddef_t *ld );
void TIKI_ParseAnimations( dloaddef_t *ld );
int TIKI_ParseSurfaceFlag( const char *token );
void TIKI_InitSetup( dloaddef_t *ld );
const char *TIKI_FileExtension(const char *in);
void TIKI_ParseFrameCommands(dloaddef_t *ld, dloadframecmd_t **cmdlist, int maxcmds, int *numcmds);
void TIKI_ParseAnimationCommands(dloaddef_t *ld, dloadanim_t *anim);
void TIKI_ParseAnimationFlags(dloaddef_t *ld, dloadanim_t *anim);
void TIKI_ParseAnimationsFail(dloaddef_t *ld);
qboolean TIKI_ParseIncludes(dloaddef_t *ld);
void TIKI_ParseAnimations(dloaddef_t *ld);
int TIKI_ParseSurfaceFlag(const char *token);
void TIKI_InitSetup(dloaddef_t *ld);
#ifdef __cplusplus
qboolean TIKI_LoadSetupCaseHeader( dtiki_t *tiki, const char *filename, dloadsurface_t *loadsurfaces, int *numSurfacesSetUp, msg_t *msg, qboolean skip, con_map<str, str> *keyValues );
qboolean TIKI_LoadSetupCase( dtiki_t *tiki, const char *filename, dloadsurface_t *loadsurfaces, int *numSurfacesSetUp, msg_t *msg, qboolean skip, con_map<str, str> *keyValues );
qboolean TIKI_LoadSetup( dtiki_t *tiki, const char *filename, dloadsurface_t *loadsurfaces, int *numSurfacesSetUp, byte *modelData, size_t modelDataSize, con_map<str, str> *keyValues );
bool TIKI_strstr( const char *s, const char *substring );
qboolean TIKI_LoadSetupCaseHeader(
dtiki_t *tiki,
const char *filename,
dloadsurface_t *loadsurfaces,
int *numSurfacesSetUp,
msg_t *msg,
qboolean skip,
con_map<str, str> *keyValues
);
qboolean TIKI_LoadSetupCase(
dtiki_t *tiki,
const char *filename,
dloadsurface_t *loadsurfaces,
int *numSurfacesSetUp,
msg_t *msg,
qboolean skip,
con_map<str, str> *keyValues
);
qboolean TIKI_LoadSetup(
dtiki_t *tiki,
const char *filename,
dloadsurface_t *loadsurfaces,
int *numSurfacesSetUp,
byte *modelData,
size_t modelDataSize,
con_map<str, str> *keyValues
);
bool TIKI_strstr(const char *s, const char *substring);
#endif
qboolean TIKI_ParseSetup( dloaddef_t *ld );
void TIKI_ParseInitCommands( dloaddef_t *ld, dloadinitcmd_t **cmdlist, int maxcmds, int *numcmds );
void TIKI_ParseInit( dloaddef_t *ld );
qboolean TIKI_ParseCase( dloaddef_t *ld );
qboolean TIKI_ParseSetup(dloaddef_t *ld);
void TIKI_ParseInitCommands(dloaddef_t *ld, dloadinitcmd_t **cmdlist, int maxcmds, int *numcmds);
void TIKI_ParseInit(dloaddef_t *ld);
qboolean TIKI_ParseCase(dloaddef_t *ld);
#ifdef __cplusplus
}
#endif
#endif // TIKI_PARSE_H

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -25,273 +25,274 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#pragma once
#ifdef __cplusplus
#include "../skeletor/skeletor_name_lists.h"
# include "../skeletor/skeletor_name_lists.h"
#endif
#include "../skeletor/skeletor_model_file_format.h"
// animation flags
#define TAF_RANDOM 0x1 // random
#define TAF_NOREPEAT 0x2 // no loop
#define TAF_DONTREPEAT ( TAF_RANDOM | TAF_NOREPEAT ) // don't repeat
#define TAF_DEFAULT_ANGLES 0x8 // ?
#define TAF_NOTIMECHECK 0x10 // don't check for timing
#define TAF_DELTADRIVEN 0x20 // animation is based on skeletor animation's delta
#define TAF_AUTOSTEPS 0x400 // footsteps for dogs
#define TAF_AUTOSTEPS_RUNNING 0x800 // footsteps for dogs
#define TAF_AUTOSTEPS_EQUIPMENT 0x1000
#define TAF_RANDOM 0x1 // random
#define TAF_NOREPEAT 0x2 // no loop
#define TAF_DONTREPEAT (TAF_RANDOM | TAF_NOREPEAT) // don't repeat
#define TAF_DEFAULT_ANGLES 0x8 // ?
#define TAF_NOTIMECHECK 0x10 // don't check for timing
#define TAF_DELTADRIVEN 0x20 // animation is based on skeletor animation's delta
#define TAF_AUTOSTEPS 0x400 // footsteps for dogs
#define TAF_AUTOSTEPS_RUNNING 0x800 // footsteps for dogs
#define TAF_AUTOSTEPS_EQUIPMENT 0x1000
// skeletor animation flags
#define TAF_HASDELTA 0x40
#define TAF_HASMORPH 0x80
#define TAF_HASUPPER 0x100
#define TAF_HASDELTA 0x40
#define TAF_HASMORPH 0x80
#define TAF_HASUPPER 0x100
// tiki anim command frames
#define TIKI_FRAME_LAST -5 // exec at last
#define TIKI_FRAME_END -4 // exec at end
#define TIKI_FRAME_ENTRY -3 // exec at entry
#define TIKI_FRAME_EXIT -2 // exec at exit
#define TIKI_FRAME_EVERY -1 // exec each frame
#define TIKI_FRAME_FIRST 0 // exec at first frame
#define TIKI_FRAME_MAXFRAMERATE 60
#define TIKI_FRAME_LAST -5 // exec at last
#define TIKI_FRAME_END -4 // exec at end
#define TIKI_FRAME_ENTRY -3 // exec at entry
#define TIKI_FRAME_EXIT -2 // exec at exit
#define TIKI_FRAME_EVERY -1 // exec each frame
#define TIKI_FRAME_FIRST 0 // exec at first frame
#define TIKI_FRAME_MAXFRAMERATE 60
// skb skeletor
#define TIKI_SKB_HEADER_IDENT ( *( int * )"SKL " )
#define TIKI_SKB_HEADER_VER_3 3
#define TIKI_SKB_HEADER_VERSION 4
#define TIKI_SKB_HEADER_IDENT (*(int *)"SKL ")
#define TIKI_SKB_HEADER_VER_3 3
#define TIKI_SKB_HEADER_VERSION 4
// skd skeletor
#define TIKI_SKD_HEADER_IDENT ( *( int * )"SKMD" )
#define TIKI_SKD_HEADER_OLD_VERSION 5
#define TIKI_SKD_HEADER_VERSION 6
#define TIKI_SKD_HEADER_IDENT (*(int *)"SKMD")
#define TIKI_SKD_HEADER_OLD_VERSION 5
#define TIKI_SKD_HEADER_VERSION 6
// skc skeletor animations
#define TIKI_SKC_HEADER_IDENT ( *( int * )"SKAN" )
#define TIKI_SKC_HEADER_OLD_VERSION 13
#define TIKI_SKC_HEADER_VERSION 14
#define TIKI_SKC_HEADER_IDENT (*(int *)"SKAN")
#define TIKI_SKC_HEADER_OLD_VERSION 13
#define TIKI_SKC_HEADER_VERSION 14
// tiki limitations
#define TIKI_MAX_BONES 100
#define TIKI_MAX_VERTEXES 1000
#define TIKI_MAX_TRIANGLES 2000
#define TIKI_MAX_SKELCACHE 1024
#define TIKI_MAX_COMMANDS 128
#define TIKI_MAX_BONES 100
#define TIKI_MAX_VERTEXES 1000
#define TIKI_MAX_TRIANGLES 2000
#define TIKI_MAX_SKELCACHE 1024
#define TIKI_MAX_COMMANDS 128
// tiki surface flags
#define TIKI_SURF_SKIN1 ( 1 << 0 )
#define TIKI_SURF_SKIN2 ( 1 << 1 )
#define TIKI_SURF_SKIN3 ( TIKI_SURF_SKIN1 | TIKI_SURF_SKIN2 )
#define TIKI_SURF_NODRAW ( 1 << 2 )
#define TIKI_SURF_CROSSFADE ( 1 << 6 )
#define TIKI_SURF_NODAMAGE ( 1 << 7 )
#define TIKI_SURF_NOMIPMAPS ( 1 << 8 )
#define TIKI_SURF_NOPICMIP ( 1 << 9 )
#define TIKI_SURF_SKIN1 (1 << 0)
#define TIKI_SURF_SKIN2 (1 << 1)
#define TIKI_SURF_SKIN3 (TIKI_SURF_SKIN1 | TIKI_SURF_SKIN2)
#define TIKI_SURF_NODRAW (1 << 2)
#define TIKI_SURF_CROSSFADE (1 << 6)
#define TIKI_SURF_NODAMAGE (1 << 7)
#define TIKI_SURF_NOMIPMAPS (1 << 8)
#define TIKI_SURF_NOPICMIP (1 << 9)
#define MAX_SKELMODELS 12
#define MAX_TIKI_SHADER 4
#define MAX_SKELMODELS 12
#define MAX_TIKI_SHADER 4
typedef struct AliasList_s AliasList_t;
typedef struct AliasList_s AliasList_t;
typedef struct AliasListNode_s AliasListNode_t;
typedef struct tiki_singlecmd_s {
int num_args;
char **args;
int num_args;
char **args;
} tiki_singlecmd_t;
typedef struct tiki_cmd_s {
int num_cmds;
tiki_singlecmd_t cmds[ TIKI_MAX_COMMANDS ];
int num_cmds;
tiki_singlecmd_t cmds[TIKI_MAX_COMMANDS];
} tiki_cmd_t;
#ifdef __cplusplus
typedef class skelChannelList_s {
typedef class skelChannelList_s
{
public:
short int m_numChannels;
short int m_numChannels;
private:
short int m_numLocalFromGlobal;
short int *m_chanLocalFromGlobal;
short int m_numLocalFromGlobal;
short int *m_chanLocalFromGlobal;
public:
short int m_chanGlobalFromLocal[ 200 ];
short int m_chanGlobalFromLocal[200];
int NumChannels( void ) const;
void ZeroChannels( void );
void PackChannels( void );
void InitChannels( void );
void CleanUpChannels();
int GlobalChannel( int localchannel ) const;
int LocalChannel( int channel ) const;
int GetLocalFromGlobal( int globalChannel ) const;
void SetLocalFromGlobal( int channel, int localchannel );
qboolean HasChannel( ChannelNameTable *nameTable, const char *channelName ) const;
qboolean HasChannel( int channel ) const;
int AddChannel( int newGlobalChannelNum );
const char *ChannelName( ChannelNameTable *nameTable, int localChannelNum ) const;
int NumChannels(void) const;
void ZeroChannels(void);
void PackChannels(void);
void InitChannels(void);
void CleanUpChannels();
int GlobalChannel(int localchannel) const;
int LocalChannel(int channel) const;
int GetLocalFromGlobal(int globalChannel) const;
void SetLocalFromGlobal(int channel, int localchannel);
qboolean HasChannel(ChannelNameTable *nameTable, const char *channelName) const;
qboolean HasChannel(int channel) const;
int AddChannel(int newGlobalChannelNum);
const char *ChannelName(ChannelNameTable *nameTable, int localChannelNum) const;
} skelChannelList_c;
#else
typedef struct skelChannelList_s {
short int m_numChannels;
short int m_numLocalFromGlobal;
short int *m_chanLocalFromGlobal;
short int m_chanGlobalFromLocal[ 200 ];
short int m_numChannels;
short int m_numLocalFromGlobal;
short int *m_chanLocalFromGlobal;
short int m_chanGlobalFromLocal[200];
} skelChannelList_c;
#endif
typedef struct dtikianim_s {
char *name;
int num_anims;
void *alias_list;
int num_client_initcmds;
struct dtikicmd_s *client_initcmds;
int num_server_initcmds;
struct dtikicmd_s *server_initcmds;
byte *modelData;
size_t modelDataSize;
float mins[ 3 ];
float maxs[ 3 ];
short int *m_aliases;
char *headmodels;
char *headskins;
qboolean bIsCharacter;
struct dtikianimdef_s *animdefs[ 1 ];
char *name;
int num_anims;
void *alias_list;
int num_client_initcmds;
struct dtikicmd_s *client_initcmds;
int num_server_initcmds;
struct dtikicmd_s *server_initcmds;
byte *modelData;
size_t modelDataSize;
float mins[3];
float maxs[3];
short int *m_aliases;
char *headmodels;
char *headskins;
qboolean bIsCharacter;
struct dtikianimdef_s *animdefs[1];
} dtikianim_t;
typedef struct dtiki_s {
char *name;
dtikianim_t *a;
void *skeletor;
int num_surfaces;
struct dtikisurface_s *surfaces;
float load_scale;
float lod_scale;
float lod_bias;
float light_offset[ 3 ];
float load_origin[ 3 ];
float radius;
skelChannelList_c m_boneList;
int numMeshes;
short int mesh[ 1 ];
char *name;
dtikianim_t *a;
void *skeletor;
int num_surfaces;
struct dtikisurface_s *surfaces;
float load_scale;
float lod_scale;
float lod_bias;
float light_offset[3];
float load_origin[3];
float radius;
skelChannelList_c m_boneList;
int numMeshes;
short int mesh[1];
#ifdef __cplusplus
int GetBoneNumFromName( const char *name );
const char *GetBoneNameFromNum( int num ) const;
int GetBoneNumFromName(const char *name);
const char *GetBoneNameFromNum(int num) const;
#endif
} dtiki_t;
typedef struct {
int ident;
int version;
char name[ 64 ];
int numSurfaces;
int numBones;
int ofsBones;
int ofsSurfaces;
int ofsEnd;
int lodIndex[ 10 ];
int numBoxes;
int ofsBoxes;
int numMorphTargets;
int ofsMorphTargets;
int ident;
int version;
char name[64];
int numSurfaces;
int numBones;
int ofsBones;
int ofsSurfaces;
int ofsEnd;
int lodIndex[10];
int numBoxes;
int ofsBoxes;
int numMorphTargets;
int ofsMorphTargets;
} skelHeader_t;
typedef struct {
short int parent;
short int boxIndex;
int flags;
char name[ 64 ];
short int parent;
short int boxIndex;
int flags;
char name[64];
} skelBoneName_t;
typedef struct {
int ident;
char name[ 64 ];
int numTriangles;
int numVerts;
int staticSurfProcessed;
int ofsTriangles;
int ofsVerts;
int ofsCollapse;
int ofsEnd;
int ofsCollapseIndex;
int ident;
char name[64];
int numTriangles;
int numVerts;
int staticSurfProcessed;
int ofsTriangles;
int ofsVerts;
int ofsCollapse;
int ofsEnd;
int ofsCollapseIndex;
} skelSurface_t;
typedef short int skelIndex_t;
typedef struct skelSurfaceGame_s {
int ident;
char name[ MAX_QPATH ];
int numTriangles;
int numVerts;
vec4_t *pStaticXyz;
vec4_t *pStaticNormal;
vec2_t ( *pStaticTexCoords )[ 2 ];
skelIndex_t *pTriangles;
struct skeletorVertex_s *pVerts;
skelIndex_t *pCollapse;
struct skelSurfaceGame_s *pNext;
skelIndex_t *pCollapseIndex;
typedef struct skelSurfaceGame_s {
int ident;
char name[MAX_QPATH];
int numTriangles;
int numVerts;
vec4_t *pStaticXyz;
vec4_t *pStaticNormal;
vec2_t (*pStaticTexCoords)[2];
skelIndex_t *pTriangles;
struct skeletorVertex_s *pVerts;
skelIndex_t *pCollapse;
struct skelSurfaceGame_s *pNext;
skelIndex_t *pCollapseIndex;
#ifdef __cplusplus
skelSurfaceGame_s();
skelSurfaceGame_s();
#endif
} skelSurfaceGame_t;
typedef struct skelHeaderGame_s {
int version;
char name[ 64 ];
int numSurfaces;
int numBones;
struct boneData_s *pBones;
skelSurfaceGame_t *pSurfaces;
int lodIndex[ 10 ];
int numBoxes;
struct skelHitBox_s *pBoxes;
struct lodControl_s *pLOD;
int numMorphTargets;
char *pMorphTargets;
int version;
char name[64];
int numSurfaces;
int numBones;
struct boneData_s *pBones;
skelSurfaceGame_t *pSurfaces;
int lodIndex[10];
int numBoxes;
struct skelHitBox_s *pBoxes;
struct lodControl_s *pLOD;
int numMorphTargets;
char *pMorphTargets;
} skelHeaderGame_t;
typedef struct boneData_s {
short int channel;
boneType_t boneType;
short int parent;
short int numChannels;
short int numRefs;
short int channelIndex[ 2 ];
short int refIndex[ 2 ];
vec3_t offset;
float length;
float weight;
float bendRatio;
float bendMax;
float spinRatio;
short int channel;
boneType_t boneType;
short int parent;
short int numChannels;
short int numRefs;
short int channelIndex[2];
short int refIndex[2];
vec3_t offset;
float length;
float weight;
float bendRatio;
float bendMax;
float spinRatio;
} boneData_t;
typedef struct tikiSurface_s {
int ident;
char name[ 64 ];
int numFrames;
int numVerts;
int minLod;
int numTriangles;
int ofsTriangles;
int ofsCollapseMap;
int ofsSt;
int ofsXyzNormals;
int ofsEnd;
int ident;
char name[64];
int numFrames;
int numVerts;
int minLod;
int numTriangles;
int ofsTriangles;
int ofsCollapseMap;
int ofsSt;
int ofsXyzNormals;
int ofsEnd;
} tikiSurface_t;
typedef struct dtikisurface_s {
char name[ MAX_QPATH ];
char shader[ MAX_TIKI_SHADER ][ MAX_QPATH ];
int hShader[ MAX_TIKI_SHADER ];
int numskins;
int flags;
float damage_multiplier;
char name[MAX_QPATH];
char shader[MAX_TIKI_SHADER][MAX_QPATH];
int hShader[MAX_TIKI_SHADER];
int numskins;
int flags;
float damage_multiplier;
} dtikisurface_t;
/*typedef struct tikiFrame_s {
@ -304,113 +305,113 @@ typedef struct dtikisurface_s {
} tikiFrame_t;*/
typedef struct tiki_tess_data_s {
int ident;
tikiSurface_t *newsurface;
tikiSurface_t *oldsurface;
int ident;
tikiSurface_t *newsurface;
tikiSurface_t *oldsurface;
} tiki_tess_data_t;
typedef struct skelWeight_s {
int boneIndex;
float boneWeight;
vec3_t offset;
int boneIndex;
float boneWeight;
vec3_t offset;
} skelWeight_t;
typedef struct skelVertex_s {
vec3_t normal;
vec2_t texCoords;
int numWeights;
skelWeight_t weights[ 1 ];
vec3_t normal;
vec2_t texCoords;
int numWeights;
skelWeight_t weights[1];
} skelVertex_t;
typedef struct skeletorVertex_s {
vec3_t normal;
vec2_t texCoords;
int numWeights;
int numMorphs;
vec3_t normal;
vec2_t texCoords;
int numWeights;
int numMorphs;
} skeletorVertex_t;
typedef struct skeletorVertexGame_s {
vec3_t normal;
vec2_t texCoords;
int numWeights;
int numMorphs;
vec3_t normal;
vec2_t texCoords;
int numWeights;
int numMorphs;
} skeletorVertexGame_t;
typedef struct staticSurface_s {
int ident;
int ofsStaticData;
skelSurfaceGame_t *surface;
int meshNum;
int ident;
int ofsStaticData;
skelSurfaceGame_t *surface;
int meshNum;
} staticSurface_t;
typedef struct {
int morphIndex;
vec3_t offset;
int morphIndex;
vec3_t offset;
} skeletorMorph_t;
typedef struct dtikianimdef_s {
char alias[ 48 ];
float weight;
float blendtime;
int flags;
int num_client_cmds;
struct dtikicmd_s *client_cmds;
int num_server_cmds;
struct dtikicmd_s *server_cmds;
char alias[48];
float weight;
float blendtime;
int flags;
int num_client_cmds;
struct dtikicmd_s *client_cmds;
int num_server_cmds;
struct dtikicmd_s *server_cmds;
} dtikianimdef_t;
typedef struct {
short int shortQuat[ 4 ];
short int shortOffset[ 3 ];
short int pad;
short int shortQuat[4];
short int shortOffset[3];
short int pad;
} skelBone_t;
typedef struct {
float bounds[ 2 ][ 3 ];
float radius;
float delta[ 3 ];
skelBone_t bones[ 1 ];
float bounds[2][3];
float radius;
float delta[3];
skelBone_t bones[1];
} skelFrame_t;
typedef struct {
int ident;
int version;
char name[ 64 ];
int type;
int numFrames;
int numbones;
float totaltime;
float frametime;
float totaldelta[ 3 ];
int ofsFrames;
int ident;
int version;
char name[64];
int type;
int numFrames;
int numbones;
float totaltime;
float frametime;
float totaldelta[3];
int ofsFrames;
} skelAnimHeader_t;
typedef struct {
float offset[ 4 ];
float matrix[ 3 ][ 4 ];
float offset[4];
float matrix[3][4];
} skelBoneCache_t;
typedef struct {
float pos;
float val;
float pos;
float val;
} lodCurvePoint_t;
typedef struct {
float base;
float scale;
float cutoff;
float base;
float scale;
float cutoff;
} lodCurvePointConstants_t;
typedef struct lodControl_s {
float minMetric;
float maxMetric;
lodCurvePoint_t curve[ 5 ];
lodCurvePointConstants_t consts[ 4 ];
float minMetric;
float maxMetric;
lodCurvePoint_t curve[5];
lodCurvePointConstants_t consts[4];
} lodControl_t;
typedef struct {
char path[ 96 ];
skelHeaderGame_t *skel;
size_t size;
int numuses;
char path[96];
skelHeaderGame_t *skel;
size_t size;
int numuses;
} skelcache_t;

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -22,30 +22,27 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
// tiki_skel.h : TIKI Skeletor
#ifndef __TIKI_SKEL_H__
#define __TIKI_SKEL_H__
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
void TIKI_CacheFileSkel( skelHeader_t *pHeader, skelcache_t *cache, int length );
void TIKI_CalcLodConsts( lodControl_t *LOD );
qboolean TIKI_LoadSKB( const char *path, skelcache_t *cache );
qboolean TIKI_LoadSKD( const char *path, skelcache_t *cache );
skelHeaderGame_t *TIKI_GetSkel( int index );
int TIKI_GetSkelCache( skelHeaderGame_t *pSkel );
void TIKI_FreeSkel( int index );
void TIKI_FreeSkelCache( skelcache_t *cache );
skelcache_t *TIKI_FindSkel( const char *path );
skelcache_t *TIKI_FindFreeSkel( void );
int TIKI_RegisterSkel( const char *path, dtiki_t *tiki );
void TIKI_CacheFileSkel(skelHeader_t *pHeader, skelcache_t *cache, int length);
void TIKI_CalcLodConsts(lodControl_t *LOD);
qboolean TIKI_LoadSKB(const char *path, skelcache_t *cache);
qboolean TIKI_LoadSKD(const char *path, skelcache_t *cache);
skelHeaderGame_t *TIKI_GetSkel(int index);
int TIKI_GetSkelCache(skelHeaderGame_t *pSkel);
void TIKI_FreeSkel(int index);
void TIKI_FreeSkelCache(skelcache_t *cache);
skelcache_t *TIKI_FindSkel(const char *path);
skelcache_t *TIKI_FindFreeSkel(void);
int TIKI_RegisterSkel(const char *path, dtiki_t *tiki);
void SaveLODFile( const char *path, lodControl_t *LOD );
void GetLODFile( skelcache_t *cache );
void SaveLODFile(const char *path, lodControl_t *LOD);
void GetLODFile(skelcache_t *cache);
#ifdef __cplusplus
}
#endif
#endif // __TIKI_SKEL_H__

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -31,20 +31,20 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
TIKI_Surface_NameToNum
===============
*/
int TIKI_Surface_NameToNum( dtiki_t *pmdl, const char *name )
int TIKI_Surface_NameToNum(dtiki_t *pmdl, const char *name)
{
int i;
dtikisurface_t *psurface;
int i;
dtikisurface_t *psurface;
for( i = 0; i < pmdl->num_surfaces; i++ )
{
psurface = &pmdl->surfaces[ i ];
for (i = 0; i < pmdl->num_surfaces; i++) {
psurface = &pmdl->surfaces[i];
if( !stricmp( psurface->name, name ) )
return i;
}
if (!stricmp(psurface->name, name)) {
return i;
}
}
return -1;
return -1;
}
/*
@ -52,14 +52,13 @@ int TIKI_Surface_NameToNum( dtiki_t *pmdl, const char *name )
TIKI_Surface_NumToName
===============
*/
const char *TIKI_Surface_NumToName( dtiki_t *pmdl, int num )
const char *TIKI_Surface_NumToName(dtiki_t *pmdl, int num)
{
if( num < 0 || num >= pmdl->num_surfaces )
{
TIKI_Error( "TIKI_Surface_NumToName: Surface %d out of range for %s.\n", num, pmdl->a->name );
return NULL;
}
if (num < 0 || num >= pmdl->num_surfaces) {
TIKI_Error("TIKI_Surface_NumToName: Surface %d out of range for %s.\n", num, pmdl->a->name);
return NULL;
}
assert( pmdl->surfaces[ num ].name[ 0 ] );
return pmdl->surfaces[ num ].name;
assert(pmdl->surfaces[num].name[0]);
return pmdl->surfaces[num].name;
}

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -22,18 +22,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
// tiki_surface.h : TIKI Surface
#ifndef __TIKI_SURFACE_H__
#define __TIKI_SURFACE_H__
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
int TIKI_Surface_NameToNum( dtiki_t *pmdl, const char *name );
const char *TIKI_Surface_NumToName( dtiki_t *pmdl, int num );
int TIKI_Surface_NameToNum(dtiki_t *pmdl, const char *name);
const char *TIKI_Surface_NumToName(dtiki_t *pmdl, int num);
#ifdef __cplusplus
}
#endif
#endif // __TIKI_IMPORTS_H__

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -33,9 +33,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
TIKI_Tag_NameToNum
===============
*/
int TIKI_Tag_NameToNum(dtiki_t* pmdl, const char* name)
int TIKI_Tag_NameToNum(dtiki_t *pmdl, const char *name)
{
return pmdl->GetBoneNumFromName(name);
return pmdl->GetBoneNumFromName(name);
}
/*
@ -43,9 +43,9 @@ int TIKI_Tag_NameToNum(dtiki_t* pmdl, const char* name)
TIKI_Tag_NumToName
===============
*/
const char* TIKI_Tag_NumToName(dtiki_t* pmdl, int iTagNum)
const char *TIKI_Tag_NumToName(dtiki_t *pmdl, int iTagNum)
{
return pmdl->GetBoneNameFromNum(iTagNum);
return pmdl->GetBoneNameFromNum(iTagNum);
}
/*
@ -53,16 +53,16 @@ const char* TIKI_Tag_NumToName(dtiki_t* pmdl, int iTagNum)
TIKI_TransformInternal
===============
*/
SkelMat4* TIKI_TransformInternal(dtiki_t* tiki, int entnum, int tagnum)
SkelMat4 *TIKI_TransformInternal(dtiki_t *tiki, int entnum, int tagnum)
{
skeletor_c* skeletor;
skeletor_c *skeletor;
if (tagnum < 0 || !tiki || tagnum >= tiki->m_boneList.NumChannels()) {
return NULL;
}
skeletor = (skeletor_c*)TIKI_GetSkeletor(tiki, entnum);
return &skeletor->GetBoneFrame(tagnum);
skeletor = (skeletor_c *)TIKI_GetSkeletor(tiki, entnum);
return &skeletor->GetBoneFrame(tagnum);
}
/*
@ -70,16 +70,16 @@ SkelMat4* TIKI_TransformInternal(dtiki_t* tiki, int entnum, int tagnum)
TIKI_IsOnGroundInternal
===============
*/
qboolean TIKI_IsOnGroundInternal(dtiki_t* tiki, int entnum, int tagnum, float threshold)
qboolean TIKI_IsOnGroundInternal(dtiki_t *tiki, int entnum, int tagnum, float threshold)
{
skeletor_c* skeletor;
skeletor_c *skeletor;
if (tagnum < 0 || !tiki || tagnum >= tiki->m_boneList.NumChannels()) {
return qfalse;
return qfalse;
}
skeletor = (skeletor_c*)TIKI_GetSkeletor(tiki, entnum);
return skeletor->IsBoneOnGround(tagnum, threshold);
skeletor = (skeletor_c *)TIKI_GetSkeletor(tiki, entnum);
return skeletor->IsBoneOnGround(tagnum, threshold);
}
/*
@ -87,22 +87,22 @@ qboolean TIKI_IsOnGroundInternal(dtiki_t* tiki, int entnum, int tagnum, float th
TIKI_OrientationInternal
===============
*/
orientation_t TIKI_OrientationInternal(dtiki_t* tiki, int entnum, int tagnum, float scale)
orientation_t TIKI_OrientationInternal(dtiki_t *tiki, int entnum, int tagnum, float scale)
{
if (tagnum < 0 || !tiki || tagnum >= tiki->m_boneList.NumChannels()) {
return orientation_t{};
}
if (tagnum < 0 || !tiki || tagnum >= tiki->m_boneList.NumChannels()) {
return orientation_t {};
}
const skeletor_c* skeletor = (skeletor_c*)TIKI_GetSkeletor(tiki, entnum);
const SkelMat4& pTransform = skeletor->GetBoneFrame(tagnum);
const skeletor_c *skeletor = (skeletor_c *)TIKI_GetSkeletor(tiki, entnum);
const SkelMat4 & pTransform = skeletor->GetBoneFrame(tagnum);
orientation_t orient;
orient.origin[0] = (pTransform.val[3][0] + tiki->load_origin[0]) * (scale * tiki->load_scale);
orient.origin[1] = (pTransform.val[3][1] + tiki->load_origin[1]) * (scale * tiki->load_scale);
orient.origin[2] = (pTransform.val[3][2] + tiki->load_origin[2]) * (scale * tiki->load_scale);
memcpy(orient.axis, pTransform.val, sizeof(orient.axis));
orientation_t orient;
orient.origin[0] = (pTransform.val[3][0] + tiki->load_origin[0]) * (scale * tiki->load_scale);
orient.origin[1] = (pTransform.val[3][1] + tiki->load_origin[1]) * (scale * tiki->load_scale);
orient.origin[2] = (pTransform.val[3][2] + tiki->load_origin[2]) * (scale * tiki->load_scale);
memcpy(orient.axis, pTransform.val, sizeof(orient.axis));
return orient;
return orient;
}
/*
@ -110,10 +110,12 @@ orientation_t TIKI_OrientationInternal(dtiki_t* tiki, int entnum, int tagnum, fl
TIKI_SetPoseInternal
===============
*/
void TIKI_SetPoseInternal(void* skeletor, const frameInfo_t* frameInfo, const int* bone_tag, const vec4_t* bone_quat, float actionWeight)
void TIKI_SetPoseInternal(
void *skeletor, const frameInfo_t *frameInfo, const int *bone_tag, const vec4_t *bone_quat, float actionWeight
)
{
skeletor_c* skel = (skeletor_c*)skeletor;
skel->SetPose(frameInfo, bone_tag, bone_quat, actionWeight);
skeletor_c *skel = (skeletor_c *)skeletor;
skel->SetPose(frameInfo, bone_tag, bone_quat, actionWeight);
}
/*
@ -121,10 +123,10 @@ void TIKI_SetPoseInternal(void* skeletor, const frameInfo_t* frameInfo, const in
TIKI_GetRadiusInternal
===============
*/
float TIKI_GetRadiusInternal(dtiki_t* tiki, int entnum, float scale)
float TIKI_GetRadiusInternal(dtiki_t *tiki, int entnum, float scale)
{
skeletor_c* skeletor = (skeletor_c*)TIKI_GetSkeletor(tiki, entnum);
return skeletor->GetRadius() * tiki->load_scale * scale;
skeletor_c *skeletor = (skeletor_c *)TIKI_GetSkeletor(tiki, entnum);
return skeletor->GetRadius() * tiki->load_scale * scale;
}
/*
@ -132,10 +134,10 @@ float TIKI_GetRadiusInternal(dtiki_t* tiki, int entnum, float scale)
TIKI_GetCentroidRadiusInternal
===============
*/
float TIKI_GetCentroidRadiusInternal(dtiki_t* tiki, int entnum, float scale, float* centroid)
float TIKI_GetCentroidRadiusInternal(dtiki_t *tiki, int entnum, float scale, float *centroid)
{
skeletor_c* skeletor = (skeletor_c*)TIKI_GetSkeletor(tiki, entnum);
return skeletor->GetCentroidRadius(centroid) * tiki->load_scale * scale;
skeletor_c *skeletor = (skeletor_c *)TIKI_GetSkeletor(tiki, entnum);
return skeletor->GetCentroidRadius(centroid) * tiki->load_scale * scale;
}
/*
@ -143,10 +145,10 @@ float TIKI_GetCentroidRadiusInternal(dtiki_t* tiki, int entnum, float scale, flo
TIKI_GetFrameInternal
===============
*/
void TIKI_GetFrameInternal(dtiki_t* tiki, int entnum, skelAnimFrame_t* newFrame)
void TIKI_GetFrameInternal(dtiki_t *tiki, int entnum, skelAnimFrame_t *newFrame)
{
skeletor_c* skeletor = (skeletor_c*)TIKI_GetSkeletor(tiki, entnum);
skeletor->GetFrame(newFrame);
skeletor_c *skeletor = (skeletor_c *)TIKI_GetSkeletor(tiki, entnum);
skeletor->GetFrame(newFrame);
}
/*
@ -154,8 +156,8 @@ void TIKI_GetFrameInternal(dtiki_t* tiki, int entnum, skelAnimFrame_t* newFrame)
TIKI_SetEyeTargetPos
===============
*/
void TIKI_SetEyeTargetPos(dtiki_t* tiki, int entnum, vec3_t pos)
void TIKI_SetEyeTargetPos(dtiki_t *tiki, int entnum, vec3_t pos)
{
skeletor_c* skeletor = (skeletor_c*)TIKI_GetSkeletor(tiki, entnum);
skeletor->SetEyeTargetPos(pos);
skeletor_c *skeletor = (skeletor_c *)TIKI_GetSkeletor(tiki, entnum);
skeletor->SetEyeTargetPos(pos);
}

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -22,26 +22,25 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
// tiki_tag.h : TIKI Tag
#ifndef __TIKI_TAG_H__
#define __TIKI_TAG_H__
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
int TIKI_Tag_NameToNum( dtiki_t *pmdl, const char *name );
const char *TIKI_Tag_NumToName( dtiki_t *pmdl, int iTagNum );
SkelMat4 *TIKI_TransformInternal( dtiki_t *tiki, int entnum, int tagnum );
qboolean TIKI_IsOnGroundInternal( dtiki_t *tiki, int entnum, int tagnum, float threshold );
orientation_t TIKI_OrientationInternal( dtiki_t *tiki, int entnum, int tagnum, float scale );
void TIKI_SetPoseInternal( void *skeletor, const frameInfo_t *frameInfo, const int *bone_tag, const vec4_t *bone_quat, float actionWeight );
float TIKI_GetRadiusInternal( dtiki_t *tiki, int entnum, float scale );
float TIKI_GetCentroidRadiusInternal( dtiki_t *tiki, int entnum, float scale, float *centroid );
void TIKI_GetFrameInternal( dtiki_t *tiki, int entnum, skelAnimFrame_t *newFrame );
void TIKI_SetEyeTargetPos( dtiki_t *tiki, int entnum, vec3_t pos );
int TIKI_Tag_NameToNum(dtiki_t *pmdl, const char *name);
const char *TIKI_Tag_NumToName(dtiki_t *pmdl, int iTagNum);
SkelMat4 *TIKI_TransformInternal(dtiki_t *tiki, int entnum, int tagnum);
qboolean TIKI_IsOnGroundInternal(dtiki_t *tiki, int entnum, int tagnum, float threshold);
orientation_t TIKI_OrientationInternal(dtiki_t *tiki, int entnum, int tagnum, float scale);
void TIKI_SetPoseInternal(
void *skeletor, const frameInfo_t *frameInfo, const int *bone_tag, const vec4_t *bone_quat, float actionWeight
);
float TIKI_GetRadiusInternal(dtiki_t *tiki, int entnum, float scale);
float TIKI_GetCentroidRadiusInternal(dtiki_t *tiki, int entnum, float scale, float *centroid);
void TIKI_GetFrameInternal(dtiki_t *tiki, int entnum, skelAnimFrame_t *newFrame);
void TIKI_SetEyeTargetPos(dtiki_t *tiki, int entnum, vec3_t pos);
#ifdef __cplusplus
}
#endif
#endif // __TIKI_TAG_H__

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -32,16 +32,13 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
TIKI_Name
===============
*/
const char *TIKI_Name( dtiki_t *pmdl )
const char *TIKI_Name(dtiki_t *pmdl)
{
if( pmdl )
{
return pmdl->a->name;
}
else
{
return 0;
}
if (pmdl) {
return pmdl->a->name;
} else {
return 0;
}
}
/*
@ -49,16 +46,13 @@ const char *TIKI_Name( dtiki_t *pmdl )
TIKI_NumAnims
===============
*/
int TIKI_NumAnims( dtiki_t *pmdl )
int TIKI_NumAnims(dtiki_t *pmdl)
{
if( pmdl )
{
return pmdl->a->num_anims;
}
else
{
return 0;
}
if (pmdl) {
return pmdl->a->num_anims;
} else {
return 0;
}
}
/*
@ -66,16 +60,13 @@ int TIKI_NumAnims( dtiki_t *pmdl )
TIKI_NumSurfaces
===============
*/
int TIKI_NumSurfaces( dtiki_t *pmdl )
int TIKI_NumSurfaces(dtiki_t *pmdl)
{
if( pmdl )
{
return pmdl->num_surfaces;
}
else
{
return 0;
}
if (pmdl) {
return pmdl->num_surfaces;
} else {
return 0;
}
}
/*
@ -83,9 +74,9 @@ int TIKI_NumSurfaces( dtiki_t *pmdl )
TIKI_NumTags
===============
*/
int TIKI_NumTags( dtiki_t *pmdl )
int TIKI_NumTags(dtiki_t *pmdl)
{
return pmdl->m_boneList.NumChannels();
return pmdl->m_boneList.NumChannels();
}
/*
@ -93,15 +84,14 @@ int TIKI_NumTags( dtiki_t *pmdl )
TIKI_CalculateBounds
===============
*/
void TIKI_CalculateBounds( dtiki_t *pmdl, float scale, vec3_t mins, vec3_t maxs )
void TIKI_CalculateBounds(dtiki_t *pmdl, float scale, vec3_t mins, vec3_t maxs)
{
int j;
int j;
for( j = 0; j < 3; j++ )
{
mins[ j ] = pmdl->a->mins[ j ] * pmdl->load_scale * scale;
maxs[ j ] = pmdl->a->maxs[ j ] * pmdl->load_scale * scale;
}
for (j = 0; j < 3; j++) {
mins[j] = pmdl->a->mins[j] * pmdl->load_scale * scale;
maxs[j] = pmdl->a->maxs[j] * pmdl->load_scale * scale;
}
}
/*
@ -109,9 +99,9 @@ void TIKI_CalculateBounds( dtiki_t *pmdl, float scale, vec3_t mins, vec3_t maxs
TIKI_GlobalRadius
===============
*/
float TIKI_GlobalRadius( dtiki_t *pmdl )
float TIKI_GlobalRadius(dtiki_t *pmdl)
{
return pmdl->radius;
return pmdl->radius;
}
/*
@ -119,22 +109,21 @@ float TIKI_GlobalRadius( dtiki_t *pmdl )
TIKI_NumHeadModels
===============
*/
int TIKI_NumHeadModels( dtikianim_t *tiki )
int TIKI_NumHeadModels(dtikianim_t *tiki)
{
int numheadmodels = 0;
const char *s = tiki->headmodels;
int numheadmodels = 0;
const char *s = tiki->headmodels;
while( 1 )
{
s = strstr( s, "\n" );
if( !s ) {
break;
}
numheadmodels++;
s++;
}
while (1) {
s = strstr(s, "\n");
if (!s) {
break;
}
numheadmodels++;
s++;
}
return numheadmodels;
return numheadmodels;
}
/*
@ -142,38 +131,32 @@ int TIKI_NumHeadModels( dtikianim_t *tiki )
TIKI_GetHeadModel
===============
*/
void TIKI_GetHeadModel( dtikianim_t *tiki, int num, char *name )
void TIKI_GetHeadModel(dtikianim_t *tiki, int num, char *name)
{
const char *s, *t;
const char *s, *t;
if( tiki->headmodels == ( char * )1 )
{
*name = 0;
return;
}
if (tiki->headmodels == (char *)1) {
*name = 0;
return;
}
s = tiki->headmodels;
for( num = num - 1; num >= 0; num-- )
{
s = strstr( s, "\n" );
if( !s )
{
*name = 0;
return;
}
s++;
}
s = tiki->headmodels;
for (num = num - 1; num >= 0; num--) {
s = strstr(s, "\n");
if (!s) {
*name = 0;
return;
}
s++;
}
t = strstr( s, "\n" );
if( t )
{
strncpy( name, s, t - s );
name[ t - s ] = 0;
}
else
{
*name = 0;
}
t = strstr(s, "\n");
if (t) {
strncpy(name, s, t - s);
name[t - s] = 0;
} else {
*name = 0;
}
}
/*
@ -181,22 +164,21 @@ void TIKI_GetHeadModel( dtikianim_t *tiki, int num, char *name )
TIKI_NumHeadSkins
===============
*/
int TIKI_NumHeadSkins( dtikianim_t *tiki )
int TIKI_NumHeadSkins(dtikianim_t *tiki)
{
int numheadskins = 0;
const char *s = tiki->headskins;
int numheadskins = 0;
const char *s = tiki->headskins;
while( 1 )
{
s = strstr( s, "\n" );
if( !s ) {
break;
}
numheadskins++;
s++;
}
while (1) {
s = strstr(s, "\n");
if (!s) {
break;
}
numheadskins++;
s++;
}
return numheadskins;
return numheadskins;
}
/*
@ -204,36 +186,30 @@ int TIKI_NumHeadSkins( dtikianim_t *tiki )
TIKI_GetHeadSkin
===============
*/
void TIKI_GetHeadSkin( dtikianim_t *tiki, int num, char *name )
void TIKI_GetHeadSkin(dtikianim_t *tiki, int num, char *name)
{
const char *s, *t;
const char *s, *t;
if( tiki->headskins == ( char * )1 )
{
*name = 0;
return;
}
if (tiki->headskins == (char *)1) {
*name = 0;
return;
}
s = tiki->headskins;
for( num = num - 1; num >= 0; num-- )
{
s = strstr( s, "\n" );
if( !s )
{
*name = 0;
return;
}
s++;
}
s = tiki->headskins;
for (num = num - 1; num >= 0; num--) {
s = strstr(s, "\n");
if (!s) {
*name = 0;
return;
}
s++;
}
t = strstr( s, "\n" );
if( t )
{
strncpy( name, s, t - s );
name[ t - s ] = 0;
}
else
{
*name = 0;
}
t = strstr(s, "\n");
if (t) {
strncpy(name, s, t - s);
name[t - s] = 0;
} else {
*name = 0;
}
}

View file

@ -1,6 +1,6 @@
/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team
Copyright (C) 2023 the OpenMoHAA team
This file is part of OpenMoHAA source code.
@ -22,26 +22,23 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
// tiki_utility.h : TIKI Utility
#ifndef __TIKI_UTILITY_H__
#define __TIKI_UTILITY_H__
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
const char *TIKI_Name( dtiki_t *pmdl );
int TIKI_NumAnims( dtiki_t *pmdl );
int TIKI_NumSurfaces( dtiki_t *pmdl );
int TIKI_NumTags( dtiki_t *pmdl );
void TIKI_CalculateBounds( dtiki_t *pmdl, float scale, vec3_t mins, vec3_t maxs );
float TIKI_GlobalRadius( dtiki_t *pmdl );
int TIKI_NumHeadModels( dtikianim_t *tiki );
void TIKI_GetHeadModel( dtikianim_t *tiki, int num, char *name );
int TIKI_NumHeadSkins( dtikianim_t *tiki );
void TIKI_GetHeadSkin( dtikianim_t *tiki, int num, char *name );
const char *TIKI_Name(dtiki_t *pmdl);
int TIKI_NumAnims(dtiki_t *pmdl);
int TIKI_NumSurfaces(dtiki_t *pmdl);
int TIKI_NumTags(dtiki_t *pmdl);
void TIKI_CalculateBounds(dtiki_t *pmdl, float scale, vec3_t mins, vec3_t maxs);
float TIKI_GlobalRadius(dtiki_t *pmdl);
int TIKI_NumHeadModels(dtikianim_t *tiki);
void TIKI_GetHeadModel(dtikianim_t *tiki, int num, char *name);
int TIKI_NumHeadSkins(dtikianim_t *tiki);
void TIKI_GetHeadSkin(dtikianim_t *tiki, int num, char *name);
#ifdef __cplusplus
}
#endif
#endif // __TIKI_TIKI_H__