#include "ShotTracker.h" #include "stdio.h" #include "stdlib.h" #include "math.h" /* Generation of elliptic tag bmp files. */ //#pragma optimize( "", off ) #define TAG_BNM_Size 200 u32 SAVEBMP(MAP *RefMap,char *Filename); void SetCode(/*OUT*/ u32 *pCodeG_100,/*IN*/u32 CodeV); //#define CURRENT_TAG_VERION 12 s32 PolarToColor(float R,float A,u32 *Code) { if (R > (TAG_BNM_Size>>1) -2) { if ((s32)(A * 1024.0f / (2.0f * 3.1415926535897932384626433832795f))&8) return 0xffffffff; if (R > (TAG_BNM_Size>>1) -1) return 0xffffffff; return 0; } R *= 1.40f * 256.0f / (float)TAG_BNM_Size ; /* A *= 1.05f; if (A > (2.0f * 3.1415926535897932384626433832795f)) return 0xffffffff;*/ if (R < 128.0f) { if (R > 128.0f * SMALL_RADIUS) { if ((R > 128.0f * CMIN) && (R < 128.0f * CMAX)) { A *= (float)RAW_CODELENGHT / (2.0f * 3.1415926535897932384626433832795f); if (Code[(u32)A]) { R = (R - CMIN) / ((CMAX) - (CMIN)); return 0xFFFFFFFF; } else return 0; } return 0; } return 0xffffff; } else return 0xffffff; } void CreateTags() { FILE *F; char TEXT[2048]; sprintf(TEXT,".\\TAG\\TAG_VERSION.VER",0); F = fopen(TEXT,"rb"); if (F) { u32 Version; fread(&Version,1,4,F); fclose(F); if (CURRENT_TAG_VERION == Version) return; }//*/ F = fopen(TEXT,"wb"); if (F) { u32 Version = CURRENT_TAG_VERION; fwrite(&Version,1,4,F); fclose(F); }//*/ { MAP TAG; MAP TAGSAVE,TAGO2; float ASIN[8193]; for (int F = 0 ; F < 8193 ; F++) ASIN[F] = asin((float)F / 8192.0f); TAG.SX = TAG_BNM_Size<<2; TAG.SY = TAG_BNM_Size<<2; TAG.SetSize(TAG.SX, TAG.SY); TAG.staticBase = 1; for (s32 Code = 0 ; Code < (1<>1) + 0.5f; float Cfy = (float)CY - (float)(TAG.SY>>1) + 0.5f; float PolarD; float PolarAlpha; PolarD = sqrtf(Cfx * Cfx + Cfy * Cfy); if (Cfy < 0.0f) PolarAlpha = ASIN[(u32)(8192.0f *(-Cfy/PolarD))]; else PolarAlpha = ASIN[(u32)(8192.0f *(Cfy/PolarD))]; if (Cfx > 0.0f) PolarAlpha = 3.1415927f - PolarAlpha; if (Cfy < 0.0f) PolarAlpha = 2.0f * 3.1415927f - PolarAlpha; TAG.SetValue(CX + CY * TAG.PITCH, PolarToColor(PolarD/4.0f,PolarAlpha,CodeB)); } } sprintf(TEXT,".\\TAG\\TAG_%03d.BMP",Code); TAGO2 = TAGSAVE = TAG; TAGO2.SX >>= 1; TAGO2.SY >>= 1; COPY_O2_RGBA(&TAG,&TAGO2); TAG = TAGO2; TAGO2.SX >>= 1; TAGO2.SY >>= 1; COPY_O2_RGBA(&TAG,&TAGO2); TAG = TAGO2; SAVEBMP(&TAG,TEXT); TAG = TAGSAVE ; } TAG.staticBase = 0; } } void SHOTS_CLASS::Init() { CreateTags(); }