mirror of
https://github.com/Karaka-Management/cOMS.git
synced 2026-01-11 11:18:40 +00:00
update
This commit is contained in:
parent
acde815291
commit
acd45ec783
339
animation/Animation.h
Normal file
339
animation/Animation.h
Normal file
|
|
@ -0,0 +1,339 @@
|
|||
/**
|
||||
* Jingga
|
||||
*
|
||||
* @package Utils
|
||||
* @copyright Jingga
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
#ifndef TOS_ANIMATION_H
|
||||
#define TOS_ANIMATION_H
|
||||
|
||||
#include <math.h>
|
||||
#include "../utils/MathUtils.h"
|
||||
|
||||
#include "AnimationEaseType.h"
|
||||
|
||||
inline
|
||||
float lerp_approx(float a, float b, float t)
|
||||
{
|
||||
return a + t * (b - a);
|
||||
}
|
||||
|
||||
float anim_ease(float t, AnimationEaseType type) {
|
||||
switch(type) {
|
||||
case ANIMATION_EASE_IN_SINE: {
|
||||
return anim_ease_in_sine(t);
|
||||
};
|
||||
case ANIMATION_EASE_OUT_SINE: {
|
||||
return anim_ease_out_sine(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_OUT_SINE: {
|
||||
return anim_ease_in_out_sine(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_QUAD: {
|
||||
return anim_ease_in_quad(t);
|
||||
};
|
||||
case ANIMATION_EASE_OUT_QUAD: {
|
||||
return anim_ease_out_quad(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_OUT_QUAD: {
|
||||
return anim_ease_in_out_quad(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_CUBIC: {
|
||||
return anim_ease_in_cubic(t);
|
||||
};
|
||||
case ANIMATION_EASE_OUT_CUBIC: {
|
||||
return anim_ease_out_cubic(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_OUT_CUBIC: {
|
||||
return anim_ease_in_out_cubic(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_QUART: {
|
||||
return anim_ease_in_quart(t);
|
||||
};
|
||||
case ANIMATION_EASE_OUT_QUART: {
|
||||
return anim_ease_out_quart(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_OUT_QUART: {
|
||||
return anim_ease_in_out_quart(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_QUINT: {
|
||||
return anim_ease_in_quint(t);
|
||||
};
|
||||
case ANIMATION_EASE_OUT_QUINT: {
|
||||
return anim_ease_out_quint(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_OUT_QUINT: {
|
||||
return anim_ease_in_out_quint(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_EXPO: {
|
||||
return anim_ease_in_expo(t);
|
||||
};
|
||||
case ANIMATION_EASE_OUT_EXPO: {
|
||||
return anim_ease_out_expo(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_OUT_EXPO: {
|
||||
return anim_ease_in_out_expo(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_CIRC: {
|
||||
return anim_ease_in_circ(t);
|
||||
};
|
||||
case ANIMATION_EASE_OUT_CIRC: {
|
||||
return anim_ease_out_circ(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_OUT_CIRC: {
|
||||
return anim_ease_in_out_circ(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_BACK: {
|
||||
return anim_ease_in_back(t);
|
||||
};
|
||||
case ANIMATION_EASE_OUT_BACK: {
|
||||
return anim_ease_out_back(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_OUT_BACK: {
|
||||
return anim_ease_in_out_back(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_ELASTIC: {
|
||||
return anim_ease_in_elastic(t);
|
||||
};
|
||||
case ANIMATION_EASE_OUT_ELASTIC: {
|
||||
return anim_ease_out_elastic(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_OUT_ELASTIC: {
|
||||
return anim_ease_in_out_elastic(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_BOUNCE: {
|
||||
return anim_ease_in_bounce(t);
|
||||
};
|
||||
case ANIMATION_EASE_OUT_BOUNCE: {
|
||||
return anim_ease_out_bounce(t);
|
||||
};
|
||||
case ANIMATION_EASE_IN_OUT_BOUNCE: {
|
||||
return anim_ease_in_out_bounce(t);
|
||||
};
|
||||
default:
|
||||
return t;
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_linear(float t) {
|
||||
return t;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_sine(float t) {
|
||||
return 1 - cosf_approx((t * OMS_PI) / 2);
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_out_sine(float t) {
|
||||
return sinf_approx((t * OMS_PI) / 2);
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_out_sine(float t) {
|
||||
return -(cosf_approx(OMS_PI * t) - 1) / 2;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_quad(float t) {
|
||||
return t * t;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_out_quad(float t) {
|
||||
return 1 - (1 - t) * (1 - t);
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_out_quad(float t) {
|
||||
return t < 0.5
|
||||
? 2 * t * t
|
||||
: 1 - pow(-2 * t + 2, 2) / 2;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_cubic(float t) {
|
||||
return t * t * t;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_out_cubic(float t) {
|
||||
return 1 - pow(1 - t, 3);
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_out_cubic(float t) {
|
||||
return t < 0.5
|
||||
? 4 * t * t * t
|
||||
: 1 - pow(-2 * t + 2, 3) / 2;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_quart(float t) {
|
||||
return t * t * t * t;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_out_quart(float t) {
|
||||
return 1 - pow(1 - t, 4);
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_out_quart(float t) {
|
||||
return t < 0.5
|
||||
? 8 * t * t * t * t
|
||||
: 1 - pow(-2 * t + 2, 4) / 2;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_quint(float t) {
|
||||
return t * t * t * t * t;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_out_quint(float t) {
|
||||
return 1 - pow(1 - t, 5);
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_out_quint(float t) {
|
||||
return t < 0.5
|
||||
? 16 * t * t * t * t * t
|
||||
: 1 - pow(-2 * t + 2, 5) / 2;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_expo(float t) {
|
||||
return t == 0
|
||||
? 0 : pow(2, 10 * t - 10);
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_out_expo(float t) {
|
||||
return t == 1
|
||||
? 1
|
||||
: 1 - pow(2, -10 * t);
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_out_expo(float t) {
|
||||
if (t == 0 || t == 1) {
|
||||
return t;
|
||||
}
|
||||
|
||||
return t < 0.5
|
||||
? pow(2, 20 * t - 10) / 2
|
||||
: (2 - pow(2, -20 * t + 10)) / 2;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_circ(float t) {
|
||||
return 1 - sqrt(1 - pow(t, 2));
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_out_circ(float t) {
|
||||
return sqrt(1 - pow(t - 1, 2));
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_out_circ(float t) {
|
||||
return t < 0.5
|
||||
? (1 - sqrt(1 - pow(2 * t, 2))) / 2
|
||||
: (sqrt(1 - pow(-2 * t + 2, 2)) + 1) / 2;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_back(float t) {
|
||||
const float c1 = 1.70158;
|
||||
const float c3 = c1 + 1;
|
||||
|
||||
return c3 * t * t * t - c1 * t * t;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_out_back(float t) {
|
||||
const float c1 = 1.70158;
|
||||
const float c3 = c1 + 1;
|
||||
|
||||
return 1 + c3 * pow(t - 1, 3) + c1 * pow(t - 1, 2);
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_out_back(float t) {
|
||||
const float c1 = 1.70158;
|
||||
const float c2 = c1 * 1.525;
|
||||
|
||||
return t < 0.5
|
||||
? (pow(2 * t, 2) * ((c2 + 1) * 2 * t - c2)) / 2
|
||||
: (pow(2 * t - 2, 2) * ((c2 + 1) * (t * 2 - 2) + c2) + 2) / 2;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_elastic(float t) {
|
||||
const float c4 = (2 * OMS_PI) / 3;
|
||||
|
||||
if (t == 0 || t == 1) {
|
||||
return t;
|
||||
}
|
||||
|
||||
return -pow(2, 10 * t - 10) * sinf_approx((t * 10 - 10.75) * c4);
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_out_elastic(float t) {
|
||||
const float c4 = (2 * OMS_PI) / 3;
|
||||
|
||||
if (t == 0.0 || t == 1.0) {
|
||||
return t;
|
||||
}
|
||||
|
||||
return pow(2, -10 * t) * sinf_approx((t * 10 - 0.75) * c4) + 1;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_out_elastic(float t) {
|
||||
const float c5 = (2 * OMS_PI) / 4.5;
|
||||
|
||||
if (t == 0.0 || t == 1.0) {
|
||||
return t;
|
||||
} else if (t < 0.5) {
|
||||
return -(pow(2, 20 * t - 10) * sinf_approx((20 * t - 11.125) * c5)) / 2;
|
||||
}
|
||||
|
||||
return (pow(2, -20 * t + 10) * sinf_approx((20 * t - 11.125) * c5)) / 2 + 1;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_bounce(float t) {
|
||||
return 1 - anim_ease_out_bounce(1 - t);
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_out_bounce(float t) {
|
||||
const float n1 = 7.5625;
|
||||
const float d1 = 2.75;
|
||||
|
||||
if (t < 1 / d1) {
|
||||
return n1 * t * t;
|
||||
} else if (t < 2 / d1) {
|
||||
return n1 * (t -= 1.5 / d1) * t + 0.75;
|
||||
} else if (t < 2.5 / d1) {
|
||||
return n1 * (t -= 2.25 / d1) * t + 0.9375;
|
||||
}
|
||||
|
||||
return n1 * (t -= 2.625 / d1) * t + 0.984375;
|
||||
}
|
||||
|
||||
inline
|
||||
float anim_ease_in_out_bounce(float t) {
|
||||
return t < 0.5
|
||||
? (1 - anim_ease_out_bounce(1 - 2 * t)) / 2
|
||||
: (1 + anim_ease_out_bounce(2 * t - 1)) / 2;
|
||||
}
|
||||
|
||||
#endif
|
||||
47
animation/AnimationEaseType.h
Normal file
47
animation/AnimationEaseType.h
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
/**
|
||||
* Jingga
|
||||
*
|
||||
* @package Utils
|
||||
* @copyright Jingga
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
#ifndef TOS_ANIMATION_EASE_TYPE_H
|
||||
#define TOS_ANIMATION_EASE_TYPE_H
|
||||
|
||||
enum AnimationEaseType {
|
||||
ANIMATION_LINEAR,
|
||||
ANIMATION_EASE_IN_SINE,
|
||||
ANIMATION_EASE_OUT_SINE,
|
||||
ANIMATION_EASE_IN_OUT_SINE,
|
||||
ANIMATION_EASE_IN_QUAD,
|
||||
ANIMATION_EASE_OUT_QUAD,
|
||||
ANIMATION_EASE_IN_OUT_QUAD,
|
||||
ANIMATION_EASE_IN_CUBIC,
|
||||
ANIMATION_EASE_OUT_CUBIC,
|
||||
ANIMATION_EASE_IN_OUT_CUBIC,
|
||||
ANIMATION_EASE_IN_QUART,
|
||||
ANIMATION_EASE_OUT_QUART,
|
||||
ANIMATION_EASE_IN_OUT_QUART,
|
||||
ANIMATION_EASE_IN_QUINT,
|
||||
ANIMATION_EASE_OUT_QUINT,
|
||||
ANIMATION_EASE_IN_OUT_QUINT,
|
||||
ANIMATION_EASE_IN_EXPO,
|
||||
ANIMATION_EASE_OUT_EXPO,
|
||||
ANIMATION_EASE_IN_OUT_EXPO,
|
||||
ANIMATION_EASE_IN_CIRC,
|
||||
ANIMATION_EASE_OUT_CIRC,
|
||||
ANIMATION_EASE_IN_OUT_CIRC,
|
||||
ANIMATION_EASE_IN_BACK,
|
||||
ANIMATION_EASE_OUT_BACK,
|
||||
ANIMATION_EASE_IN_OUT_BACK,
|
||||
ANIMATION_EASE_IN_ELASTIC,
|
||||
ANIMATION_EASE_OUT_ELASTIC,
|
||||
ANIMATION_EASE_IN_OUT_ELASTIC,
|
||||
ANIMATION_EASE_IN_BOUNCE,
|
||||
ANIMATION_EASE_OUT_BOUNCE,
|
||||
ANIMATION_EASE_IN_OUT_BOUNCE
|
||||
};
|
||||
|
||||
#endif
|
||||
63
gpuapi/opengl/UIOpengl.h
Normal file
63
gpuapi/opengl/UIOpengl.h
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/**
|
||||
* Jingga
|
||||
*
|
||||
* @copyright Jingga
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
#ifndef TOS_GPUAPI_OPENGL_UI_H
|
||||
#define TOS_GPUAPI_OPENGL_UI_H
|
||||
|
||||
#include "../../stdlib/Types.h"
|
||||
#include "../../stdlib/Mathtypes.h"
|
||||
|
||||
#include "../../ui/UIButton.h"
|
||||
#include "../../ui/UIWindow.h"
|
||||
|
||||
#include "../../../EngineDependencies/opengl/glew/include/GL/glew.h"
|
||||
#include "../../../EngineDependencies/opengl/glfw/include/glfw3.h"
|
||||
|
||||
void render_button(UIButton* btn)
|
||||
{
|
||||
// Draw the background rectangle (button)
|
||||
glColor3f(btn->layout_default->color_background.r, btn->layout_default->color_background.g, btn->layout_default->color_background.b);
|
||||
glBegin(GL_QUADS);
|
||||
glVertex2f(btn->layout_default->x, btn->layout_default->y);
|
||||
glVertex2f(btn->layout_default->x + btn->layout_default->width, btn->layout_default->y);
|
||||
glVertex2f(btn->layout_default->x + btn->layout_default->width, btn->layout_default->y + btn->layout_default->height);
|
||||
glVertex2f(btn->layout_default->x, btn->layout_default->y + btn->layout_default->height);
|
||||
glEnd();
|
||||
|
||||
// Draw the border
|
||||
glColor3f(btn->layout_default->border_color.r, btn->layout_default->border_color.g, btn->layout_default->border_color.b);
|
||||
// Bottom border
|
||||
glLineWidth(btn->layout_default->border_width[0]);
|
||||
glBegin(GL_LINES);
|
||||
glVertex2f(btn->layout_default->x, btn->layout_default->y);
|
||||
glVertex2f(btn->layout_default->x + btn->layout_default->width, btn->layout_default->y);
|
||||
glEnd();
|
||||
|
||||
// Right border
|
||||
glLineWidth(btn->layout_default->border_width[1]);
|
||||
glBegin(GL_LINES);
|
||||
glVertex2f(btn->layout_default->x + btn->layout_default->width, btn->layout_default->y);
|
||||
glVertex2f(btn->layout_default->x + btn->layout_default->width, btn->layout_default->y + btn->layout_default->height);
|
||||
glEnd();
|
||||
|
||||
// Top border
|
||||
glLineWidth(btn->layout_default->border_width[2]);
|
||||
glBegin(GL_LINES);
|
||||
glVertex2f(btn->layout_default->x + btn->layout_default->width, btn->layout_default->y + btn->layout_default->height);
|
||||
glVertex2f(btn->layout_default->x, btn->layout_default->y + btn->layout_default->height);
|
||||
glEnd();
|
||||
|
||||
// Left border
|
||||
glLineWidth(btn->layout_default->border_width[3]);
|
||||
glBegin(GL_LINES);
|
||||
glVertex2f(btn->layout_default->x, btn->layout_default->y + btn->layout_default->height);
|
||||
glVertex2f(btn->layout_default->x, btn->layout_default->y);
|
||||
glEnd();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -357,4 +357,15 @@ void gpuapi_buffer_delete(GLuint buffer)
|
|||
glDeleteBuffers(1, &buffer);
|
||||
}
|
||||
|
||||
void render_9_patch(GLuint texture,
|
||||
int imgWidth, int imgHeight,
|
||||
int img_x1, int img_x2,
|
||||
int img_y1, int img_y2,
|
||||
int renderWidth, int renderHeight,
|
||||
int repeat
|
||||
)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
36
image/default_colors.h
Normal file
36
image/default_colors.h
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
/**
|
||||
* Jingga
|
||||
*
|
||||
* @copyright Jingga
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
#ifndef TOS_IMAGE_DEFAULT_COLORS_H
|
||||
#define TOS_IMAGE_DEFAULT_COLORS_H
|
||||
|
||||
#include "../stdlib/Types.h"
|
||||
|
||||
// @todo some of the cullors are bad
|
||||
// @todo basically all the dark colors could be made darker -> space out some of the very bright colors a little bit more (see 3rd - 5th column)
|
||||
|
||||
const int default_colors_256[256] = {
|
||||
0x123456, 0xFFFFFF, 0xF1EEED, 0xDCDEDE, 0xBFC1BF, 0xAEB0AD, 0x9E9D9E, 0x8E8F94, 0x717373, 0x5E5F61, 0x4D4D4C, 0x3F403A, 0x332C2A, 0x241E22, 0x0C1210, 0x000000,
|
||||
0xF6D3CF, 0xFABABC, 0xFBA699, 0xF19580, 0xFB837A, 0xFC615A, 0xFF4E4B, 0xFF4040, 0xF72128, 0xF60303, 0xE40000, 0xC70002, 0x900009, 0x630604, 0x4f0107, 0x2d0205,
|
||||
0xFDDDCE, 0xFCC5AC, 0xFFB9A4, 0xF6A378, 0xF49A80, 0xFF7D4F, 0xF8742C, 0xFE5A22, 0xF44A0B, 0xDA3A06, 0xC03500, 0x853004, 0x912600, 0x672300, 0x471608, 0x2b0d05,
|
||||
0xFCEBCF, 0xFCD8AA, 0xFFCD98, 0xFCC27F, 0xF3B267, 0xFDA660, 0xFD942D, 0xFF8001, 0xDF6E00, 0xCC6B00, 0xA85D00, 0xA55300, 0x734700, 0x612D08, 0x562600, 0x351700,
|
||||
0xFFF6C9, 0xFFECA8, 0xFDE884, 0xFADC6D, 0xF8DE6F, 0xFFCF43, 0xFFBD00, 0xEBB800, 0xC1A800, 0xBC8F09, 0x9B7A00, 0x8E6C08, 0x795F01, 0x5C4A00, 0x523B00, 0x392900,
|
||||
0xFFFFCD, 0xFDFEAF, 0xFCFBA1, 0xFDFF69, 0xF9FF2A, 0xFFFE04, 0xEFEE00, 0xE0DE00, 0xBDBF13, 0xB4AF00, 0x9F9900, 0x909002, 0x717300, 0x505400, 0x4A4F00, 0x343700,
|
||||
0xE4FFBD, 0xDFFEB9, 0xD1FF8F, 0xCAFC84, 0xC0F96B, 0xBAF353, 0x98FB00, 0x9AEE0F, 0x78CE00, 0x74C100, 0x61A401, 0x578A03, 0x4F7E02, 0x3C6200, 0x2E4F00, 0x203700,
|
||||
0xE1F8D8, 0xBBFEAD, 0xA2F592, 0xA1F79A, 0x81FF7A, 0x5DFF59, 0x48FF58, 0x00F600, 0x12D31F, 0x0ACB04, 0x10A40A, 0x089811, 0x06780E, 0x05640F, 0x005200, 0x003100,
|
||||
0xD5FFF8, 0xBCFFEA, 0xA7FED3, 0x99F2C4, 0x6CFFB5, 0x53F29E, 0x4CFEA1, 0x0AF779, 0x0CD56A, 0x0BC868, 0x01AA50, 0x07A557, 0x008642, 0x075A30, 0x00562C, 0x00331a,
|
||||
0xD9FDFE, 0xB3FCFF, 0xACFFFF, 0x90FFFF, 0x76FEFF, 0x5FFAFD, 0x08FEFE, 0x22F3F2, 0x06C9C2, 0x08B2C4, 0x049FA4, 0x078C97, 0x008286, 0x025D5D, 0x005056, 0x003135,
|
||||
0xE2F5FF, 0xB4EBFF, 0xA3DAFF, 0x89CCF8, 0x79D1FF, 0x61C3F7, 0x59C5F3, 0x3FB9F6, 0x05A4FA, 0x0592F0, 0x0677B8, 0x00649A, 0x065A77, 0x004974, 0x003154, 0x00243e,
|
||||
0xD1DDFF, 0xB5D0EF, 0xA7BFF6, 0x90B6F4, 0x85AAF7, 0x67AAFF, 0x5386FF, 0x437AFF, 0x3A6AFF, 0x044EFC, 0x034EF7, 0x0A37BF, 0x09268B, 0x062871, 0x001D4C, 0x001435,
|
||||
0xC7C3FF, 0xC7C6FE, 0x9D9CFF, 0x9194F6, 0x7E81FE, 0x776FF7, 0x595AFF, 0x4852FF, 0x2D2EFF, 0x2020F8, 0x0400E1, 0x0000DD, 0x010097, 0x000086, 0x03005D, 0x020035,
|
||||
0xE1D4FF, 0xD8ACFF, 0xCD9BFF, 0xC88DFA, 0xBD8AF9, 0xB160FF, 0xAA52FE, 0x9841FD, 0x8726FF, 0x8700F5, 0x7200F4, 0x5C00B7, 0x460489, 0x350077, 0x28004F, 0x1c0037,
|
||||
0xFFC7FF, 0xFFB2FF, 0xFF9AFF, 0xF181F1, 0xFB6FFD, 0xF850FB, 0xFB46FF, 0xF91FFF, 0xF900FF, 0xDD00E6, 0xBF00C7, 0x9B0199, 0xB70090, 0x670362, 0x4F0153, 0x330035,
|
||||
0xFDD2E6, 0xF9B5DA, 0xF7A4D4, 0xF198CB, 0xF682BD, 0xFF5FAE, 0xFF4CA9, 0xFF3CA4, 0xFF1A94, 0xF90979, 0xE80071, 0xC40061, 0x96004A, 0x670132, 0x4F0024, 0x310016
|
||||
}
|
||||
|
||||
#endif
|
||||
68
image/default_colors.htm
Normal file
68
image/default_colors.htm
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>16x16 Color Picker Table</title>
|
||||
<style>
|
||||
body {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100vh;
|
||||
margin: 0;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
table {
|
||||
border: 1px solid #000;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
td {
|
||||
width: 6%;
|
||||
height: 6%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 1px solid #000;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table id="colorTable"></table>
|
||||
<script>
|
||||
const table = document.getElementById('colorTable');
|
||||
|
||||
const colors = [
|
||||
"#", "#FFFFFF", "#F1EEED", "#DCDEDE", "#BFC1BF", "#AEB0AD", "#9E9D9E", "#8E8F94", "#717373", "#5E5F61", "#4D4D4C", "#3F403A", "#332C2A", "#241E22", "#0C1210", "#000000",
|
||||
"#F6D3CF", "#FABABC", "#FBA699", "#F19580", "#FB837A", "#FC615A", "#FF4E4B", "#FF4040", "#F72128", "#F60303", "#E40000", "#C70002", "#900009", "#630604", "#4f0107", "#2d0205",
|
||||
"#FDDDCE", "#FCC5AC", "#FFB9A4", "#F6A378", "#F49A80", "#FF7D4F", "#F8742C", "#FE5A22", "#F44A0B", "#DA3A06", "#C03500", "#853004", "#912600", "#672300", "#471608", "#2b0d05",
|
||||
"#FCEBCF", "#FCD8AA", "#FFCD98", "#FCC27F", "#F3B267", "#FDA660", "#FD942D", "#FF8001", "#DF6E00", "#CC6B00", "#A85D00", "#A55300", "#734700", "#612D08", "#562600", "#351700",
|
||||
"#FFF6C9", "#FFECA8", "#FDE884", "#FADC6D", "#F8DE6F", "#FFCF43", "#FFBD00", "#EBB800", "#C1A800", "#BC8F09", "#9B7A00", "#8E6C08", "#795F01", "#5C4A00", "#523B00", "#392900",
|
||||
"#FFFFCD", "#FDFEAF", "#FCFBA1", "#FDFF69", "#F9FF2A", "#FFFE04", "#EFEE00", "#E0DE00", "#BDBF13", "#B4AF00", "#9F9900", "#909002", "#717300", "#505400", "#4A4F00", "#343700",
|
||||
"#E4FFBD", "#DFFEB9", "#D1FF8F", "#CAFC84", "#C0F96B", "#BAF353", "#98FB00", "#9AEE0F", "#78CE00", "#74C100", "#61A401", "#578A03", "#4F7E02", "#3C6200", "#2E4F00", "#203700",
|
||||
"#E1F8D8", "#BBFEAD", "#A2F592", "#A1F79A", "#81FF7A", "#5DFF59", "#48FF58", "#00F600", "#12D31F", "#0ACB04", "#10A40A", "#089811", "#06780E", "#05640F", "#005200", "#003100",
|
||||
"#D5FFF8", "#BCFFEA", "#A7FED3", "#99F2C4", "#6CFFB5", "#53F29E", "#4CFEA1", "#0AF779", "#0CD56A", "#0BC868", "#01AA50", "#07A557", "#008642", "#075A30", "#00562C", "#00331a",
|
||||
"#D9FDFE", "#B3FCFF", "#ACFFFF", "#90FFFF", "#76FEFF", "#5FFAFD", "#08FEFE", "#22F3F2", "#06C9C2", "#08B2C4", "#049FA4", "#078C97", "#008286", "#025D5D", "#005056", "#003135",
|
||||
"#E2F5FF", "#B4EBFF", "#A3DAFF", "#89CCF8", "#79D1FF", "#61C3F7", "#59C5F3", "#3FB9F6", "#05A4FA", "#0592F0", "#0677B8", "#00649A", "#065A77", "#004974", "#003154", "#00243e",
|
||||
"#D1DDFF", "#B5D0EF", "#A7BFF6", "#90B6F4", "#85AAF7", "#67AAFF", "#5386FF", "#437AFF", "#3A6AFF", "#044EFC", "#034EF7", "#0A37BF", "#09268B", "#062871", "#001D4C", "#001435",
|
||||
"#C7C3FF", "#C7C6FE", "#9D9CFF", "#9194F6", "#7E81FE", "#776FF7", "#595AFF", "#4852FF", "#2D2EFF", "#2020F8", "#0400E1", "#0000DD", "#010097", "#000086", "#03005D", "#020035",
|
||||
"#E1D4FF", "#D8ACFF", "#CD9BFF", "#C88DFA", "#BD8AF9", "#B160FF", "#AA52FE", "#9841FD", "#8726FF", "#8700F5", "#7200F4", "#5C00B7", "#460489", "#350077", "#28004F", "#1c0037",
|
||||
"#FFC7FF", "#FFB2FF", "#FF9AFF", "#F181F1", "#FB6FFD", "#F850FB", "#FB46FF", "#F91FFF", "#F900FF", "#DD00E6", "#BF00C7", "#9B0199", "#B70090", "#670362", "#4F0153", "#330035",
|
||||
"#FDD2E6", "#F9B5DA", "#F7A4D4", "#F198CB", "#F682BD", "#FF5FAE", "#FF4CA9", "#FF3CA4", "#FF1A94", "#F90979", "#E80071", "#C40061", "#96004A", "#670132", "#4F0024", "#310016",
|
||||
];
|
||||
|
||||
for (let r = 0; r < 16; r++) {
|
||||
const row = document.createElement('tr');
|
||||
for (let g = 0; g < 16; g++) {
|
||||
const colorValue = `${colors[r * 16 + g]}`;
|
||||
const cell = document.createElement('td');
|
||||
cell.style.backgroundColor = colorValue;
|
||||
row.appendChild(cell);
|
||||
}
|
||||
table.appendChild(row);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
/**
|
||||
* Jingga
|
||||
*
|
||||
* @package Utils
|
||||
* @copyright Jingga
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
#ifndef TOS_MATH_ANIMATION
|
||||
#define TOS_MATH_ANIMATION
|
||||
|
||||
inline
|
||||
float lerp_approx(float a, float b, float t)
|
||||
{
|
||||
return a + t * (b - a);
|
||||
}
|
||||
|
||||
#endif
|
||||
19
models/Location.h
Normal file
19
models/Location.h
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
/**
|
||||
* Jingga
|
||||
*
|
||||
* @copyright Jingga
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
#ifndef TOS_MODELS_LOCATION_H
|
||||
#define TOS_MODELS_LOCATION_H
|
||||
|
||||
#include "../stdlib/Mathtypes.h"
|
||||
|
||||
struct Location {
|
||||
v3_f32 position;
|
||||
v4_f32 orientation;
|
||||
};
|
||||
|
||||
#endif
|
||||
0
models/Map/map_chunks.h
Normal file
0
models/Map/map_chunks.h
Normal file
146
models/event/Event.h
Normal file
146
models/event/Event.h
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
#ifndef TOS_EVENT_H
|
||||
#define TOS_EVENT_H
|
||||
|
||||
#include "../../stdlib/Types.h"
|
||||
#include "../mob/monster/LootTable.h"
|
||||
#include "EventTaskType.h"
|
||||
|
||||
enum QuestState {
|
||||
QUEST_STATE_NOT_STARTED,
|
||||
QUEST_STATE_IN_PROGRESS,
|
||||
QUEST_STATE_COMPLETED,
|
||||
QUEST_STATE_FAILED
|
||||
};
|
||||
|
||||
// also used for conditions in event tasks
|
||||
struct EventRequirement {
|
||||
int* events_finished; // These events need to be completed
|
||||
int events_finished_count;
|
||||
|
||||
int* events_not_finished;
|
||||
int events_not_finished_count;
|
||||
|
||||
int* events_started; // These events need to be started
|
||||
int events_started_count;
|
||||
|
||||
int* events_not_started;
|
||||
int events_not_started_count;
|
||||
|
||||
int char_level_above;
|
||||
int char_level_below;
|
||||
|
||||
int group_size; // some quests require a certain group size
|
||||
|
||||
int* proficiencies_above;
|
||||
int* proficiencies_above_level;
|
||||
int proficiencies_above_count;
|
||||
|
||||
int* proficiencies_below;
|
||||
int* proficiencies_below_level;
|
||||
int proficiencies_below_count;
|
||||
|
||||
int char_trait_type; // npc, region, global, ...
|
||||
int* char_trait_above;
|
||||
int* char_trait_above_level;
|
||||
int char_trait_above_count;
|
||||
|
||||
int* char_trait_below;
|
||||
int* char_trait_below_level;
|
||||
int char_trait_below_count;
|
||||
|
||||
int char_recognition_type; // npc, region, global, ...
|
||||
int* char_recognition_above;
|
||||
int* char_recognition_above_level;
|
||||
int char_recognition_above_count;
|
||||
|
||||
int* char_recognition_below;
|
||||
int* char_recognition_below_level;
|
||||
int char_recognition_below_count;
|
||||
};
|
||||
|
||||
struct EventReward {
|
||||
int score; // score required for this reward
|
||||
|
||||
LootTable loot;
|
||||
bool reward_given;
|
||||
};
|
||||
|
||||
struct EventTaskCollect {
|
||||
int64* items;
|
||||
int* required_amount;
|
||||
int* collected_amount;
|
||||
|
||||
// @todo some data should be visual, some only internal
|
||||
// sometimes we want to show radi, sometimes not
|
||||
// some of the radi are also mob/obj spawn areas for internal purposes
|
||||
v3_f32* positions;
|
||||
f32* radi;
|
||||
};
|
||||
|
||||
struct EventTaskKill {
|
||||
int64 mob;
|
||||
int required_kills;
|
||||
int kills_done;
|
||||
|
||||
v3_f32* positions;
|
||||
f32* radi;
|
||||
};
|
||||
|
||||
struct EventTaskAccompany {
|
||||
int64 npc;
|
||||
|
||||
v3_f32* positions;
|
||||
f32* radi;
|
||||
|
||||
bool reached_destination;
|
||||
};
|
||||
|
||||
struct EventTaskDiscover {
|
||||
v3_f32* positions;
|
||||
f32* radi;
|
||||
|
||||
bool* discovered;
|
||||
};
|
||||
|
||||
struct EventTaskDeliver {
|
||||
// @todo first pickup items from location/npc?
|
||||
|
||||
int64* items;
|
||||
int* required_amount;
|
||||
int* delivered_amount;
|
||||
|
||||
// pickup location
|
||||
v3_f32* positions;
|
||||
f32* radi;
|
||||
|
||||
// @todo destination
|
||||
|
||||
bool* delivered;
|
||||
};
|
||||
|
||||
struct EventTask {
|
||||
EventTaskType type;
|
||||
bool completed;
|
||||
union {
|
||||
EventTaskCollect collect;
|
||||
EventTaskKill kill;
|
||||
EventTaskAccompany accompany;
|
||||
EventTaskDiscover discover;
|
||||
};
|
||||
};
|
||||
|
||||
struct Event {
|
||||
int64 id;
|
||||
QuestState state;
|
||||
int64 giver;
|
||||
|
||||
char* title;
|
||||
char* description;
|
||||
|
||||
EventTask* tasks;
|
||||
|
||||
EventRequirement* requirements;
|
||||
EventReward* rewards;
|
||||
};
|
||||
|
||||
#endif
|
||||
937
models/event/EventTaskType.h
Normal file
937
models/event/EventTaskType.h
Normal file
|
|
@ -0,0 +1,937 @@
|
|||
#ifndef TOS_QUEST_EVENT_TASK_TYPE_H
|
||||
#define TOS_QUEST_EVENT_TASK_TYPE_H
|
||||
|
||||
enum EventTaskType {
|
||||
TASK_COLLECT, // Collect a specific item or set of items
|
||||
TASK_KILL, // Kill a certain number of enemies
|
||||
TASK_ACCOMPANY, // Escort an NPC to a location
|
||||
TASK_DISCOVER, // Discover a specific location
|
||||
TASK_DELIVER, // Deliver an item to an NPC or location
|
||||
TASK_RESCUE, // Rescue an NPC or group of NPCs
|
||||
TASK_RETRIEVE, // Retrieve a stolen or lost item
|
||||
TASK_GATHER_INFORMATION, // Gather information or clues
|
||||
TASK_TALK, // Speak to a specific NPC or group of NPCs
|
||||
TASK_DEFEND, // Defend a location or NPC for a certain period of time
|
||||
TASK_SURVIVE, // Survive waves of enemies or a hazardous environment
|
||||
TASK_INVESTIGATE, // Investigate a mystery or event
|
||||
TASK_CONSTRUCT, // Build or repair a structure or object
|
||||
TASK_CRAFT, // Craft a specific item or set of items
|
||||
TASK_TRAIN, // Train a skill or teach an NPC
|
||||
TASK_FOLLOW, // Follow an NPC or creature without being detected
|
||||
TASK_SABOTAGE, // Sabotage an enemy structure or plan
|
||||
TASK_CAPTURE, // Capture or trap an enemy or creature
|
||||
TASK_ESCAPE, // Escape from a location or situation
|
||||
TASK_EXPLORE, // Explore a new area or region
|
||||
TASK_NEGOTIATE, // Negotiate peace or a trade agreement
|
||||
TASK_BARGAIN, // Bargain for a better price or outcome
|
||||
TASK_SPY, // Gather intelligence on enemies or allies
|
||||
TASK_INFILTRATE, // Infiltrate an enemy base or organization
|
||||
TASK_ASSASSINATE, // Assassinate a key target
|
||||
TASK_RECON, // Perform reconnaissance on a location
|
||||
TASK_HACK, // Hack a computer system or device
|
||||
TASK_REPAIR, // Repair a damaged object or system
|
||||
TASK_ENCHANT, // Enchant a weapon, armor, or item
|
||||
TASK_BREW, // Brew a potion or drink
|
||||
TASK_FISH, // Catch a certain type or number of fish
|
||||
TASK_HUNT, // Hunt a specific animal or creature
|
||||
TASK_COLLECT_TAX, // Collect taxes or tribute from NPCs
|
||||
TASK_RECRUIT, // Recruit allies or troops for a cause
|
||||
TASK_ESCAPE_PRISON, // Escape from captivity or imprisonment
|
||||
TASK_EXTRACT, // Extract resources or an NPC from a location
|
||||
TASK_SHADOW, // Shadow an NPC or enemy without being seen
|
||||
TASK_FIND_LOST, // Find a lost or missing NPC or item
|
||||
TASK_PLANT, // Plant seeds or objects in specific locations
|
||||
TASK_SELL, // Sell specific items to merchants or NPCs
|
||||
TASK_BUY, // Purchase specific items or goods
|
||||
TASK_PROTECT, // Protect a caravan or convoy
|
||||
TASK_RELOCATE, // Relocate an NPC or item to a new location
|
||||
TASK_RESTORE, // Restore a broken artifact or relationship
|
||||
TASK_SURVEY, // Survey land or resources
|
||||
TASK_SMUGGLE, // Smuggle contraband past guards or checkpoints
|
||||
TASK_INTERROGATE, // Interrogate an NPC for information
|
||||
TASK_INTERCEPT, // Intercept a message or courier
|
||||
TASK_ESCORT, // Escort an important NPC through dangerous territory
|
||||
TASK_MINE, // Mine specific ores or minerals
|
||||
TASK_BOUNTY, // Collect a bounty on a specific target
|
||||
TASK_TRAP, // Set traps for enemies or animals
|
||||
TASK_CONQUER, // Conquer a specific area or territory
|
||||
TASK_SURRENDER, // Surrender to an enemy or superior
|
||||
TASK_NEGLECT, // Avoid or neglect a responsibility (e.g., a moral choice)
|
||||
TASK_SUPPORT, // Provide support or aid to allies in a conflict
|
||||
TASK_DELIVER_MESSAGE, // Deliver a message or letter to an NPC
|
||||
TASK_LAY_SIEGE, // Lay siege to a fortress or city
|
||||
TASK_BREAK_SIEGE, // Break a siege and liberate a location
|
||||
TASK_FORAGE, // Forage for food, herbs, or supplies
|
||||
TASK_SEARCH, // Search for clues or specific items in an area
|
||||
TASK_TAME, // Tame a wild animal or creature
|
||||
TASK_CHARM, // Charm or persuade an NPC or creature
|
||||
TASK_CONVINCE, // Convince an NPC to take a certain action
|
||||
TASK_DEFECT, // Defect from one faction to another
|
||||
TASK_BETRAY, // Betray an ally or group for personal gain
|
||||
TASK_DECRYPT, // Decrypt a coded message or puzzle
|
||||
TASK_PUZZLE, // Solve a puzzle or riddle
|
||||
TASK_RACE, // Participate in a race or timed event
|
||||
TASK_TOURNAMENT, // Compete in a tournament or competition
|
||||
TASK_SCARE, // Scare off or intimidate an NPC or creature
|
||||
TASK_SHOOT, // Shoot targets or enemies with a ranged weapon
|
||||
TASK_USE_ITEM, // Use a specific item at a location or on an NPC
|
||||
TASK_PERSUADE, // Persuade an NPC to do something or believe something
|
||||
TASK_MEDITATE, // Meditate to gain insights or abilities
|
||||
TASK_DUEL, // Duel an NPC in combat
|
||||
TASK_TRIAL, // Complete a trial or test of skill
|
||||
TASK_PREACH, // Preach to NPCs to gain followers or influence
|
||||
TASK_CONVERT, // Convert NPCs to a religion or cause
|
||||
TASK_COLLECT_DEBT, // Collect a debt from an NPC
|
||||
TASK_LIGHT, // Light torches or beacons
|
||||
TASK_EXTINGUISH, // Extinguish fires or light sources
|
||||
TASK_RECONCILE, // Reconcile a conflict between NPCs or groups
|
||||
TASK_DISARM, // Disarm traps or enemies
|
||||
TASK_RELOCATE_VILLAGERS, // Relocate villagers to a safe area
|
||||
TASK_CALM, // Calm a panicked NPC or creature
|
||||
TASK_INVOKE_RITUAL, // Invoke or complete a ritual
|
||||
TASK_PERFORM, // Perform music, dance, or a play for an audience
|
||||
TASK_OBTAIN_PERMISSION, // Obtain permission to enter a location or take an action
|
||||
TASK_HIDE, // Hide from enemies or during a stealth mission
|
||||
TASK_CLIMB, // Climb a mountain, tree, or other structure
|
||||
TASK_SWIM, // Swim across a body of water or retrieve an item from underwater
|
||||
TASK_DIVE, // Dive into deep water or a cave
|
||||
TASK_RESIST, // Resist temptation or a magical effect
|
||||
TASK_SNEAK, // Sneak into a location without being detected
|
||||
TASK_SURVEY_TERRITORY, // Survey territory for strategic purposes
|
||||
TASK_COMMUNE, // Commune with spirits, gods, or nature
|
||||
TASK_EXORCISE, // Exorcise a spirit or demon from a location or person
|
||||
TASK_SUMMON, // Summon a creature, spirit, or other entity
|
||||
TASK_DECEIVE, // Deceive an NPC or group
|
||||
TASK_GATHER_ARMY, // Gather an army or group of followers
|
||||
TASK_REPEL_INVASION, // Repel an invasion or attack
|
||||
TASK_HARVEST, // Harvest crops or resources
|
||||
TASK_OPERATE_MACHINE, // Operate a complex machine or vehicle
|
||||
TASK_NEGOTIATE_RANSOM, // Negotiate the ransom of a captured NPC
|
||||
TASK_CONVICT, // Convict or acquit an NPC in a trial
|
||||
TASK_TRACK, // Track a person, creature, or object
|
||||
TASK_CONCEAL, // Conceal evidence or an object from others
|
||||
TASK_APPREHEND, // Apprehend a criminal or fugitive
|
||||
TASK_TEACH, // Teach an NPC a skill or knowledge
|
||||
TASK_CURE, // Cure a disease or ailment affecting an NPC
|
||||
TASK_RECLAIM, // Reclaim lost or stolen property
|
||||
TASK_HUNT_TREASURE, // Hunt for hidden or buried treasure
|
||||
TASK_PROPHESY, // Deliver a prophecy or prediction
|
||||
TASK_ENACT_REVENGE, // Enact revenge on an enemy or traitor
|
||||
TASK_UPHOLD_OATH, // Uphold an oath or pledge
|
||||
TASK_FIND_PATH, // Find a path through difficult terrain
|
||||
TASK_ESCORT_CONVOY, // Escort a convoy through dangerous territory
|
||||
TASK_INTERFERE, // Interfere with an enemy's plans or operations
|
||||
TASK_ENFORCE_LAW, // Enforce the law in a chaotic or lawless area
|
||||
TASK_RESTORE_HONOR, // Restore the honor of a disgraced NPC or family
|
||||
TASK_PEACE_TREATY, // Negotiate or enforce a peace treaty
|
||||
TASK_GATHER_HERBS, // Gather specific herbs or plants
|
||||
TASK_CAMP, // Set up or break down a camp
|
||||
TASK_SET_TRAPS, // Set traps for animals or enemies
|
||||
TASK_CREATE_POTION, // Create a potion using specific ingredients
|
||||
TASK_RECONSTITUTE, // Reconstitute a broken or damaged artifact
|
||||
TASK_RENOVATE, // Renovate or repair a building or structure
|
||||
TASK_EXTRACT_ORE, // Extract ore from a mine or vein
|
||||
TASK_DOUSE_FLAMES, // Douse flames in a burning building or area
|
||||
TASK_BLESS, // Bless an object, location, or person
|
||||
TASK_PLUNDER, // Plunder a village, ship, or enemy camp
|
||||
TASK_CONSECRATE, // Consecrate a temple, altar, or sacred ground
|
||||
TASK_EVACUATE, // Evacuate civilians or troops from a dangerous area
|
||||
TASK_DISGUISE, // Disguise yourself or an NPC to infiltrate or avoid detection
|
||||
TASK_CONFRONT, // Confront an NPC or creature about their actions
|
||||
TASK_WAGER, // Wager on a game, race, or duel
|
||||
TASK_SAIL, // Sail a ship to a specific destination
|
||||
TASK_MAINTAIN, // Maintain equipment, a building, or machinery
|
||||
TASK_CLEANSE, // Cleanse a cursed or polluted area
|
||||
TASK_HOLD_POSITION, // Hold a position against enemies for a certain time
|
||||
TASK_MAP_TERRITORY, // Map uncharted territory or a region
|
||||
TASK_INTERPRET, // Interpret a prophecy, dream, or message
|
||||
TASK_TRANSLATE, // Translate an ancient or foreign language
|
||||
TASK_ENFORCE_ORDER, // Enforce order in a chaotic environment
|
||||
TASK_REPENT, // Repent for a past mistake or sin
|
||||
TASK_INITIATE, // Initiate a new member into a guild, order, or faction
|
||||
TASK_TEST_LOYALTY, // Test the loyalty of an NPC or group
|
||||
TASK_SACRIFICE, // Sacrifice an item, creature, or person for a greater cause
|
||||
TASK_COLLECT_TITHE, // Collect a tithe or offering from NPCs
|
||||
TASK_PERFORM_RITUAL, // Perform a ritual to summon, banish, or bless
|
||||
TASK_RESCUE_HOSTAGE, // Rescue a hostage from enemy forces
|
||||
TASK_PROVOKE, // Provoke an enemy or rival into action
|
||||
TASK_NEUTRALIZE, // Neutralize a threat without killing
|
||||
TASK_SCOUR, // Scour an area for resources, clues, or enemies
|
||||
TASK_MARK_LOCATION, // Mark a location for future use or for others to find
|
||||
TASK_NAVIGATE, // Navigate through dangerous or unknown territory
|
||||
TASK_MANAGE_RESOURCES, // Manage resources such as food, water, or materials
|
||||
TASK_APPEASE, // Appease an angry deity, spirit, or powerful NPC
|
||||
TASK_MOURN, // Mourn the loss of a person, place, or thing
|
||||
TASK_ORGANIZE_EVENT, // Organize an event such as a festival, gathering, or meeting
|
||||
TASK_ESCORT_PRISONER, // Escort a prisoner to a specific location
|
||||
TASK_ENDURE, // Endure a hardship or trial for a certain time
|
||||
TASK_BOND_WITH_CREATURE, // Bond with a creature or animal to gain its loyalty
|
||||
TASK_RECONCILE_FACTIONS, // Reconcile two or more factions that are at odds
|
||||
TASK_CONDUCT_RITUAL, // Conduct a complex ritual with multiple steps
|
||||
TASK_OFFER_TRIBUTE, // Offer tribute to a ruler, deity, or spirit
|
||||
TASK_EXILE, // Exile an NPC or group from a community or region
|
||||
TASK_SUMMON_ALLY, // Summon an ally or familiar to aid in a quest
|
||||
TASK_DEFUSE, // Defuse a bomb or dangerous situation
|
||||
TASK_RELAY_MESSAGE, // Relay a message between two parties
|
||||
TASK_FIND_RELIC, // Find a lost or ancient relic
|
||||
TASK_DECIPHER_CODE, // Decipher a code, puzzle, or riddle
|
||||
TASK_JUDGE_CONTEST, // Judge a contest, competition, or duel
|
||||
TASK_ESTABLISH_BASE, // Establish a base of operations in a new location
|
||||
TASK_DEFEAT_CHAMPION, // Defeat a champion in battle or competition
|
||||
TASK_EMBARK_JOURNEY, // Embark on a long and dangerous journey
|
||||
TASK_OVERTHROW, // Overthrow a ruler or government
|
||||
TASK_PERFORM_CEREMONY, // Perform a ceremonial duty or rite
|
||||
TASK_DEPLOY_TROOPS, // Deploy troops to a strategic location
|
||||
TASK_CONDUCT_RESEARCH, // Conduct research on a subject, item, or creature
|
||||
TASK_COUNTERFEIT, // Create a counterfeit item, document, or currency
|
||||
TASK_OBTAIN_FAVOR, // Obtain the favor of a powerful NPC or faction
|
||||
TASK_CHALLENGE_RIVAL, // Challenge a rival to a duel, contest, or battle
|
||||
TASK_RECLAIM_LAND, // Reclaim land from enemies or the wilderness
|
||||
TASK_PROTECT_ARTIFACT, // Protect an artifact from theft or damage
|
||||
TASK_CREATE_ALLIANCE, // Create an alliance between factions or NPCs
|
||||
TASK_TRAVERSE_DUNGEON, // Traverse a dungeon or dangerous area
|
||||
TASK_DEFEND_STRONGHOLD, // Defend a stronghold from an attack or siege
|
||||
TASK_UNDERGO_TRIAL, // Undergo a trial of strength, wisdom, or courage
|
||||
TASK_REDEEM, // Redeem an NPC or yourself from a past wrong
|
||||
TASK_RESTORE_BALANCE, // Restore balance to a chaotic situation or ecosystem
|
||||
TASK_CONQUER_FORTRESS, // Conquer a fortress or enemy stronghold
|
||||
TASK_DEPLOY_TRAP, // Deploy a trap in a strategic location
|
||||
TASK_HARNESS_POWER, // Harness a source of power or magic
|
||||
TASK_PLANT_EVIDENCE, // Plant evidence to frame an NPC or mislead others
|
||||
TASK_RECON_VILLAGE, // Recon a village or settlement for information
|
||||
TASK_ESCORT_VIP, // Escort a VIP to a safe or strategic location
|
||||
TASK_CREATE_ART, // Create a piece of art, music, or literature
|
||||
TASK_REPAIR_REPUTATION, // Repair the reputation of an NPC, faction, or yourself
|
||||
TASK_FIND_HEIR, // Find a missing heir to a throne or legacy
|
||||
TASK_REPAIR_BRIDGE, // Repair a bridge to allow safe passage
|
||||
TASK_CONSTRUCT_BARRICADE,// Construct a barricade to defend against enemies
|
||||
TASK_INVOKE_DIVINE_HELP, // Invoke divine help or blessings in a dire situation
|
||||
TASK_PREPARE_FEAST, // Prepare a feast or banquet for a special occasion
|
||||
TASK_OBSERVE, // Observe an event or person without intervening
|
||||
TASK_MANAGE_SUPPLY_LINES,// Manage supply lines during a campaign or mission
|
||||
TASK_ARRANGE_MARRIAGE, // Arrange a marriage for political or personal reasons
|
||||
TASK_FIND_CURE, // Find a cure for a disease or curse
|
||||
TASK_RESCUE_ANIMAL, // Rescue an endangered or trapped animal
|
||||
TASK_CONSTRUCT_MONUMENT, // Construct a monument to commemorate an event or person
|
||||
TASK_INVEST_FORTUNE, // Invest a fortune in business, property, or trade
|
||||
TASK_HOST_GATHERING, // Host a gathering or meeting of importance
|
||||
TASK_RESCUE_CHILD, // Rescue a lost or kidnapped child
|
||||
TASK_SUBDUE_CREATURE, // Subdue a rampaging creature without killing it
|
||||
TASK_MEDIATE, // Mediate a dispute between NPCs or factions
|
||||
TASK_DESTROY_EVIDENCE, // Destroy evidence of a crime or secret
|
||||
TASK_DEVELOP_TECH, // Develop new technology, magic, or strategy
|
||||
TASK_NAVIGATE_POLITICS, // Navigate complex political situations
|
||||
TASK_REVIVE, // Revive an NPC from death or unconsciousness
|
||||
TASK_ESCORT_MERCHANT, // Escort a merchant and their goods to a market or town
|
||||
TASK_INTERFERE_CEREMONY, // Interfere with a rival's ceremony or ritual
|
||||
TASK_DISMISS_ALLY, // Dismiss an ally or companion from your service
|
||||
TASK_PERFORM_EXORCISM, // Perform an exorcism to banish a spirit or demon
|
||||
TASK_SECURE_BORDER, // Secure a border against invasion or smuggling
|
||||
TASK_RETRIEVE_TREASURE, // Retrieve a treasure from a dangerous location
|
||||
TASK_HOST_CONTEST, // Host a contest or tournament
|
||||
TASK_REUNITE_FAMILY, // Reunite a family separated by conflict or tragedy
|
||||
TASK_SMELT_ORE, // Smelt ore into usable metal
|
||||
TASK_ENCHANT_WEAPON, // Enchant a weapon with special powers
|
||||
TASK_CREATE_GOLEM, // Create or animate a golem or other construct
|
||||
TASK_REPLANT_FOREST, // Replant a forest that has been destroyed
|
||||
TASK_REPLANT_FOREST, // Replant a forest that has been destroyed
|
||||
TASK_RESURRECT, // Resurrect an NPC or creature from the dead
|
||||
TASK_SILENCE, // Silence an NPC or group to prevent them from speaking out
|
||||
TASK_SUBVERT, // Subvert a rival or enemy's plans from within
|
||||
TASK_INVESTIGATE_CRIME, // Investigate a crime scene or mystery
|
||||
TASK_DEFEND_CIVILIANS, // Defend civilians from an attack or disaster
|
||||
TASK_TRAVEL_UNDERCOVER, // Travel undercover to avoid detection
|
||||
TASK_EXTRACT_INFO, // Extract information from a captured enemy or informant
|
||||
TASK_AWAKEN_ANCIENT, // Awaken an ancient being or power
|
||||
TASK_CLEAR_DUNGEON, // Clear a dungeon of enemies or traps
|
||||
TASK_CONDUCT_RAID, // Conduct a raid on an enemy stronghold or village
|
||||
TASK_INTERCEPT_CARGO, // Intercept a shipment of goods or weapons
|
||||
TASK_BUILD_FORTRESS, // Build a fortress or stronghold
|
||||
TASK_ENFORCE_QUARANTINE, // Enforce a quarantine in a plague-ridden area
|
||||
TASK_MAINTAIN_MORALITY, // Maintain the morality or faith of a group
|
||||
TASK_RECOVER_BODY, // Recover a fallen ally's body from a dangerous location
|
||||
TASK_BRIBE_OFFICIAL, // Bribe an official to gain favor or bypass a law
|
||||
TASK_PREVENT_WAR, // Prevent a war between factions or nations
|
||||
TASK_INTERROGATE_PRISONER,// Interrogate a prisoner for vital information
|
||||
TASK_FORGE_ALLIANCE, // Forge an alliance between warring factions
|
||||
TASK_OPERATE_VEHICLE, // Operate a vehicle, such as a ship or airship
|
||||
TASK_HARNESS_ELEMENT, // Harness the power of an elemental force
|
||||
TASK_BREED_ANIMALS, // Breed animals for a specific purpose or trait
|
||||
TASK_QUELL_REBELLION, // Quell a rebellion or uprising
|
||||
TASK_RECRUIT_SOLDIERS, // Recruit soldiers for a military campaign
|
||||
TASK_SEEK_REDEMPTION, // Seek redemption for past sins or failures
|
||||
TASK_ESCAPE_DUNGEON, // Escape from a dungeon or prison
|
||||
TASK_TRACK_ENEMY, // Track an enemy's movements and plans
|
||||
TASK_REPAIR_SHIP, // Repair a damaged ship or vehicle
|
||||
TASK_MANAGE_ECONOMY, // Manage the economy of a town or region
|
||||
TASK_CONSTRUCT_TEMPLE, // Construct a temple or place of worship
|
||||
TASK_DEVELOP_CURE, // Develop a cure for a deadly disease or poison
|
||||
TASK_EXCAVATE_RUINS, // Excavate ruins to uncover lost artifacts or knowledge
|
||||
TASK_BARTER, // Barter goods or services with NPCs or factions
|
||||
TASK_COMPOSE_LETTER, // Compose an important letter or message
|
||||
TASK_NAVIGATE_SEAS, // Navigate treacherous seas or waterways
|
||||
TASK_PROTECT_SECRET, // Protect a secret from being discovered or revealed
|
||||
TASK_DISRUPT_RITUAL, // Disrupt an enemy's ritual or ceremony
|
||||
TASK_NEGOTIATE_PEACE, // Negotiate peace between warring factions
|
||||
TASK_REPAIR_RELIC, // Repair a damaged or broken relic
|
||||
TASK_DISCOVER_ARTIFACT, // Discover a lost or hidden artifact
|
||||
TASK_LEAD_EXPEDITION, // Lead an expedition into unknown or dangerous territory
|
||||
TASK_TRAIN_COMPANION, // Train a companion or pet in new skills
|
||||
TASK_CONVERT_ENEMY, // Convert an enemy to your side or cause
|
||||
TASK_GATHER_REINFORCEMENTS, // Gather reinforcements to aid in a battle
|
||||
TASK_FREE_SLAVES, // Free slaves or captives from bondage
|
||||
TASK_STOP_ASSASSINATION, // Stop an assassination attempt on an important NPC
|
||||
TASK_DISCOVER_LORE, // Discover ancient lore or knowledge
|
||||
TASK_HARVEST_CROPS, // Harvest crops from a field or farm
|
||||
TASK_EXTEND_TERRITORY, // Extend the territory of a kingdom or faction
|
||||
TASK_REPEL_ATTACK, // Repel an attack on a settlement or fortress
|
||||
TASK_PERFORM_SABOTAGE, // Perform sabotage on enemy equipment or plans
|
||||
TASK_HIDE_EVIDENCE, // Hide evidence of a crime or conspiracy
|
||||
TASK_CAPTURE_ANIMAL, // Capture a wild or dangerous animal
|
||||
TASK_DEFUSE_CONFLICT, // Defuse a conflict between NPCs or factions
|
||||
TASK_CONFRONT_FEARS, // Confront and overcome personal fears or nightmares
|
||||
TASK_PROTECT_TRADER, // Protect a trader on their journey through dangerous lands
|
||||
TASK_EXPAND_INFLUENCE, // Expand the influence of your faction or cause
|
||||
TASK_RESTORE_ANCIENT_ORDER, // Restore an ancient order or organization
|
||||
TASK_INVESTIGATE_RUINS, // Investigate ancient ruins for clues or treasure
|
||||
TASK_REINFORCE_WALLS, // Reinforce the walls of a castle or city
|
||||
TASK_NAVIGATE_MOUNTAINS, // Navigate treacherous mountain paths
|
||||
TASK_PURIFY_SOURCE, // Purify a corrupted or polluted source of water or power
|
||||
TASK_HEAL_WOUNDED, // Heal the wounded after a battle or disaster
|
||||
TASK_ENCHANT_ARMOR, // Enchant armor with magical properties
|
||||
TASK_AVENGE_DEATH, // Avenge the death of a loved one or comrade
|
||||
TASK_LEARN_SPELL, // Learn a new spell or magical ability
|
||||
TASK_FORM_COVENANT, // Form a covenant with a powerful entity or faction
|
||||
TASK_TRAVERSE_DESERT, // Traverse a dangerous desert region
|
||||
TASK_OVERCOME_CURSE, // Overcome or lift a powerful curse
|
||||
TASK_BATTLE_ARENA, // Battle in an arena for glory or rewards
|
||||
TASK_LOCATE_PORTAL, // Locate a portal to another realm or dimension
|
||||
TASK_MANAGE_VILLAGE, // Manage the affairs of a village or small town
|
||||
TASK_NEGOTIATE_TRADE, // Negotiate trade agreements between factions
|
||||
TASK_REPEL_MONSTER, // Repel a monster that threatens a town or settlement
|
||||
TASK_CONDUCT_RITUAL, // Conduct a ritual to summon or banish a being
|
||||
TASK_EXPLORE_CAVES, // Explore caves or underground tunnels
|
||||
TASK_CRAFT_WEAPON, // Craft a weapon using special materials
|
||||
TASK_CLEAR_FOREST, // Clear a forest of dangerous creatures or obstacles
|
||||
TASK_REPAIR_MACHINERY, // Repair complex machinery or constructs
|
||||
TASK_RETRIEVE_SCROLL, // Retrieve a lost or stolen scroll
|
||||
TASK_DEFEND_CARGO, // Defend cargo during transport
|
||||
TASK_RECOVER_LOST_ITEM, // Recover a lost or stolen item of importance
|
||||
TASK_NAVIGATE_SWAMP, // Navigate through a treacherous swamp
|
||||
TASK_EXORCISE_HAUNTING, // Exorcise a haunting from a location
|
||||
TASK_INVOKE_ANCIENT_RITES, // Invoke ancient rites or rituals for protection or power
|
||||
TASK_CONSTRUCT_BRIDGE, // Construct a bridge to cross a river or chasm
|
||||
TASK_UNCOVER_HIDDEN_PATH,// Uncover a hidden path or secret passage
|
||||
TASK_FIND_LOST_CITY, // Find a lost city or civilization
|
||||
TASK_BIND_DEMON, // Bind a demon or spirit to prevent harm
|
||||
TASK_CREATE_ARMOR, // Create armor for protection or battle
|
||||
TASK_MAP_CAVERNS, // Map unexplored caverns or tunnels
|
||||
TASK_LIFT_SIEGE, // Lift a siege on a city or fortress
|
||||
TASK_NAVIGATE_JUNGLE, // Navigate through a dense jungle
|
||||
TASK_PURGE_CORRUPTION, // Purge corruption from a person, place, or thing
|
||||
TASK_RETRIEVE_REMAINS, // Retrieve the remains of a fallen ally or enemy
|
||||
TASK_CREATE_AMULET, // Create a protective amulet or charm
|
||||
TASK_RESOLVE_DISPUTE, // Resolve a dispute between NPCs or factions
|
||||
TASK_STOP_REBELLION, // Stop a rebellion before it gains momentum
|
||||
TASK_REPEL_HORDE, // Repel a horde of enemies attacking a settlement
|
||||
TASK_EXAMINE_ARTIFACT, // Examine an artifact for clues or knowledge
|
||||
TASK_ARRANGE_TREATY, // Arrange a treaty between warring factions
|
||||
TASK_PROTECT_REFUGEES, // Protect refugees fleeing from war or disaster
|
||||
TASK_INTERCEPT_SPY, // Intercept a spy before they deliver critical information
|
||||
TASK_DISCOVER_NEW_LAND, // Discover new land for exploration or colonization
|
||||
TASK_RESCUE_SURVIVORS, // Rescue survivors from a disaster or battle
|
||||
TASK_CULTIVATE_CROPS, // Cultivate crops to ensure a harvest
|
||||
TASK_REPAIR_WEAPON, // Repair a broken or damaged weapon
|
||||
TASK_REPAIR_WEAPON, // Repair a broken or damaged weapon
|
||||
TASK_CONDUCT_INVESTIGATION, // Conduct an investigation into a mystery or crime
|
||||
TASK_DEFEND_VILLAGE, // Defend a village from invaders or monsters
|
||||
TASK_INTERCEPT_COURIER, // Intercept a courier carrying important messages or items
|
||||
TASK_PREPARE_DEFENSES, // Prepare defenses for an impending attack
|
||||
TASK_SEEK_OUTLAW, // Seek and capture or eliminate an outlaw
|
||||
TASK_CONVERT_FOLLOWERS, // Convert followers to a new faith or cause
|
||||
TASK_SMUGGLE_GOODS, // Smuggle goods past enemy lines or authorities
|
||||
TASK_PREPARE_RITUAL, // Prepare a complex ritual requiring multiple steps
|
||||
TASK_REPAIR_ARMOR, // Repair damaged armor
|
||||
TASK_CONDUCT_SURVEILLANCE, // Conduct surveillance on a target or location
|
||||
TASK_ACQUIRE_BLUEPRINTS, // Acquire blueprints for a device or building
|
||||
TASK_ESCORT_DIGNITARY, // Escort a dignitary through dangerous territory
|
||||
TASK_RECRUIT_ALLIES, // Recruit allies to support your cause
|
||||
TASK_CONSTRUCT_BARRACKS, // Construct barracks for housing soldiers
|
||||
TASK_REPAIR_FORTIFICATIONS, // Repair damaged fortifications or walls
|
||||
TASK_DEFUSE_AMBUSH, // Defuse an ambush set by enemies
|
||||
TASK_GATHER_INTEL, // Gather intelligence on enemy positions or plans
|
||||
TASK_CONDUCT_DIPLOMACY, // Conduct diplomatic negotiations with a foreign power
|
||||
TASK_RETRIEVE_BLUEPRINTS,// Retrieve stolen or lost blueprints
|
||||
TASK_INTERCEPT_SMUGGLERS,// Intercept smugglers transporting illegal goods
|
||||
TASK_ESCAPE_PURSUIT, // Escape from pursuers tracking you or your group
|
||||
TASK_REPAIR_GATE, // Repair a damaged or broken gate
|
||||
TASK_CONSTRUCT_TOWER, // Construct a tower for defense or observation
|
||||
TASK_RESUPPLY, // Resupply a forward base or outpost with necessary goods
|
||||
TASK_CONDUCT_HEIST, // Conduct a heist to steal valuable items or information
|
||||
TASK_NAVIGATE_MARSH, // Navigate through a dangerous marsh or bog
|
||||
TASK_REPAIR_BRIDGE, // Repair a bridge to restore a critical route
|
||||
TASK_DISRUPT_SMUGGLING, // Disrupt smuggling operations in a region
|
||||
TASK_ENFORCE_LAW, // Enforce the law in a lawless area or situation
|
||||
TASK_ESCORT_CONVOY, // Escort a convoy through dangerous territory
|
||||
TASK_EXTINGUISH_FIRE, // Extinguish a fire threatening a village or forest
|
||||
TASK_INVESTIGATE_MURDER, // Investigate a murder and find the culprit
|
||||
TASK_GATHER_MEDICINE, // Gather medicine or herbs to treat the sick
|
||||
TASK_REPEL_RAIDERS, // Repel raiders attacking a settlement
|
||||
TASK_DEFEND_CITADEL, // Defend a citadel from an attacking force
|
||||
TASK_RECRUIT_MERCENARIES,// Recruit mercenaries for a specific mission or battle
|
||||
TASK_DISMANTLE_BOMB, // Dismantle a bomb or explosive device
|
||||
TASK_RECONSTRUCT_EVENT, // Reconstruct events of a crime or mystery
|
||||
TASK_CONDUCT_INTERVIEW, // Conduct an interview to gather information or clues
|
||||
TASK_CLEAR_RUBBLE, // Clear rubble from a road, building, or path
|
||||
TASK_DEFEND_TEMPLE, // Defend a temple from desecration or attack
|
||||
TASK_CONSTRUCT_PALISADE, // Construct a palisade for temporary defense
|
||||
TASK_OBTAIN_PERMIT, // Obtain a permit or authorization from authorities
|
||||
TASK_EXAMINE_CORPSE, // Examine a corpse to determine cause of death
|
||||
TASK_PROTECT_MERCHANT, // Protect a merchant from bandits or pirates
|
||||
TASK_FIND_LOST_MAP, // Find a lost map leading to treasure or important locations
|
||||
TASK_RECLAIM_POSSESSION, // Reclaim a possession taken by enemies or thieves
|
||||
TASK_DISMANTLE_TRAP, // Dismantle a trap set by enemies
|
||||
TASK_ACQUIRE_SEAL, // Acquire a seal of authority or authenticity
|
||||
TASK_DEFEND_CARAVAN, // Defend a caravan traveling through dangerous territory
|
||||
TASK_ESTABLISH_OUTPOST, // Establish an outpost in a remote or strategic location
|
||||
TASK_RESOLVE_HOSTAGE_SITUATION, // Resolve a hostage situation peacefully or by force
|
||||
TASK_REPAIR_WELL, // Repair a well to restore access to water
|
||||
TASK_SALVAGE_SHIPWRECK, // Salvage a shipwreck for valuable goods or information
|
||||
TASK_AVERT_DISASTER, // Avert a natural or magical disaster threatening a region
|
||||
TASK_EXORCISE_SPIRIT, // Exorcise a malevolent spirit from a location or person
|
||||
TASK_SMUGGLE_PERSON, // Smuggle a person out of a dangerous area
|
||||
TASK_NAVIGATE_WILDERNESS, // Navigate through a dense and perilous wilderness
|
||||
TASK_PROTECT_ARTISAN, // Protect an artisan while they complete a crucial task
|
||||
TASK_REPAIR_ROAD, // Repair a road to ensure safe travel
|
||||
TASK_COUNTER_INFILTRATION, // Counter enemy infiltration efforts within your ranks
|
||||
TASK_RESCUE_SAILORS, // Rescue sailors stranded at sea or on a deserted island
|
||||
TASK_RECLAIM_TERRITORY, // Reclaim territory lost to enemies or natural forces
|
||||
TASK_DISPEL_ILLUSION, // Dispel an illusion hiding a truth or danger
|
||||
TASK_RESOLVE_FEUD, // Resolve a feud between families, factions, or individuals
|
||||
TASK_RETRIEVE_KEY, // Retrieve a key to unlock a door, chest, or magical barrier
|
||||
TASK_DEFEND_FARMSTEAD, // Defend a farmstead from bandits or wild animals
|
||||
TASK_CONSTRUCT_AQUEDUCT, // Construct an aqueduct to bring water to a settlement
|
||||
TASK_FIND_LOST_CREW, // Find and rescue a lost or missing crew from a ship or expedition
|
||||
TASK_EXCAVATE_TUNNEL, // Excavate a tunnel for mining or escape purposes
|
||||
TASK_BOLSTER_MORALE, // Bolster the morale of troops or a community facing hardship
|
||||
TASK_GUARD_PRISONER, // Guard a high-profile prisoner until their trial or transport
|
||||
TASK_SECURE_RELIC, // Secure a relic of great power or significance from enemies
|
||||
TASK_DEFEND_MARKET, // Defend a marketplace from thieves or invaders
|
||||
TASK_GATHER_SUPPLIES, // Gather supplies for an upcoming expedition or siege
|
||||
TASK_RECLAIM_WEAPONS, // Reclaim weapons stolen by enemies or lost in battle
|
||||
TASK_CONDUCT_FORAGING, // Conduct foraging in the wilderness for food and resources
|
||||
TASK_INVESTIGATE_OMEN, // Investigate an ominous sign or prophecy
|
||||
TASK_RESCUE_DIPLOMAT, // Rescue a diplomat captured by hostile forces
|
||||
TASK_PREPARE_SIEGE, // Prepare for a siege by gathering resources and fortifying defenses
|
||||
TASK_CONSTRUCT_TREBUCHET, // Construct a trebuchet or other siege weapon
|
||||
TASK_CONTAIN_PLAGUE, // Contain an outbreak of plague or disease in a community
|
||||
TASK_SUBDUE_REVOLT, // Subdue a revolt among soldiers or civilians
|
||||
TASK_EXAMINE_DOCUMENTS, // Examine documents for clues, forgery, or hidden information
|
||||
TASK_RESCUE_VILLAGERS, // Rescue villagers taken captive by raiders or monsters
|
||||
TASK_INTERCEPT_REINFORCEMENTS, // Intercept enemy reinforcements before they can reach the battlefield
|
||||
TASK_DEFEND_LIBRARY, // Defend a library or archive from destruction or theft
|
||||
TASK_REPAIR_WALL, // Repair a breach in a wall or fortification
|
||||
TASK_GATHER_RESEARCH_MATERIALS, // Gather materials needed for important research
|
||||
TASK_CONSTRUCT_BATTERING_RAM, // Construct a battering ram to breach enemy gates
|
||||
TASK_NAVIGATE_CANYON, // Navigate through a dangerous canyon or ravine
|
||||
TASK_DEFEND_TREASURY, // Defend a treasury from robbers or enemy forces
|
||||
TASK_RESCUE_HOSTAGES, // Rescue multiple hostages from a heavily guarded location
|
||||
TASK_RESTORE_HOPE, // Restore hope to a demoralized community or group
|
||||
TASK_NEGOTIATE_RANSOM, // Negotiate the ransom for a captured ally or valuable item
|
||||
TASK_REINFORCE_OUTPOST, // Reinforce a vulnerable outpost with troops and supplies
|
||||
TASK_EXAMINE_ARTEFACT, // Examine an artifact for magical properties or historical significance
|
||||
TASK_ESCAPE_TRAP, // Escape from a trap set by enemies or natural forces
|
||||
TASK_CLEAR_INFESTATION, // Clear an infestation of dangerous creatures from a location
|
||||
TASK_REPAIR_BRIDGE, // Repair a damaged bridge to restore travel routes
|
||||
TASK_FORM_DEFENSIVE_PACT, // Form a defensive pact with another faction to deter aggression
|
||||
TASK_CONTAIN_MAGIC, // Contain a runaway magical effect or creature
|
||||
TASK_CONSTRUCT_WATCHTOWER, // Construct a watchtower to oversee strategic areas
|
||||
TASK_SECURE_BORDERS, // Secure the borders of a territory against incursions
|
||||
TASK_RECOVER_RELIC, // Recover a stolen or lost relic of great importance
|
||||
TASK_CREATE_DIVERSION, // Create a diversion to distract enemies or draw them away
|
||||
TASK_RESCUE_TRAPPED_MINERS, // Rescue miners trapped underground by a cave-in or collapse
|
||||
TASK_CONFRONT_WARLORD, // Confront a warlord threatening regional stability
|
||||
TASK_NEGOTIATE_ALLIANCE, // Negotiate an alliance with a powerful faction or group
|
||||
TASK_DEFEND_WAYPOINT, // Defend a strategic waypoint from enemy control
|
||||
TASK_RESCUE_SPY, // Rescue a spy who has been captured behind enemy lines
|
||||
TASK_REPEL_SEIGE, // Repel a siege on a fortress or city
|
||||
TASK_INTERCEPT_CARGO, // Intercept valuable cargo being transported by enemies
|
||||
TASK_DEFEND_OUTPOST, // Defend an outpost from being overrun by enemies
|
||||
TASK_ESCORT_PRISONERS, // Escort prisoners safely to their destination
|
||||
TASK_SECURE_INTEL, // Secure vital intelligence from enemy hands
|
||||
TASK_DEFEND_STRATEGIC_POINT, // Defend a strategic point critical to the overall battle plan
|
||||
TASK_RETRIEVE_ENCHANTED_ITEM, // Retrieve an enchanted item from a guarded location
|
||||
TASK_CONSTRUCT_TRENCH, // Construct a trench for defensive purposes in battle
|
||||
TASK_PREPARE_AMBUSH, // Prepare an ambush against approaching enemies
|
||||
TASK_DISCOVER_HIDDEN_TREASURE, // Discover hidden treasure in an unexplored area
|
||||
TASK_RESCUE_ROYALTY, // Rescue a member of royalty from enemy capture
|
||||
TASK_DEFEND_CAPITAL, // Defend the capital city from an invading force
|
||||
TASK_RECOVER_ANCIENT_TEXTS, // Recover ancient texts containing lost knowledge
|
||||
TASK_CONSTRUCT_CATAPULT, // Construct a catapult for siege warfare
|
||||
TASK_DEFEND_BRIDGE, // Defend a bridge from enemy forces attempting to cross
|
||||
TASK_CLEAR_RIVER_BLOCKAGE, // Clear a blockage in a river to restore water flow
|
||||
TASK_REINFORCE_FORTRESS, // Reinforce a fortress under threat of attack
|
||||
TASK_CONDUCT_ESPIONAGE, // Conduct espionage to gather enemy secrets or plans
|
||||
TASK_EXAMINE_RUINS, // Examine ancient ruins for clues or artifacts
|
||||
TASK_CONSTRUCT_FORT, // Construct a fort to secure a strategic location
|
||||
TASK_RECOVER_STOLEN_GOODS, // Recover stolen goods from bandits or pirates
|
||||
TASK_PREVENT_ASSASSINATION, // Prevent an assassination attempt on a key figure
|
||||
TASK_RESCUE_KIDNAPPED_CHILD, // Rescue a kidnapped child from their captors
|
||||
TASK_ESTABLISH_TRADE_ROUTE, // Establish a new trade route between distant regions
|
||||
TASK_DEFEND_SETTLEMENT, // Defend a settlement from raiders or wild animals
|
||||
TASK_REPAIR_DAMAGED_DAM, // Repair a dam that is at risk of collapsing
|
||||
TASK_RESCUE_STRANDED_TRAVELERS, // Rescue stranded travelers from a remote location
|
||||
TASK_DEFEND_CASTLE, // Defend a castle under siege by enemy forces
|
||||
TASK_RETRIEVE_MAGIC_SCROLL, // Retrieve a powerful magic scroll from a dangerous location
|
||||
TASK_CONSTRUCT_GATE, // Construct a gate to protect a town or city
|
||||
TASK_REINFORCE_BRIDGE, // Reinforce a bridge to withstand heavy use or attack
|
||||
TASK_EXAMINE_RELIC, // Examine a relic for hidden powers or dangers
|
||||
TASK_CONSTRUCT_FENCE, // Construct a fence to keep animals or enemies out
|
||||
TASK_NAVIGATE_STORMY_SEAS, // Navigate through stormy seas to reach a destination
|
||||
TASK_EXAMINE_MAGICAL_ARTIFACT, // Examine a magical artifact to determine its purpose or power
|
||||
TASK_CONSTRUCT_OUTPOST, // Construct an outpost in a strategic or remote location
|
||||
TASK_RECOVER_SACRED_ITEM, // Recover a sacred item stolen from a temple or shrine
|
||||
TASK_ESCORT_WOUNDED, // Escort wounded allies to a safe location for treatment
|
||||
TASK_DEFEND_FORT, // Defend a fort from a concentrated enemy attack
|
||||
TASK_REPAIR_TOWN_WALL, // Repair a damaged town wall to protect against invasion
|
||||
TASK_RESOLVE_POLITICAL_DISPUTE, // Resolve a political dispute before it escalates into conflict
|
||||
TASK_REPEL_INVADERS, // Repel invaders from a territory or settlement
|
||||
TASK_CONSTRUCT_MOAT, // Construct a moat around a fortress or castle
|
||||
TASK_ESCORT_SUPPLIES, // Escort supplies to a besieged location
|
||||
TASK_DEFEND_BARRICADE, // Defend a barricade from being breached by enemies
|
||||
TASK_RETRIEVE_LOST_TREASURE, // Retrieve lost treasure from a dangerous or hidden location
|
||||
TASK_NAVIGATE_BLIZZARD, // Navigate through a blizzard to reach a destination safely
|
||||
TASK_REPEL_ENEMY_SCOUTS, // Repel enemy scouts from discovering strategic positions
|
||||
TASK_CONDUCT_RESCUE_OPERATION, // Conduct a rescue operation to save captured allies or civilians
|
||||
TASK_DEFEND_TOWER, // Defend a tower from enemy assault
|
||||
TASK_CONSTRUCT_DEFENSIVE_POSITION, // Construct a defensive position to prepare for an imminent attack
|
||||
TASK_INTERCEPT_ENEMY_COMMANDER, // Intercept an enemy commander to disrupt their plans
|
||||
TASK_ESTABLISH_COMMUNICATION_LINE, // Establish a communication line between distant allies or outposts
|
||||
TASK_DEFEND_RIVER_CROSSING, // Defend a river crossing from enemy control
|
||||
TASK_RETRIEVE_ANCIENT_WEAPON, // Retrieve an ancient weapon of great power from a guarded location
|
||||
TASK_ESCORT_CIVILIANS, // Escort civilians to safety during a crisis
|
||||
TASK_REPAIR_SHIP_HULL, // Repair a ship's hull to prevent it from sinking
|
||||
TASK_DEFEND_FERRY, // Defend a ferry from bandits or pirates during a crossing
|
||||
TASK_RESCUE_ABDUCTED_PRIEST, // Rescue an abducted priest from a hostile cult
|
||||
TASK_CONSTRUCT_RAMPARTS, // Construct ramparts to strengthen a defensive position
|
||||
TASK_CLEAR_CAVE_IN, // Clear a cave-in to rescue trapped miners or adventurers
|
||||
TASK_DEFEND_ARCHIVE, // Defend an archive containing valuable records or artifacts
|
||||
TASK_REINFORCE_WATCHTOWER, // Reinforce a watchtower to improve surveillance and defense
|
||||
TASK_REPEL_ENEMY_BOARDERS, // Repel enemy boarders attempting to seize control of a ship
|
||||
TASK_ESTABLISH_DEFENSIVE_RING, // Establish a defensive ring to protect a key location
|
||||
TASK_RECOVER_LOST_MANUSCRIPT, // Recover a lost manuscript of significant importance
|
||||
TASK_CONSTRUCT_BULWARK, // Construct a bulwark to provide extra defense against attacks
|
||||
TASK_NAVIGATE_TREACHEROUS_TERRAIN, // Navigate treacherous terrain to reach an objective
|
||||
TASK_REPEL_ENEMY_PATROL, // Repel an enemy patrol from gaining information or territory
|
||||
TASK_CONDUCT_DEFENSIVE_DRILL, // Conduct a defensive drill to prepare for potential attacks
|
||||
TASK_REINFORCE_STRATEGIC_POSITION, // Reinforce a strategic position to prevent enemy advance
|
||||
TASK_RESCUE_MISSING_SCOUTS, // Rescue scouts who have gone missing behind enemy lines
|
||||
TASK_SECURE_WATER_SUPPLY, // Secure a water supply crucial for a settlement's survival
|
||||
TASK_DEFEND_BORDERS, // Defend the borders of a kingdom or territory from incursions
|
||||
TASK_REPAIR_DOCKS, // Repair docks to ensure ships can safely dock and unload supplies
|
||||
TASK_RECLAIM_ANCIENT_CITADEL, // Reclaim an ancient citadel taken over by enemies
|
||||
TASK_DEFEND_PORT, // Defend a port city from enemy naval forces
|
||||
TASK_CONDUCT_SAFETY_INSPECTION, // Conduct a safety inspection of critical infrastructure
|
||||
TASK_REPAIR_DAMAGED_MONUMENT, // Repair a damaged monument of cultural or historical significance
|
||||
TASK_CONSTRUCT_BARRIERS, // Construct barriers to slow down or block enemy movement
|
||||
TASK_DEFEND_STRONGHOLD, // Defend a stronghold from a major enemy offensive
|
||||
TASK_REPEL_NAVAL_INVASION, // Repel a naval invasion threatening coastal defenses
|
||||
TASK_ESTABLISH_TRADE_AGREEMENT, // Establish a trade agreement between distant kingdoms
|
||||
TASK_RESCUE_ABANDONED_CHILDREN, // Rescue abandoned children left in a dangerous area
|
||||
TASK_REINFORCE_CITY_WALLS, // Reinforce city walls to withstand a prolonged siege
|
||||
TASK_CONDUCT_COVERT_OP, // Conduct a covert operation behind enemy lines
|
||||
TASK_DEFEND_HIGHLANDS, // Defend the highlands from encroaching enemy forces
|
||||
TASK_RECOVER_LOST_ARTIFACT, // Recover a lost artifact with significant power
|
||||
TASK_CONSTRUCT_MOUNTAIN_PASS, // Construct a mountain pass to improve travel and trade routes
|
||||
TASK_RESCUE_ENDANGERED_ANIMALS, // Rescue endangered animals from poachers or habitat destruction
|
||||
TASK_DEFEND_AGAINST_RAID, // Defend a settlement against a raid from bandits or enemy troops
|
||||
TASK_RECLAIM_STOLEN_PROPERTY, // Reclaim stolen property taken by criminals or rival factions
|
||||
TASK_REPAIR_CITADEL_DEFENSES, // Repair the defenses of a citadel under threat
|
||||
TASK_CONDUCT_STRATEGIC_RETREAT, // Conduct a strategic retreat to regroup and fortify
|
||||
TASK_REPEL_FOREST_INVASION, // Repel an invasion of hostile forces in a forested area
|
||||
TASK_RESCUE_TRAPPED_SOLDIERS, // Rescue soldiers trapped behind enemy lines or in a collapsed structure
|
||||
TASK_DEFEND_HILLTOP, // Defend a hilltop position from enemy forces trying to gain the high ground
|
||||
TASK_ESTABLISH_BORDER_OUTPOST, // Establish an outpost on the border to monitor enemy movements
|
||||
TASK_RETRIEVE_ABANDONED_SUPPLIES, // Retrieve abandoned supplies left in a dangerous location
|
||||
TASK_DEFEND_WINDMILL, // Defend a windmill from being sabotaged or destroyed
|
||||
TASK_RESCUE_DOWNED_PILOT, // Rescue a downed pilot stranded in enemy territory
|
||||
TASK_REINFORCE_FORTIFIED_POSITION, // Reinforce a fortified position to prepare for a heavy attack
|
||||
TASK_CONSTRUCT_NAVAL_BASE, // Construct a naval base to strengthen maritime defenses
|
||||
TASK_SECURE_FOREST_EDGE, // Secure the edge of a forest to prevent enemy infiltration
|
||||
TASK_RECOVER_ROYAL_HEIRLOOM, // Recover a royal heirloom of immense value and significance
|
||||
TASK_DEFEND_MOUNTAIN_PASS, // Defend a mountain pass from being overtaken by enemy forces
|
||||
TASK_REPAIR_BARRACKS, // Repair barracks to house soldiers or refugees
|
||||
TASK_ESTABLISH_SUPPLY_DEPOT, // Establish a supply depot to support ongoing operations
|
||||
TASK_REPEL_SEA_MONSTER, // Repel a sea monster attacking ships or coastal settlements
|
||||
TASK_RESCUE_ABANDONED_ANIMALS, // Rescue abandoned animals left in a dangerous area
|
||||
TASK_DEFEND_OUTSKIRTS, // Defend the outskirts of a town or city from enemy raids
|
||||
TASK_RECOVER_MAGIC_CRYSTAL, // Recover a magic crystal stolen by enemies
|
||||
TASK_CONDUCT_NIGHT_RAID, // Conduct a night raid on an enemy camp or supply line
|
||||
TASK_REPEL_BORDER_INCURSION, // Repel an enemy incursion across the border
|
||||
TASK_REPAIR_RIVER_DAM, // Repair a river dam to prevent flooding
|
||||
TASK_SECURE_ANCIENT_TOMB, // Secure an ancient tomb from grave robbers or enemies
|
||||
TASK_RESCUE_CIVILIANS_FROM_CONFLICT_ZONE, // Rescue civilians caught in a conflict zone
|
||||
TASK_DEFEND_TRADE_ROUTE, // Defend a trade route from bandits or hostile forces
|
||||
TASK_RECOVER_ENEMY_PLANS, // Recover enemy plans to prevent them from executing their strategy
|
||||
TASK_CONSTRUCT_OBSERVATION_POST, // Construct an observation post to monitor enemy activity
|
||||
TASK_SECURE_SECRET_PASSAGE, // Secure a secret passage to ensure safe travel or escape
|
||||
TASK_REPEL_INVADING_ARMY, // Repel an invading army from your homeland
|
||||
TASK_REPAIR_FISHING_VILLAGE, // Repair a fishing village after a storm or raid
|
||||
TASK_RESCUE_PRISONERS_OF_WAR, // Rescue prisoners of war held by the enemy
|
||||
TASK_DEFEND_COASTLINE, // Defend a coastline from enemy landings or raids
|
||||
TASK_CONDUCT_COUNTERINTELLIGENCE, // Conduct counterintelligence to prevent enemy espionage
|
||||
TASK_REINFORCE_SEIGE_DEFENSES, // Reinforce defenses during an ongoing siege
|
||||
TASK_CONSTRUCT_SUPPLY_LINE, // Construct a supply line to maintain troop morale and effectiveness
|
||||
TASK_RESOLVE_DISPUTE_OVER_TERRITORY, // Resolve a dispute between factions over territorial claims
|
||||
TASK_REPEL_NIGHT_ATTACK, // Repel a night attack by enemy forces
|
||||
TASK_REPAIR_TEMPLE_SHRINE, // Repair a temple or shrine damaged by conflict or disaster
|
||||
TASK_DEFEND_MOUNTAIN_FORTRESS, // Defend a mountain fortress from a major offensive
|
||||
TASK_CONDUCT_LONG_RANGE_RECONNAISSANCE, // Conduct long-range reconnaissance to gather critical intel
|
||||
TASK_RECLAIM_ABANDONED_FORT, // Reclaim an abandoned fort from enemies or wild creatures
|
||||
TASK_RESCUE_SHIPWRECKED_CREW, // Rescue a crew stranded after a shipwreck
|
||||
TASK_DEFEND_WAR_CAMP, // Defend a war camp from enemy sabotage or attack
|
||||
TASK_CONSTRUCT_WATCHTOWER_NETWORK, // Construct a network of watchtowers for enhanced surveillance
|
||||
TASK_REPEL_SKIRMISHERS, // Repel skirmishers attempting to harass your forces
|
||||
TASK_REPAIR_BATTLEFIELD_DEFENSES, // Repair battlefield defenses during or after an engagement
|
||||
TASK_RECOVER_LOST_SCOUTS, // Recover scouts who have been lost or captured during a mission
|
||||
TASK_DEFEND_HARBOR, // Defend a harbor from a naval or amphibious assault
|
||||
TASK_ESTABLISH_SAFEHOUSE, // Establish a safehouse for intelligence or resistance operations
|
||||
TASK_REINFORCE_BATTALION, // Reinforce a battalion under heavy attack or low on morale
|
||||
TASK_REPEL_AMBUSH, // Repel an ambush set by enemies during a march or expedition
|
||||
TASK_REPAIR_TREBUCHET, // Repair a trebuchet damaged during siege warfare
|
||||
TASK_DEFEND_TRADING_POST, // Defend a trading post from bandits or hostile forces
|
||||
TASK_RESCUE_ARTISAN, // Rescue an artisan kidnapped to force them into making weapons or art
|
||||
TASK_CONSTRUCT_BATTERY, // Construct a battery of artillery or defensive weapons
|
||||
TASK_RECOVER_STOLEN_DOCUMENTS, // Recover documents stolen by enemy spies or thieves
|
||||
TASK_DEFEND_BARRACKS, // Defend barracks housing soldiers or important personnel
|
||||
TASK_SECURE_ESCAPE_ROUTE, // Secure an escape route for retreating forces or refugees
|
||||
TASK_REPEL_DESERT_RAIDERS, // Repel raiders attacking from a desert region
|
||||
TASK_REPAIR_CATAPULT, // Repair a catapult damaged in combat or through sabotage
|
||||
TASK_DEFEND_DESERT_OASIS, // Defend a desert oasis from hostile forces or nomads
|
||||
TASK_CONDUCT_TUNNEL_INSPECTION, // Conduct an inspection of tunnels to prevent collapses or enemy use
|
||||
TASK_RECOVER_WOUNDED_ALLIES, // Recover wounded allies from the battlefield
|
||||
TASK_CONSTRUCT_TRENCH_SYSTEM, // Construct a trench system for defense or assault preparation
|
||||
TASK_SECURE_MOUNTAIN_PEAK, // Secure a mountain peak for observation or tactical advantage
|
||||
TASK_REPEL_SWAMP_CREATURES, // Repel creatures attacking from a nearby swamp
|
||||
TASK_DEFEND_FOREST_GROVE, // Defend a forest grove sacred to local inhabitants or druidic orders
|
||||
TASK_RESCUE_HISTORIAN, // Rescue a historian who has been captured or lost in a dangerous area
|
||||
TASK_CONSTRUCT_DEFENSIVE_FORTIFICATIONS, // Construct defensive fortifications to protect against invasions
|
||||
TASK_REPEL_WILDERNESS_ATTACK, // Repel an attack by hostile forces emerging from the wilderness
|
||||
TASK_REPAIR_RAMPARTS, // Repair ramparts damaged during an ongoing siege or conflict
|
||||
TASK_SECURE_STRATEGIC_HILL, // Secure a hilltop offering a strategic advantage in battle
|
||||
TASK_DEFEND_BORDER_FORT, // Defend a fort on the border of enemy territory
|
||||
TASK_RESOLVE_CONFLICT_BETWEEN_CLANS, // Resolve a conflict between rival clans threatening regional stability
|
||||
TASK_REPEL_FOREST_RAIDERS, // Repel raiders attacking from the forest or jungle
|
||||
TASK_CONDUCT_DEEP_RECONNAISSANCE, // Conduct deep reconnaissance into enemy territory
|
||||
TASK_RECLAIM_OCCUPIED_TERRITORY, // Reclaim territory occupied by enemy forces or hostile creatures
|
||||
TASK_SECURE_RIVERBANK, // Secure a riverbank to prevent enemy crossings or incursions
|
||||
TASK_DEFEND_SECRET_ENTRANCE, // Defend a secret entrance to a hidden base or stronghold
|
||||
TASK_RECOVER_FORGOTTEN_KNOWLEDGE, // Recover knowledge lost to time or hidden in ancient texts
|
||||
TASK_REPEL_MOUNTAIN_BANDITS, // Repel bandits attacking from the mountains
|
||||
TASK_RESCUE_MYSTIC, // Rescue a mystic or seer captured by enemies or cultists
|
||||
TASK_CONSTRUCT_SPY_NETWORK, // Construct a network of spies to gather intelligence across a region
|
||||
TASK_DEFEND_ANCIENT_TEMPLE, // Defend an ancient temple from looters or invading forces
|
||||
TASK_REPAIR_ANCIENT_MONUMENT, // Repair an ancient monument of cultural or historical significance
|
||||
TASK_SECURE_FOREST_PASSAGE, // Secure a passage through a dense or enchanted forest
|
||||
TASK_RECOVER_STOLEN_TREASURE, // Recover treasure stolen by thieves or rival factions
|
||||
TASK_REPEL_JUNGLE_BEASTS, // Repel beasts attacking from a jungle or tropical region
|
||||
TASK_DEFEND_ANCIENT_LIBRARY, // Defend an ancient library from being ransacked or destroyed
|
||||
TASK_CONSTRUCT_FORTRESS_GATE, // Construct a gate to secure a fortress or walled city
|
||||
TASK_RESOLVE_CIVIL_UPRISING, // Resolve a civil uprising threatening stability in a city or region
|
||||
TASK_REPEL_MARAUDERS, // Repel marauders attacking villages or supply lines
|
||||
TASK_CONDUCT_SEARCH_AND_DESTROY, // Conduct a search and destroy mission against a specific target
|
||||
TASK_RECOVER_LIFESAVING_MEDICINE, // Recover life-saving medicine from a dangerous or remote location
|
||||
TASK_DEFEND_SHIPPING_LANES, // Defend shipping lanes from pirates or enemy navies
|
||||
TASK_RESCUE_CAPTURED_LEADER, // Rescue a captured leader before they are executed or turned against you
|
||||
TASK_SECURE_FORTIFIED_CAMP, // Secure a camp heavily fortified but under threat of attack
|
||||
TASK_REPEL_ENEMY_RAID, // Repel an enemy raid on your base or territory
|
||||
TASK_REPAIR_BREACHED_WALL, // Repair a wall breached by enemy forces during an assault
|
||||
TASK_DEFEND_WATER_SUPPLY, // Defend a water supply from being poisoned or cut off
|
||||
TASK_RECOVER_DANGEROUS_ARTIFACT, // Recover an artifact that could cause great harm if left in the wrong hands
|
||||
TASK_CONDUCT_RECON_MISSION, // Conduct a reconnaissance mission to gather vital information
|
||||
TASK_RECLAIM_ABANDONED_MINE, // Reclaim an abandoned mine overrun by enemies or dangerous creatures
|
||||
TASK_REPEL_WINTER_OFFENSIVE, // Repel a winter offensive launched by the enemy
|
||||
TASK_DEFEND_TRADING_HUB, // Defend a trading hub crucial for economic stability
|
||||
TASK_SECURE_SECRET_DOCUMENTS, // Secure documents that contain secret or sensitive information
|
||||
TASK_RECOVER_STOLEN_HORSES, // Recover horses stolen by bandits or enemy forces
|
||||
TASK_CONSTRUCT_WATCHTOWER_AT_BORDER, // Construct a watchtower at the border for surveillance and defense
|
||||
TASK_REPEL_NAVAL_RAIDERS, // Repel raiders attacking from the sea or river
|
||||
TASK_DEFEND_BORDER_WATCHTOWER, // Defend a border watchtower from being overrun by enemy forces
|
||||
TASK_RESCUE_CAPTIVE_CHILDREN, // Rescue children taken captive by enemies or slavers
|
||||
TASK_RECOVER_STOLEN_IDOLS, // Recover idols stolen from a temple or sacred site
|
||||
TASK_DEFEND_MINING_OPERATION, // Defend a mining operation from hostile forces or sabotage
|
||||
TASK_CONSTRUCT_SIEGE_ENGINE, // Construct a siege engine for an upcoming battle
|
||||
TASK_REPEL_ENEMY_CHAMPION, // Repel an enemy champion challenging your forces or territory
|
||||
TASK_SECURE_SMUGGLER_ROUTE, // Secure a smuggler's route to prevent illegal trade or enemy infiltration
|
||||
TASK_DEFEND_TOWN_HALL, // Defend the town hall from an insurrection or attack
|
||||
TASK_RESCUE_ABANDONED_WAGON, // Rescue a wagon left behind in enemy territory or dangerous conditions
|
||||
TASK_RECOVER_MAGIC_AMULET, // Recover a magic amulet of significant power or importance
|
||||
TASK_REPEL_BARBARIAN_RAID, // Repel a raid by barbarian tribes attacking a settlement or outpost
|
||||
TASK_DEFEND_SUPPLY_CONVOY, // Defend a supply convoy transporting crucial goods
|
||||
TASK_RECLAIM_HOLY_SITE, // Reclaim a holy site taken over by enemies or desecrated by invaders
|
||||
TASK_SECURE_TRADE_AGREEMENT, // Secure a trade agreement to strengthen economic ties between regions
|
||||
TASK_REPEL_ENEMY_VANGUARD, // Repel an enemy vanguard seeking to establish a foothold
|
||||
TASK_DEFEND_FARM, // Defend a farm from being raided or destroyed
|
||||
TASK_RECOVER_LAWLESS_TERRITORY, // Recover a territory overrun by outlaws or bandits
|
||||
TASK_REPAIR_FORTRESS_WALL, // Repair a damaged fortress wall to prevent further breaches
|
||||
TASK_CONSTRUCT_CITY_GATE, // Construct a gate to secure a city or major settlement
|
||||
TASK_REPEL_ENEMY_INVADERS, // Repel enemy invaders from your territory or homeland
|
||||
TASK_DEFEND_MOUNTAIN_OUTPOST, // Defend a mountain outpost from being overtaken by enemies
|
||||
TASK_RECLAIM_ANCIENT_WEAPON, // Reclaim an ancient weapon lost or hidden in enemy territory
|
||||
TASK_SECURE_VALLEY_PASSAGE, // Secure a valley passage critical for movement or trade
|
||||
TASK_REPEL_SWAMP_RAIDERS, // Repel raiders attacking from a swampy region
|
||||
TASK_CONSTRUCT_HILL_FORT, // Construct a fort on a hill for strategic defense
|
||||
TASK_REPAIR_MILITARY_BASE, // Repair a military base damaged by enemy action
|
||||
TASK_DEFEND_ANCIENT_FORT, // Defend an ancient fort from modern threats
|
||||
TASK_RECOVER_ENCHANTED_TALISMAN, // Recover an enchanted talisman from a dangerous location
|
||||
TASK_REPEL_NOMADIC_RAID, // Repel a raid by nomadic tribes
|
||||
TASK_SECURE_OLD_CASTLE, // Secure an old castle to use as a stronghold
|
||||
TASK_CONDUCT_EVACUATION, // Conduct an evacuation of civilians from a dangerous area
|
||||
TASK_DEFEND_RURAL_VILLAGE, // Defend a rural village from raiders or invaders
|
||||
TASK_RETRIEVE_HIDDEN_TREASURE, // Retrieve treasure hidden in a well-guarded location
|
||||
TASK_CONSTRUCT_BUNKERS, // Construct bunkers for troops or civilians
|
||||
TASK_REPAIR_BATTLEFIELD_EQUIPMENT, // Repair equipment used in recent battles
|
||||
TASK_DEFEND_TEMPLE, // Defend a temple from desecration or attack
|
||||
TASK_REPEL_INVADING_HORDES, // Repel hordes of enemies attacking from multiple directions
|
||||
TASK_SECURE_SUPPLY_ROUTE, // Secure a route used for transporting supplies
|
||||
TASK_RECOVER_ANTIQUITIES, // Recover valuable antiquities from thieves or looters
|
||||
TASK_DEFEND_TREASURE_VAULT, // Defend a vault containing valuable treasure
|
||||
TASK_CONSTRUCT_FIELD_DEFENSES, // Construct defenses in an open field to resist an assault
|
||||
TASK_REPAIR_OLD_WATCHTOWER, // Repair an old watchtower for improved surveillance
|
||||
TASK_REPEL_SIEGE_WEAPONS, // Repel enemy siege weapons targeting your defenses
|
||||
TASK_SECURE_ENCHANTED_FOREST, // Secure a forest with magical properties from intruders
|
||||
TASK_DEFEND_REMOTE_OUTPOST, // Defend a remote outpost from encroaching enemies
|
||||
TASK_REPAIR_MAGE_TOWER, // Repair a tower used by mages for their magical operations
|
||||
TASK_RECOVER_VITAL_SUPPLIES, // Recover essential supplies lost or stolen in conflict
|
||||
TASK_CONSTRUCT_DEFENSIVE_GATES, // Construct gates to enhance the defense of a fortification
|
||||
TASK_REPEL_CLAN_WARLORD, // Repel a warlord leading a clan assault
|
||||
TASK_DEFEND_HISTORICAL_SITE, // Defend a site of historical significance from destruction
|
||||
TASK_REPAIR_FORTIFIED_WALLS, // Repair walls of a fortification to restore its defensive capability
|
||||
TASK_SECURE_TACTICAL_POSITION, // Secure a position of tactical importance in an ongoing conflict
|
||||
TASK_RECOVER_STOLEN_EQUIPMENT, // Recover equipment stolen by enemies or thieves
|
||||
TASK_DEFEND_CIVILIAN_CONVOY, // Defend a convoy of civilians traveling through dangerous areas
|
||||
TASK_CONSTRUCT_REINFORCED_BARRICADES, // Construct barricades reinforced for extra protection
|
||||
TASK_REPEL_WILD_CREATURES, // Repel wild creatures threatening settlements or supply lines
|
||||
TASK_DEFEND_IMPORTANT_BRIDGE, // Defend a bridge critical for transportation and defense
|
||||
TASK_RECOVER_ENEMY_WEAPONS, // Recover weapons lost or captured from the enemy
|
||||
TASK_SECURE_HIDDEN_LAIR, // Secure a hidden lair from intruders or hostile forces
|
||||
TASK_REPAIR_DAMAGED_PALACE, // Repair a palace damaged by conflict or disaster
|
||||
TASK_DEFEND_CULTURAL_CENTER, // Defend a cultural center from attack or vandalism
|
||||
TASK_CONSTRUCT_SHIELD_WALL, // Construct a shield wall to protect against a siege or assault
|
||||
TASK_REPEL_TROLLS, // Repel trolls attacking from mountainous or rocky terrain
|
||||
TASK_RECOVER_ANCIENT_SCROLLS, // Recover ancient scrolls from a protected location
|
||||
TASK_DEFEND_FOREST_VILLAGE, // Defend a village situated within a dense forest from invaders
|
||||
TASK_REPAIR_MYSTIC_OBELISK, // Repair a mystic obelisk of significance to local magical traditions
|
||||
TASK_CONSTRUCT_FORTRESS_TOWER, // Construct a tower within a fortress for better defense and observation
|
||||
TASK_SECURE_ABANDONED_OUTPOST, // Secure an outpost that was previously abandoned
|
||||
TASK_DEFEND_NATIONAL_MONUMENT, // Defend a monument of national importance from damage or theft
|
||||
TASK_RECOVER_HEIRLOOM_WEAPON, // Recover a weapon of significant familial or historical value
|
||||
TASK_CONDUCT_STRATEGIC_SURVEY, // Conduct a survey to assess strategic locations and conditions
|
||||
TASK_REPEL_DARK_MAGIC_USERS, // Repel dark magic users attempting to infiltrate or attack
|
||||
TASK_SECURE_HIDDEN_TREASURE, // Secure treasure hidden in a secret location
|
||||
TASK_DEFEND_RITUAL_SITE, // Defend a site used for important rituals from disruption or attack
|
||||
TASK_REPAIR_MAGICAL_BARRIER, // Repair a magical barrier protecting a critical location
|
||||
TASK_CONSTRUCT_ARTILLERY_EMPLACEMENTS, // Construct emplacements for artillery to enhance defensive capabilities
|
||||
TASK_RECOVER_ANCESTRAL_TREASURE, // Recover treasure passed down through generations from a safe location
|
||||
TASK_DEFEND_MYSTICAL_SPRING, // Defend a mystical spring with significant magical properties
|
||||
TASK_REPAIR_AIRSHIP, // Repair an airship damaged during aerial conflict or travel
|
||||
TASK_SECURE_AIRSPACE, // Secure airspace from aerial threats or intrusions
|
||||
TASK_CONDUCT_MASS_EVACUATION, // Conduct an evacuation of a large population from a threatened area
|
||||
TASK_DEFEND_VITAL_INFRASTRUCTURE, // Defend critical infrastructure from sabotage or attack
|
||||
TASK_RECOVER_DAMAGED_ARTIFACTS, // Recover artifacts damaged during conflicts or raids
|
||||
TASK_CONSTRUCT_REPAIR_STATIONS, // Construct stations for repairing equipment or fortifications
|
||||
TASK_REPEL_CULT_INVADERS, // Repel invaders from a cult or religious faction
|
||||
TASK_SECURE_ANCIENT_TREASURE_TROVE, // Secure a trove of ancient treasures from being plundered
|
||||
TASK_DEFEND_ELITE_TROOPS, // Defend a unit of elite troops from enemy assault or capture
|
||||
TASK_REPAIR_FORTRESS_CANNONS, // Repair cannons within a fortress to restore their effectiveness
|
||||
TASK_CONSTRUCT_REINFORCED_BUNKERS, // Construct bunkers with additional reinforcement for strategic protection
|
||||
TASK_RECOVER_ILLUMINATED_MANUSCRIPTS, // Recover manuscripts with illuminated texts of great value
|
||||
TASK_DEFEND_SECRET_BASE, // Defend a base hidden from enemy eyes from being discovered or attacked
|
||||
TASK_REPAIR_DEFENSIVE_TURRETS, // Repair turrets used for defending against enemy attacks
|
||||
TASK_SECURE_HIGHLY_ENCHANTED_ITEM, // Secure an item of significant magical enchantment
|
||||
TASK_CONDUCT_ELITE_STRIKE_MISSION, // Conduct a high-risk strike mission with elite operatives
|
||||
TASK_DEFEND_AGAINST_MAGIC_ATTACKS, // Defend against magical attacks from enemy spellcasters
|
||||
TASK_RECOVER_HISTORICAL_RELICS, // Recover relics of historical importance from a secure location
|
||||
TASK_REPAIR_ANCIENT_DEFENSES, // Repair ancient defenses to restore their original protective capability
|
||||
TASK_CONSTRUCT_MAGICALLY_ENCHANTED_BARRIERS, // Construct barriers with magical enchantments for enhanced defense
|
||||
TASK_DEFEND_CULTURAL_HERITAGE, // Defend a site of cultural heritage from being attacked or damaged
|
||||
TASK_SECURE_VITAL_MAGIC_ARTIFACT, // Secure a magic artifact crucial to your forces or plans
|
||||
TASK_REPAIR_DILAPIDATED_KEEP, // Repair a keep that has fallen into disrepair and disuse
|
||||
TASK_DEFEND_CRUCIAL_RESOURCE, // Defend a resource essential for survival or strategic advantage
|
||||
TASK_RECOVER_FAMOUS_BATTLE_STANDARD, // Recover a battle standard of historic significance
|
||||
TASK_CONSTRUCT_TACTICAL_FORTIFICATIONS, // Construct fortifications designed for tactical advantage in battle
|
||||
TASK_SECURE_ENCHANTED_WEAPONS, // Secure weapons imbued with enchantments from falling into enemy hands
|
||||
TASK_REPEL_ARMORED_RAIDERS, // Repel raiders equipped with heavy armor and advanced weaponry
|
||||
TASK_DEFEND_RITUAL_ALTAR, // Defend an altar used for significant rituals from desecration
|
||||
TASK_RECOVER_MAGICAL_ENCHANTMENTS, // Recover enchantments lost or stolen from magical artifacts
|
||||
TASK_REPAIR_UNDERGROUND_BUNKERS, // Repair bunkers located underground to ensure their functionality
|
||||
TASK_CONSTRUCT_MAGICAL_OBELISKS, // Construct obelisks with magical properties for enhanced defense or power
|
||||
TASK_DEFEND_VITAL_WAREHOUSE, // Defend a warehouse holding essential supplies or equipment
|
||||
TASK_RECOVER_ANCESTRAL_ARTIFACTS, // Recover artifacts with ancestral or cultural importance
|
||||
TASK_REPAIR_ENCHANTED_FORGE, // Repair a forge used for creating enchanted items
|
||||
TASK_SECURE_COVERT_OPERATION_BASE, // Secure a base used for covert operations and intelligence gathering
|
||||
TASK_DEFEND_COVERT_MEETING_PLACE, // Defend a location used for secret meetings from discovery or attack
|
||||
TASK_RECOVER_ANCIENT_TEXTS, // Recover ancient texts of great knowledge
|
||||
TASK_CONSTRUCT_ELITE_DEFENSIVE_LINE, // Construct a defensive line designed to withstand elite enemy forces
|
||||
TASK_DEFEND_VITAL_TRANSPORT_HUB, // Defend a transport hub crucial for logistics and troop movement
|
||||
TASK_SECURE_MYSTICAL_ARTIFACTS, // Secure artifacts with mystical properties from being stolen or destroyed
|
||||
TASK_RECOVER_COVERT_DOCUMENTS, // Recover documents related to secret operations or intelligence
|
||||
TASK_REPAIR_OBSOLETE_TURRETS, // Repair outdated turrets to bring them back into operational use
|
||||
TASK_DEFEND_ENCHANTED_LIBRARY, // Defend a library containing powerful or magical knowledge from attack
|
||||
TASK_CONSTRUCT_RITUAL_DEFENSES, // Construct defenses specifically designed to protect sacred or ritual sites
|
||||
TASK_REPEL_INVASION_FROM_THE_SEA, // Repel an invasion force approaching by sea
|
||||
TASK_SECURE_ANCIENT_TEMPLE_GATES, // Secure the gates of an ancient temple to prevent unauthorized access
|
||||
TASK_RECOVER_SCARCE_RESOURCES, // Recover resources that are rare or critical for your operations
|
||||
TASK_DEFEND_LANDMARK_STRUCTURE, // Defend a landmark structure of great significance from damage or occupation
|
||||
TASK_CONSTRUCT_FORTIFIED_PERIMETER, // Construct a fortified perimeter around a key installation or settlement
|
||||
TASK_REPAIR_CRUCIAL_COMMUNICATIONS, // Repair communication systems vital for coordinating defense or operations
|
||||
TASK_SECURE_ENCHANTED_BARRIERS, // Secure barriers enhanced with magical protections from being breached
|
||||
TASK_DEFEND_AIRBORNE_OPERATIONS, // Defend operations involving airborne units or assets from enemy interference
|
||||
TASK_RECOVER_HISTORICAL_STATUES, // Recover statues of historical importance from potential damage or theft
|
||||
TASK_REPAIR_MAGICAL_CONDUITS, // Repair conduits used to channel magical energy or spells
|
||||
TASK_CONSTRUCT_REINFORCED_TRENCHE, // Construct a trench with additional reinforcements for better protection
|
||||
TASK_SECURE_MYSTICAL_FOREST, // Secure a forest imbued with mystical properties from intruders
|
||||
TASK_DEFEND_KEY_TRADING_POST, // Defend a trading post crucial for commerce and supply routes
|
||||
TASK_RECOVER_ANCIENT_SCROLLS, // Recover ancient scrolls containing important historical or magical information
|
||||
TASK_CONDUCT_HIGH_STAKES_NEGOTIATIONS, // Conduct negotiations of great importance to resolve conflicts or secure alliances
|
||||
TASK_DEFEND_AGAINST_NECROMANCY, // Defend against necromantic forces or magic targeting your forces or territory
|
||||
TASK_REPAIR_EARTHEN_WALLS, // Repair earthen walls that have been damaged or breached
|
||||
TASK_SECURE_HIDDEN_MINE, // Secure a hidden mine containing valuable resources or artifacts
|
||||
TASK_RECOVER_WOUNDED_VETERANS, // Recover and provide aid to wounded veterans from recent conflicts
|
||||
TASK_DEFEND_ANCIENT_SHRINE, // Defend an ancient shrine from desecration or attack
|
||||
TASK_CONSTRUCT_MAGICAL_WARDS, // Construct wards to protect against magical attacks or intrusions
|
||||
TASK_REPAIR_HISTORICAL_BUILDINGS, // Repair buildings of historical importance damaged in recent events
|
||||
TASK_SECURE_FORTIFIED_OUTPOST, // Secure an outpost with fortifications to prevent enemy capture
|
||||
TASK_DEFEND_VITAL_CROSSROADS, // Defend a crossroads critical for movement and supply routes
|
||||
TASK_RECOVER_DAMAGED_RITUAL_ARTIFACTS, // Recover artifacts used in rituals that have been damaged or lost
|
||||
TASK_REPAIR_ENCHANTED_GATES, // Repair gates enhanced with magical protections to restore their functionality
|
||||
TASK_CONSTRUCT_STRATEGIC_OBSERVATION_POSTS, // Construct posts for strategic observation of enemy movements and positions
|
||||
TASK_SECURE_VITAL_WEAPONSTOCKS, // Secure stocks of vital weapons from being seized or destroyed
|
||||
TASK_DEFEND_CRUCIAL_FORTIFICATION, // Defend a fortification crucial for maintaining control over a region
|
||||
TASK_RECOVER_ANCIENT_WEAPONS, // Recover weapons of ancient origin with significant power or historical value
|
||||
TASK_REPAIR_CIVILIAN_INFRASTRUCTURE, // Repair infrastructure essential for civilian life and support
|
||||
TASK_SECURE_CRITICAL_LANDMARKS, // Secure landmarks of great strategic or symbolic importance from threat
|
||||
TASK_DEFEND_AGAINST_SPY_INTRUSION, // Defend against espionage attempts targeting sensitive areas or information
|
||||
TASK_RECOVER_SENSITIVE_DATA, // Recover data critical to operations or security from compromised sources
|
||||
TASK_CONSTRUCT_ENCHANTED_CAVERN_DEFENSES, // Construct defenses within a cavern with magical enchantments
|
||||
TASK_REPAIR_TREASURE_VAULTS, // Repair vaults used to store valuable treasures and artifacts
|
||||
TASK_SECURE_GREAT_LIBRARY, // Secure a large library holding extensive and valuable knowledge
|
||||
TASK_DEFEND_INFLUENTIAL_LEADER, // Defend a leader of great influence from threats or attempts on their life
|
||||
TASK_RECOVER_CRITICAL_MEDICAL_SUPPLIES, // Recover medical supplies essential for treatment and recovery
|
||||
TASK_REPAIR_DAMAGED_BATTLEFIELD_STRATEGY, // Repair and adjust strategies used on the battlefield based on recent damage
|
||||
TASK_CONSTRUCT_ELITE_PROTECTIVE_ARMOR, // Construct armor designed for elite troops or high-value targets
|
||||
TASK_SECURE_ANCIENT_SECRET_TREASURE, // Secure treasure hidden in ancient locations of historical importance
|
||||
TASK_DEFEND_HIDDEN_MILITARY_BASE, // Defend a secret military base from discovery or attack
|
||||
TASK_RECOVER_DAMAGED_MAGIC_ITEMS, // Recover magic items damaged during recent conflicts or raids
|
||||
TASK_REPAIR_BATTLEFIELD_ARTIFACTS, // Repair artifacts found on the battlefield essential for historical or strategic reasons
|
||||
TASK_CONSTRUCT_PROTECTIVE_RUNES, // Construct runes for protection against magical or physical threats
|
||||
TASK_SECURE_LEGENDARY_SITES, // Secure sites of legendary significance from threats or exploitation
|
||||
TASK_DEFEND_STRATEGIC_TRADE_ROUTE, // Defend a trade route vital for commerce and resource distribution
|
||||
TASK_RECOVER_MYSTICAL_ARTIFACTS, // Recover artifacts with mystical significance from dangerous locations
|
||||
TASK_REPAIR_CRITICAL_INDUSTRIAL_EQUIPMENT, // Repair equipment crucial for industrial operations and production
|
||||
TASK_CONSTRUCT_RITUALISTIC_DEFENSES, // Construct defenses based on ritualistic or magical designs for enhanced protection
|
||||
TASK_SECURE_HIDDEN_MYSTICAL_ARTIFACTS, // Secure mystical artifacts hidden from general knowledge or access
|
||||
TASK_DEFEND_CULTURAL_INSTITUTIONS, // Defend institutions dedicated to culture and the arts from attack or damage
|
||||
TASK_RECOVER_DAMAGED_STATUES, // Recover and restore statues of artistic or historical significance
|
||||
TASK_REPAIR_DEMOLISHED_FORTIFICATIONS, // Repair fortifications that have been demolished or heavily damaged
|
||||
TASK_CONSTRUCT_UNDERGROUND_BUNKERS, // Construct bunkers underground to provide protection and concealment
|
||||
TASK_SECURE_HISTORICAL_SITES, // Secure sites of historical importance from damage, theft, or unauthorized access
|
||||
TASK_DEFEND_MYSTICAL_CAVES, // Defend caves with mystical properties from intrusion or desecration
|
||||
TASK_RECOVER_EXPERT_CRAFTSMAN, // Recover a skilled craftsman who can create or repair valuable items
|
||||
TASK_REPAIR_ANCIENT_DEFENSIVE_STRUCTURES, // Repair ancient structures designed for defensive purposes
|
||||
TASK_CONSTRUCT_ENCHANTED_PROTECTIVE_BARRIERS, // Construct barriers enhanced with enchantments for superior protection
|
||||
TASK_SECURE_ECONOMICALLY_VITAL_RESOURCES, // Secure resources critical for economic stability and growth
|
||||
TASK_DEFEND_AGAINST_MAGICAL_BEASTS, // Defend against beasts with magical properties or abilities
|
||||
TASK_RECOVER_ENCHANTED_SCROLLS, // Recover scrolls imbued with magic from secure locations
|
||||
TASK_REPAIR_HIGH_PRIORITY_EQUIPMENT, // Repair equipment deemed high priority for ongoing operations
|
||||
TASK_CONSTRUCT_FORTIFIED_RESEARCH_LAB, // Construct a research lab with fortified defenses for scientific or magical work
|
||||
TASK_SECURE_MAGICALLY_ENHANCED_TREASURE, // Secure treasure with magical enhancements from theft or damage
|
||||
TASK_DEFEND_TACTICAL_OUTPOSTS, // Defend outposts critical for tactical operations and defense
|
||||
TASK_RECOVER_RARE_ALCHEMICAL_REAGENTS, // Recover reagents used in alchemy that are rare or essential
|
||||
TASK_REPAIR_PROTECTIVE_MAGIC_CONDUITS, // Repair conduits used to channel protective magic or enchantments
|
||||
TASK_CONSTRUCT_ADVANCED_DEFENSIVE_FORTIFICATIONS, // Construct advanced fortifications for improved defense against formidable threats
|
||||
TASK_DEFEND_ENCHANTED_SPRING, // Defend a spring with magical properties from exploitation or attack
|
||||
TASK_RECOVER_LOST_CIVILIZATION_ARTIFACTS, // Recover artifacts from a lost civilization of great historical or magical significance
|
||||
TASK_REPAIR_ADVANCED_SEA_DEFENSES, // Repair advanced defenses designed to protect against sea-based attacks
|
||||
TASK_CONSTRUCT_SECURE_RITUAL_CHAMBERS, // Construct chambers designed for performing high-security rituals
|
||||
TASK_SECURE_CRITICAL_MAGE_TOWER, // Secure a mage tower vital for magical operations and research
|
||||
TASK_DEFEND_HEAVILY_FORTIFIED_CITY, // Defend a city with extensive fortifications from sieges or attacks
|
||||
TASK_RECOVER_ANCIENT_TECHNOLOGY, // Recover technology of ancient origin with significant power or utility
|
||||
TASK_REPAIR_EXPERIMENTAL_WEAPONS, // Repair weapons of experimental design used for cutting-edge combat
|
||||
TASK_CONSTRUCT_PROTECTIVE_ENCHANTMENTS, // Construct enchantments to protect key locations or items from magical harm
|
||||
TASK_SECURE_ALCHEMICAL_REACTORS, // Secure reactors used in alchemy or magical experiments from threats
|
||||
TASK_DEFEND_SUPPLY_DEPOT, // Defend a depot holding critical supplies from sabotage or theft
|
||||
TASK_RECOVER_DAMAGED_ANTIQUITIES, // Recover and restore antiquities damaged in recent conflicts
|
||||
TASK_REPAIR_TACTICAL_ENGINES, // Repair engines used in tactical operations or war machines
|
||||
TASK_CONSTRUCT_RESEARCH_STATIONS, // Construct stations dedicated to research in strategic or magical fields
|
||||
TASK_SECURE_MAGICAL_TRANSMISSION_TOWERS, // Secure towers used for transmitting magical energy or signals from interference
|
||||
TASK_DEFEND_CONSTRUCTED_EMBASSIES, // Defend embassies constructed in dangerous regions from attack or breach
|
||||
TASK_RECOVER_OBSOLETE_ARTIFACTS, // Recover artifacts that have fallen out of use but are still of historical value
|
||||
TASK_REPAIR_SECURE_CHESTS, // Repair chests used to store valuable or sensitive items
|
||||
TASK_CONSTRUCT_FORTIFIED_COMMAND_BUNKERS, // Construct command bunkers with advanced fortifications for strategic command
|
||||
TASK_SECURE_ANCIENT_POWER_SOURCES, // Secure sources of ancient power from theft or misuse
|
||||
TASK_DEFEND_INFLUENTIAL_ORGANIZATIONS, // Defend organizations of great influence or power from hostile actions
|
||||
TASK_RECOVER_LOST_TREASURES, // Recover treasures that have been lost or hidden over time
|
||||
TASK_REPAIR_EXOTIC_ARTIFACTS, // Repair artifacts of exotic origin that are crucial for various operations
|
||||
TASK_CONSTRUCT_SUPPLY_CHAIN_DEFENSES, // Construct defenses to protect critical supply chains from disruption
|
||||
TASK_SECURE_LEGENDARY_TREASURE_CACHES, // Secure caches of treasure with legendary status from plunder
|
||||
TASK_DEFEND_HIGH_PRIORITY_RESEARCH_LABS, // Defend research labs with high-priority projects from attack
|
||||
TASK_RECOVER_SENSITIVE_EQUIPMENT, // Recover equipment essential for operations that has been compromised or lost
|
||||
TASK_REPAIR_ANCIENT_MILITARY_EQUIPMENT, // Repair equipment of ancient military origin for restoration and use
|
||||
TASK_CONSTRUCT_ENCHANTED_SECURITY_SYSTEMS, // Construct security systems with enchantments for heightened protection
|
||||
TASK_SECURE_HISTORICAL_RESEARCH_ARCHIVES, // Secure archives containing historical research from unauthorized access or damage
|
||||
TASK_DEFEND_CRITICAL_WAR_SUPPLIES, // Defend supplies critical for ongoing war efforts from attack or theft
|
||||
TASK_RECOVER_MAGICALLY_ENHANCED_GEAR, // Recover gear enhanced with magical properties that has been lost or stolen
|
||||
TASK_REPAIR_FORTIFIED_MILITARY_OUTPOSTS, // Repair military outposts with fortifications to restore their effectiveness
|
||||
TASK_CONSTRUCT_STRATEGIC_MAGICAL_OBSERVATORIES, // Construct observatories designed for monitoring magical events or phenomena
|
||||
TASK_SECURE_ANCIENT_ENCHANTED_RELICS, // Secure relics with ancient enchantments from being disturbed or misused
|
||||
TASK_DEFEND_HIGHLY_SENSITIVE_SITES, // Defend sites with highly sensitive information or assets from breaches
|
||||
TASK_RECOVER_VITAL_MAGICAL_ESSENCES, // Recover essences crucial for magical operations or artifacts
|
||||
TASK_REPAIR_ADVANCED_ENCHANTMENT_DEVICES, // Repair devices used for advanced enchantments or magical operations
|
||||
TASK_CONSTRUCT_ENCHANTED_TACTICAL_GATES, // Construct gates with enchantments for tactical advantage in defense
|
||||
TASK_SECURE_CRITICAL_ENCHANTED_RESOURCES, // Secure resources imbued with enchantments essential for various uses
|
||||
TASK_DEFEND_AGAINST_MAGICAL_INTERFERENCE, // Defend against interference from magical sources or entities
|
||||
TASK_RECOVER_OLD_TRADITIONAL_WEAPONS, // Recover traditional weapons with significant historical or cultural importance
|
||||
TASK_REPAIR_HIGH_ECH_ARTIFACTS, // Repair artifacts with high technological advancements from damage or malfunction
|
||||
TASK_CONSTRUCT_MAGICALLY_PROTECTED_BARRIERS, // Construct barriers protected with magic for superior defense
|
||||
TASK_SECURE_ENCHANTED_TREASURE_VAULTS, // Secure vaults holding treasure with magical enhancements
|
||||
TASK_DEFEND_KEY_SACRED_SITES, // Defend sacred sites of great importance from desecration or attack
|
||||
TASK_RECOVER_HISTORIC_MILITARY_DOCUMENTS, // Recover documents of historic military importance from secure locations
|
||||
TASK_REPAIR_ADVANCED_PROTECTIVE_SYSTEMS, // Repair systems designed for advanced protection against various threats
|
||||
TASK_CONSTRUCT_DEFENSIVE_RITUALS, // Construct defensive measures based on rituals for enhanced protection
|
||||
TASK_SECURE_HIDDEN_MAGIC_TREASURES, // Secure hidden treasures with magical properties from discovery or theft
|
||||
TASK_DEFEND_CRITICAL_MAGICAL_GATES, // Defend gates with significant magical importance from breach or damage
|
||||
TASK_RECOVER_ANCIENT_ENCHANTMENTS, // Recover enchantments from ancient sources that have been lost or hidden
|
||||
TASK_REPAIR_SECURE_RESEARCH_EQUIPMENT, // Repair equipment used in secure research environments
|
||||
TASK_CONSTRUCT_TACTICAL_ENCHANTED_FORTIFICATIONS, // Construct fortifications with tactical enchantments for strategic defense
|
||||
TASK_SECURE_VITAL_ANCIENT_GRIMOIRES, // Secure grimoires containing ancient knowledge from unauthorized access
|
||||
TASK_DEFEND_INTERNATIONAL_TREATY_SITES, // Defend sites related to international treaties from violations or attacks
|
||||
TASK_RECOVER_HISTORIC_CONSTRUCTION_PLANS, // Recover plans related to historic constructions of strategic importance
|
||||
TASK_REPAIR_DEFENSIVE_ENCHANTMENTS, // Repair enchantments used to protect key defensive structures or assets
|
||||
TASK_CONSTRUCT_ADVANCED_MAGE_BARRIERS, // Construct barriers with advanced magical properties for high-level protection
|
||||
TASK_SECURE_ENCHANTED_WEAPON_STORAGE, // Secure storage areas for weapons with magical enhancements
|
||||
TASK_DEFEND_AGAINST_RITUALISTIC_ATTACKS, // Defend against attacks based on ritualistic or magical practices
|
||||
TASK_RECOVER_HISTORICAL_ARTIFACTS, // Recover artifacts with significant historical value from secure locations
|
||||
TASK_REPAIR_TACTICAL_MAGIC_BARRIERS, // Repair barriers designed for tactical use in magical defenses
|
||||
TASK_CONSTRUCT_SUPPLY_CHAIN_SECURITY, // Construct security measures for protecting critical supply chains
|
||||
TASK_SECURE_ENCHANTED_MILITARY_INSTALLATIONS, // Secure military installations with magical enhancements
|
||||
TASK_DEFEND_HIGH_VALUE_RESEARCH_FACILITIES, // Defend research facilities of high value from threats and breaches
|
||||
TASK_RECOVER_DAMAGED_MYSTICAL_ARTIFACTS, // Recover and restore artifacts of mystical importance that have been damaged
|
||||
TASK_REPAIR_ADVANCED_DEFENSIVE_CONDUITS, // Repair conduits used for advanced defensive measures
|
||||
TASK_CONSTRUCT_MAGICAL_HARVESTING_STATIONS, // Construct stations for harvesting magical resources or energy
|
||||
TASK_SECURE_CRUCIAL_MAGICAL_TRANSPORTS, // Secure transport routes or vessels used for moving magical resources
|
||||
TASK_DEFEND_RESEARCH_AND_DEVELOPMENT_SITES, // Defend sites dedicated to research and development from attacks or sabotage
|
||||
TASK_RECOVER_EXOTIC_RITUAL_ARTIFACTS, // Recover artifacts used in exotic rituals from danger or theft
|
||||
TASK_REPAIR_ADVANCED_STRATEGIC_ARTIFACTS, // Repair strategic artifacts with advanced features or technology
|
||||
TASK_CONSTRUCT_FORTIFIED_MAGIC_WARDS, // Construct wards with fortifications to enhance magical protection
|
||||
TASK_SECURE_LEGENDARY_ENCHANTED_ITEMS, // Secure items of legendary enchantment from theft or destruction
|
||||
TASK_DEFEND_ANTIQUITY_STORAGE_FACILITIES, // Defend facilities storing valuable antiquities from breach or damage
|
||||
TASK_RECOVER_HISTORICAL_RESEARCH_EQUIPMENT, // Recover equipment used in historical research from loss or damage
|
||||
TASK_REPAIR_TACTICAL_ENCHANTED_ARTIFACTS, // Repair artifacts with tactical enchantments for improved functionality
|
||||
TASK_CONSTRUCT_ENCHANTED_PROTECTIVE_SHELTERS, // Construct shelters with magical protection for safety and security
|
||||
TASK_SECURE_ANCIENT_MAGIC_SECRETS, // Secure secrets related to ancient magic from being exposed or misused
|
||||
TASK_DEFEND_CRITICAL_MAGIC_RESEARCH, // Defend research focused on magic from disruption or attack
|
||||
TASK_RECOVER_DAMAGED_HISTORICAL_RELICS, // Recover and restore relics of historical significance that have been damaged
|
||||
};
|
||||
|
||||
#endif
|
||||
42
models/event/event_file_format.txt
Normal file
42
models/event/event_file_format.txt
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
#COND0
|
||||
This is some text.
|
||||
This is another text.
|
||||
|
||||
TEXT_OPTIONS{3} = can select up to 3 options
|
||||
// @todo how to add/hide options based on other info
|
||||
1. My text ->COND1
|
||||
2. My text ->COND2,->COND2=12
|
||||
3. My text ->COND3
|
||||
|
||||
REWARDS{1,2} = pick one and then 2
|
||||
// @todo how to add/hide options based on other info
|
||||
CONDA: 1. 213 564 55 ->COND2
|
||||
CONDA: 2. 12 32 ->COND2
|
||||
CONDA&CODB:3. 87 3325 11 ->COND2
|
||||
CODB: 3. 87 3325 11 ->COND2
|
||||
|
||||
#COND1
|
||||
|
||||
#COND2
|
||||
|
||||
#COND3
|
||||
|
||||
#COND1+#COND2
|
||||
|
||||
#COND1+#COND3
|
||||
|
||||
#COND2+#COND3
|
||||
|
||||
#COND1+#COND2+#COND3
|
||||
|
||||
#COND
|
||||
is_true // defined through ->COND
|
||||
int_value // defined through ->COND=12
|
||||
float_value
|
||||
char_level
|
||||
proficiencies_above[]
|
||||
proficiencies_above_level[]
|
||||
char_trait_above[]
|
||||
char_trait_above_level[]
|
||||
char_trait_below[]
|
||||
char_trait_below_level[]
|
||||
937
models/event/tmp
Normal file
937
models/event/tmp
Normal file
|
|
@ -0,0 +1,937 @@
|
|||
#ifndef TOS_QUEST_EVENT_TASK_TYPE_H
|
||||
#define TOS_QUEST_EVENT_TASK_TYPE_H
|
||||
|
||||
enum EventTaskType {
|
||||
TASK_COLLECT, // Collect a specific item or set of items
|
||||
TASK_KILL, // Kill a certain number of enemies
|
||||
TASK_ACCOMPANY, // Escort an NPC to a location
|
||||
TASK_DISCOVER, // Discover a specific location
|
||||
TASK_DELIVER, // Deliver an item to an NPC or location
|
||||
TASK_RESCUE, // Rescue an NPC or group of NPCs
|
||||
TASK_RETRIEVE, // Retrieve a stolen or lost item
|
||||
TASK_GATHER_INFORMATION, // Gather information or clues
|
||||
TASK_TALK, // Speak to a specific NPC or group of NPCs
|
||||
TASK_DEFEND, // Defend a location or NPC for a certain period of time
|
||||
TASK_SURVIVE, // Survive waves of enemies or a hazardous environment
|
||||
TASK_INVESTIGATE, // Investigate a mystery or event
|
||||
TASK_CONSTRUCT, // Build or repair a structure or object
|
||||
TASK_CRAFT, // Craft a specific item or set of items
|
||||
TASK_TRAIN, // Train a skill or teach an NPC
|
||||
TASK_FOLLOW, // Follow an NPC or creature without being detected
|
||||
TASK_SABOTAGE, // Sabotage an enemy structure or plan
|
||||
TASK_CAPTURE, // Capture or trap an enemy or creature
|
||||
TASK_ESCAPE, // Escape from a location or situation
|
||||
TASK_EXPLORE, // Explore a new area or region
|
||||
TASK_NEGOTIATE, // Negotiate peace or a trade agreement
|
||||
TASK_BARGAIN, // Bargain for a better price or outcome
|
||||
TASK_SPY, // Gather intelligence on enemies or allies
|
||||
TASK_INFILTRATE, // Infiltrate an enemy base or organization
|
||||
TASK_ASSASSINATE, // Assassinate a key target
|
||||
TASK_RECON, // Perform reconnaissance on a location
|
||||
TASK_HACK, // Hack a computer system or device
|
||||
TASK_REPAIR, // Repair a damaged object or system
|
||||
TASK_ENCHANT, // Enchant a weapon, armor, or item
|
||||
TASK_BREW, // Brew a potion or drink
|
||||
TASK_FISH, // Catch a certain type or number of fish
|
||||
TASK_HUNT, // Hunt a specific animal or creature
|
||||
TASK_COLLECT_TAX, // Collect taxes or tribute from NPCs
|
||||
TASK_RECRUIT, // Recruit allies or troops for a cause
|
||||
TASK_ESCAPE_PRISON, // Escape from captivity or imprisonment
|
||||
TASK_EXTRACT, // Extract resources or an NPC from a location
|
||||
TASK_SHADOW, // Shadow an NPC or enemy without being seen
|
||||
TASK_FIND_LOST, // Find a lost or missing NPC or item
|
||||
TASK_PLANT, // Plant seeds or objects in specific locations
|
||||
TASK_SELL, // Sell specific items to merchants or NPCs
|
||||
TASK_BUY, // Purchase specific items or goods
|
||||
TASK_PROTECT, // Protect a caravan or convoy
|
||||
TASK_RELOCATE, // Relocate an NPC or item to a new location
|
||||
TASK_RESTORE, // Restore a broken artifact or relationship
|
||||
TASK_SURVEY, // Survey land or resources
|
||||
TASK_SMUGGLE, // Smuggle contraband past guards or checkpoints
|
||||
TASK_INTERROGATE, // Interrogate an NPC for information
|
||||
TASK_INTERCEPT, // Intercept a message or courier
|
||||
TASK_ESCORT, // Escort an important NPC through dangerous territory
|
||||
TASK_MINE, // Mine specific ores or minerals
|
||||
TASK_BOUNTY, // Collect a bounty on a specific target
|
||||
TASK_TRAP, // Set traps for enemies or animals
|
||||
TASK_CONQUER, // Conquer a specific area or territory
|
||||
TASK_SURRENDER, // Surrender to an enemy or superior
|
||||
TASK_NEGLECT, // Avoid or neglect a responsibility (e.g., a moral choice)
|
||||
TASK_SUPPORT, // Provide support or aid to allies in a conflict
|
||||
TASK_DELIVER_MESSAGE, // Deliver a message or letter to an NPC
|
||||
TASK_LAY_SIEGE, // Lay siege to a fortress or city
|
||||
TASK_BREAK_SIEGE, // Break a siege and liberate a location
|
||||
TASK_FORAGE, // Forage for food, herbs, or supplies
|
||||
TASK_SEARCH, // Search for clues or specific items in an area
|
||||
TASK_TAME, // Tame a wild animal or creature
|
||||
TASK_CHARM, // Charm or persuade an NPC or creature
|
||||
TASK_CONVINCE, // Convince an NPC to take a certain action
|
||||
TASK_DEFECT, // Defect from one faction to another
|
||||
TASK_BETRAY, // Betray an ally or group for personal gain
|
||||
TASK_DECRYPT, // Decrypt a coded message or puzzle
|
||||
TASK_PUZZLE, // Solve a puzzle or riddle
|
||||
TASK_RACE, // Participate in a race or timed event
|
||||
TASK_TOURNAMENT, // Compete in a tournament or competition
|
||||
TASK_SCARE, // Scare off or intimidate an NPC or creature
|
||||
TASK_SHOOT, // Shoot targets or enemies with a ranged weapon
|
||||
TASK_USE_ITEM, // Use a specific item at a location or on an NPC
|
||||
TASK_PERSUADE, // Persuade an NPC to do something or believe something
|
||||
TASK_MEDITATE, // Meditate to gain insights or abilities
|
||||
TASK_DUEL, // Duel an NPC in combat
|
||||
TASK_TRIAL, // Complete a trial or test of skill
|
||||
TASK_PREACH, // Preach to NPCs to gain followers or influence
|
||||
TASK_CONVERT, // Convert NPCs to a religion or cause
|
||||
TASK_COLLECT_DEBT, // Collect a debt from an NPC
|
||||
TASK_LIGHT, // Light torches or beacons
|
||||
TASK_EXTINGUISH, // Extinguish fires or light sources
|
||||
TASK_RECONCILE, // Reconcile a conflict between NPCs or groups
|
||||
TASK_DISARM, // Disarm traps or enemies
|
||||
TASK_RELOCATE_VILLAGERS, // Relocate villagers to a safe area
|
||||
TASK_CALM, // Calm a panicked NPC or creature
|
||||
TASK_INVOKE_RITUAL, // Invoke or complete a ritual
|
||||
TASK_PERFORM, // Perform music, dance, or a play for an audience
|
||||
TASK_OBTAIN_PERMISSION, // Obtain permission to enter a location or take an action
|
||||
TASK_HIDE, // Hide from enemies or during a stealth mission
|
||||
TASK_CLIMB, // Climb a mountain, tree, or other structure
|
||||
TASK_SWIM, // Swim across a body of water or retrieve an item from underwater
|
||||
TASK_DIVE, // Dive into deep water or a cave
|
||||
TASK_RESIST, // Resist temptation or a magical effect
|
||||
TASK_SNEAK, // Sneak into a location without being detected
|
||||
TASK_SURVEY_TERRITORY, // Survey territory for strategic purposes
|
||||
TASK_COMMUNE, // Commune with spirits, gods, or nature
|
||||
TASK_EXORCISE, // Exorcise a spirit or demon from a location or person
|
||||
TASK_SUMMON, // Summon a creature, spirit, or other entity
|
||||
TASK_DECEIVE, // Deceive an NPC or group
|
||||
TASK_GATHER_ARMY, // Gather an army or group of followers
|
||||
TASK_REPEL_INVASION, // Repel an invasion or attack
|
||||
TASK_HARVEST, // Harvest crops or resources
|
||||
TASK_OPERATE_MACHINE, // Operate a complex machine or vehicle
|
||||
TASK_NEGOTIATE_RANSOM, // Negotiate the ransom of a captured NPC
|
||||
TASK_CONVICT, // Convict or acquit an NPC in a trial
|
||||
TASK_TRACK, // Track a person, creature, or object
|
||||
TASK_CONCEAL, // Conceal evidence or an object from others
|
||||
TASK_APPREHEND, // Apprehend a criminal or fugitive
|
||||
TASK_TEACH, // Teach an NPC a skill or knowledge
|
||||
TASK_CURE, // Cure a disease or ailment affecting an NPC
|
||||
TASK_RECLAIM, // Reclaim lost or stolen property
|
||||
TASK_HUNT_TREASURE, // Hunt for hidden or buried treasure
|
||||
TASK_PROPHESY, // Deliver a prophecy or prediction
|
||||
TASK_ENACT_REVENGE, // Enact revenge on an enemy or traitor
|
||||
TASK_UPHOLD_OATH, // Uphold an oath or pledge
|
||||
TASK_FIND_PATH, // Find a path through difficult terrain
|
||||
TASK_ESCORT_CONVOY, // Escort a convoy through dangerous territory
|
||||
TASK_INTERFERE, // Interfere with an enemy's plans or operations
|
||||
TASK_ENFORCE_LAW, // Enforce the law in a chaotic or lawless area
|
||||
TASK_RESTORE_HONOR, // Restore the honor of a disgraced NPC or family
|
||||
TASK_PEACE_TREATY, // Negotiate or enforce a peace treaty
|
||||
TASK_GATHER_HERBS, // Gather specific herbs or plants
|
||||
TASK_CAMP, // Set up or break down a camp
|
||||
TASK_SET_TRAPS, // Set traps for animals or enemies
|
||||
TASK_CREATE_POTION, // Create a potion using specific ingredients
|
||||
TASK_RECONSTITUTE, // Reconstitute a broken or damaged artifact
|
||||
TASK_RENOVATE, // Renovate or repair a building or structure
|
||||
TASK_EXTRACT_ORE, // Extract ore from a mine or vein
|
||||
TASK_DOUSE_FLAMES, // Douse flames in a burning building or area
|
||||
TASK_BLESS, // Bless an object, location, or person
|
||||
TASK_PLUNDER, // Plunder a village, ship, or enemy camp
|
||||
TASK_CONSECRATE, // Consecrate a temple, altar, or sacred ground
|
||||
TASK_EVACUATE, // Evacuate civilians or troops from a dangerous area
|
||||
TASK_DISGUISE, // Disguise yourself or an NPC to infiltrate or avoid detection
|
||||
TASK_CONFRONT, // Confront an NPC or creature about their actions
|
||||
TASK_WAGER, // Wager on a game, race, or duel
|
||||
TASK_SAIL, // Sail a ship to a specific destination
|
||||
TASK_MAINTAIN, // Maintain equipment, a building, or machinery
|
||||
TASK_CLEANSE, // Cleanse a cursed or polluted area
|
||||
TASK_HOLD_POSITION, // Hold a position against enemies for a certain time
|
||||
TASK_MAP_TERRITORY, // Map uncharted territory or a region
|
||||
TASK_INTERPRET, // Interpret a prophecy, dream, or message
|
||||
TASK_TRANSLATE, // Translate an ancient or foreign language
|
||||
TASK_ENFORCE_ORDER, // Enforce order in a chaotic environment
|
||||
TASK_REPENT, // Repent for a past mistake or sin
|
||||
TASK_INITIATE, // Initiate a new member into a guild, order, or faction
|
||||
TASK_TEST_LOYALTY, // Test the loyalty of an NPC or group
|
||||
TASK_SACRIFICE, // Sacrifice an item, creature, or person for a greater cause
|
||||
TASK_COLLECT_TITHE, // Collect a tithe or offering from NPCs
|
||||
TASK_PERFORM_RITUAL, // Perform a ritual to summon, banish, or bless
|
||||
TASK_RESCUE_HOSTAGE, // Rescue a hostage from enemy forces
|
||||
TASK_PROVOKE, // Provoke an enemy or rival into action
|
||||
TASK_NEUTRALIZE, // Neutralize a threat without killing
|
||||
TASK_SCOUR, // Scour an area for resources, clues, or enemies
|
||||
TASK_MARK_LOCATION, // Mark a location for future use or for others to find
|
||||
TASK_NAVIGATE, // Navigate through dangerous or unknown territory
|
||||
TASK_MANAGE_RESOURCES, // Manage resources such as food, water, or materials
|
||||
TASK_APPEASE, // Appease an angry deity, spirit, or powerful NPC
|
||||
TASK_MOURN, // Mourn the loss of a person, place, or thing
|
||||
TASK_ORGANIZE_EVENT, // Organize an event such as a festival, gathering, or meeting
|
||||
TASK_ESCORT_PRISONER, // Escort a prisoner to a specific location
|
||||
TASK_ENDURE, // Endure a hardship or trial for a certain time
|
||||
TASK_BOND_WITH_CREATURE, // Bond with a creature or animal to gain its loyalty
|
||||
TASK_RECONCILE_FACTIONS, // Reconcile two or more factions that are at odds
|
||||
TASK_CONDUCT_RITUAL, // Conduct a complex ritual with multiple steps
|
||||
TASK_OFFER_TRIBUTE, // Offer tribute to a ruler, deity, or spirit
|
||||
TASK_EXILE, // Exile an NPC or group from a community or region
|
||||
TASK_SUMMON_ALLY, // Summon an ally or familiar to aid in a quest
|
||||
TASK_DEFUSE, // Defuse a bomb or dangerous situation
|
||||
TASK_RELAY_MESSAGE, // Relay a message between two parties
|
||||
TASK_FIND_RELIC, // Find a lost or ancient relic
|
||||
TASK_DECIPHER_CODE, // Decipher a code, puzzle, or riddle
|
||||
TASK_JUDGE_CONTEST, // Judge a contest, competition, or duel
|
||||
TASK_ESTABLISH_BASE, // Establish a base of operations in a new location
|
||||
TASK_DEFEAT_CHAMPION, // Defeat a champion in battle or competition
|
||||
TASK_EMBARK_JOURNEY, // Embark on a long and dangerous journey
|
||||
TASK_OVERTHROW, // Overthrow a ruler or government
|
||||
TASK_PERFORM_CEREMONY, // Perform a ceremonial duty or rite
|
||||
TASK_DEPLOY_TROOPS, // Deploy troops to a strategic location
|
||||
TASK_CONDUCT_RESEARCH, // Conduct research on a subject, item, or creature
|
||||
TASK_COUNTERFEIT, // Create a counterfeit item, document, or currency
|
||||
TASK_OBTAIN_FAVOR, // Obtain the favor of a powerful NPC or faction
|
||||
TASK_CHALLENGE_RIVAL, // Challenge a rival to a duel, contest, or battle
|
||||
TASK_RECLAIM_LAND, // Reclaim land from enemies or the wilderness
|
||||
TASK_PROTECT_ARTIFACT, // Protect an artifact from theft or damage
|
||||
TASK_CREATE_ALLIANCE, // Create an alliance between factions or NPCs
|
||||
TASK_TRAVERSE_DUNGEON, // Traverse a dungeon or dangerous area
|
||||
TASK_DEFEND_STRONGHOLD, // Defend a stronghold from an attack or siege
|
||||
TASK_UNDERGO_TRIAL, // Undergo a trial of strength, wisdom, or courage
|
||||
TASK_REDEEM, // Redeem an NPC or yourself from a past wrong
|
||||
TASK_RESTORE_BALANCE, // Restore balance to a chaotic situation or ecosystem
|
||||
TASK_CONQUER_FORTRESS, // Conquer a fortress or enemy stronghold
|
||||
TASK_DEPLOY_TRAP, // Deploy a trap in a strategic location
|
||||
TASK_HARNESS_POWER, // Harness a source of power or magic
|
||||
TASK_PLANT_EVIDENCE, // Plant evidence to frame an NPC or mislead others
|
||||
TASK_RECON_VILLAGE, // Recon a village or settlement for information
|
||||
TASK_ESCORT_VIP, // Escort a VIP to a safe or strategic location
|
||||
TASK_CREATE_ART, // Create a piece of art, music, or literature
|
||||
TASK_REPAIR_REPUTATION, // Repair the reputation of an NPC, faction, or yourself
|
||||
TASK_FIND_HEIR, // Find a missing heir to a throne or legacy
|
||||
TASK_REPAIR_BRIDGE, // Repair a bridge to allow safe passage
|
||||
TASK_CONSTRUCT_BARRICADE,// Construct a barricade to defend against enemies
|
||||
TASK_INVOKE_DIVINE_HELP, // Invoke divine help or blessings in a dire situation
|
||||
TASK_PREPARE_FEAST, // Prepare a feast or banquet for a special occasion
|
||||
TASK_OBSERVE, // Observe an event or person without intervening
|
||||
TASK_MANAGE_SUPPLY_LINES,// Manage supply lines during a campaign or mission
|
||||
TASK_ARRANGE_MARRIAGE, // Arrange a marriage for political or personal reasons
|
||||
TASK_FIND_CURE, // Find a cure for a disease or curse
|
||||
TASK_RESCUE_ANIMAL, // Rescue an endangered or trapped animal
|
||||
TASK_CONSTRUCT_MONUMENT, // Construct a monument to commemorate an event or person
|
||||
TASK_INVEST_FORTUNE, // Invest a fortune in business, property, or trade
|
||||
TASK_HOST_GATHERING, // Host a gathering or meeting of importance
|
||||
TASK_RESCUE_CHILD, // Rescue a lost or kidnapped child
|
||||
TASK_SUBDUE_CREATURE, // Subdue a rampaging creature without killing it
|
||||
TASK_MEDIATE, // Mediate a dispute between NPCs or factions
|
||||
TASK_DESTROY_EVIDENCE, // Destroy evidence of a crime or secret
|
||||
TASK_DEVELOP_TECH, // Develop new technology, magic, or strategy
|
||||
TASK_NAVIGATE_POLITICS, // Navigate complex political situations
|
||||
TASK_REVIVE, // Revive an NPC from death or unconsciousness
|
||||
TASK_ESCORT_MERCHANT, // Escort a merchant and their goods to a market or town
|
||||
TASK_INTERFERE_CEREMONY, // Interfere with a rival's ceremony or ritual
|
||||
TASK_DISMISS_ALLY, // Dismiss an ally or companion from your service
|
||||
TASK_PERFORM_EXORCISM, // Perform an exorcism to banish a spirit or demon
|
||||
TASK_SECURE_BORDER, // Secure a border against invasion or smuggling
|
||||
TASK_RETRIEVE_TREASURE, // Retrieve a treasure from a dangerous location
|
||||
TASK_HOST_CONTEST, // Host a contest or tournament
|
||||
TASK_REUNITE_FAMILY, // Reunite a family separated by conflict or tragedy
|
||||
TASK_SMELT_ORE, // Smelt ore into usable metal
|
||||
TASK_ENCHANT_WEAPON, // Enchant a weapon with special powers
|
||||
TASK_CREATE_GOLEM, // Create or animate a golem or other construct
|
||||
TASK_REPLANT_FOREST, // Replant a forest that has been destroyed
|
||||
TASK_REPLANT_FOREST, // Replant a forest that has been destroyed
|
||||
TASK_RESURRECT, // Resurrect an NPC or creature from the dead
|
||||
TASK_SILENCE, // Silence an NPC or group to prevent them from speaking out
|
||||
TASK_SUBVERT, // Subvert a rival or enemy's plans from within
|
||||
TASK_INVESTIGATE_CRIME, // Investigate a crime scene or mystery
|
||||
TASK_DEFEND_CIVILIANS, // Defend civilians from an attack or disaster
|
||||
TASK_TRAVEL_UNDERCOVER, // Travel undercover to avoid detection
|
||||
TASK_EXTRACT_INFO, // Extract information from a captured enemy or informant
|
||||
TASK_AWAKEN_ANCIENT, // Awaken an ancient being or power
|
||||
TASK_CLEAR_DUNGEON, // Clear a dungeon of enemies or traps
|
||||
TASK_CONDUCT_RAID, // Conduct a raid on an enemy stronghold or village
|
||||
TASK_INTERCEPT_CARGO, // Intercept a shipment of goods or weapons
|
||||
TASK_BUILD_FORTRESS, // Build a fortress or stronghold
|
||||
TASK_ENFORCE_QUARANTINE, // Enforce a quarantine in a plague-ridden area
|
||||
TASK_MAINTAIN_MORALITY, // Maintain the morality or faith of a group
|
||||
TASK_RECOVER_BODY, // Recover a fallen ally's body from a dangerous location
|
||||
TASK_BRIBE_OFFICIAL, // Bribe an official to gain favor or bypass a law
|
||||
TASK_PREVENT_WAR, // Prevent a war between factions or nations
|
||||
TASK_INTERROGATE_PRISONER,// Interrogate a prisoner for vital information
|
||||
TASK_FORGE_ALLIANCE, // Forge an alliance between warring factions
|
||||
TASK_OPERATE_VEHICLE, // Operate a vehicle, such as a ship or airship
|
||||
TASK_HARNESS_ELEMENT, // Harness the power of an elemental force
|
||||
TASK_BREED_ANIMALS, // Breed animals for a specific purpose or trait
|
||||
TASK_QUELL_REBELLION, // Quell a rebellion or uprising
|
||||
TASK_RECRUIT_SOLDIERS, // Recruit soldiers for a military campaign
|
||||
TASK_SEEK_REDEMPTION, // Seek redemption for past sins or failures
|
||||
TASK_ESCAPE_DUNGEON, // Escape from a dungeon or prison
|
||||
TASK_TRACK_ENEMY, // Track an enemy's movements and plans
|
||||
TASK_REPAIR_SHIP, // Repair a damaged ship or vehicle
|
||||
TASK_MANAGE_ECONOMY, // Manage the economy of a town or region
|
||||
TASK_CONSTRUCT_TEMPLE, // Construct a temple or place of worship
|
||||
TASK_DEVELOP_CURE, // Develop a cure for a deadly disease or poison
|
||||
TASK_EXCAVATE_RUINS, // Excavate ruins to uncover lost artifacts or knowledge
|
||||
TASK_BARTER, // Barter goods or services with NPCs or factions
|
||||
TASK_COMPOSE_LETTER, // Compose an important letter or message
|
||||
TASK_NAVIGATE_SEAS, // Navigate treacherous seas or waterways
|
||||
TASK_PROTECT_SECRET, // Protect a secret from being discovered or revealed
|
||||
TASK_DISRUPT_RITUAL, // Disrupt an enemy's ritual or ceremony
|
||||
TASK_NEGOTIATE_PEACE, // Negotiate peace between warring factions
|
||||
TASK_REPAIR_RELIC, // Repair a damaged or broken relic
|
||||
TASK_DISCOVER_ARTIFACT, // Discover a lost or hidden artifact
|
||||
TASK_LEAD_EXPEDITION, // Lead an expedition into unknown or dangerous territory
|
||||
TASK_TRAIN_COMPANION, // Train a companion or pet in new skills
|
||||
TASK_CONVERT_ENEMY, // Convert an enemy to your side or cause
|
||||
TASK_GATHER_REINFORCEMENTS, // Gather reinforcements to aid in a battle
|
||||
TASK_FREE_SLAVES, // Free slaves or captives from bondage
|
||||
TASK_STOP_ASSASSINATION, // Stop an assassination attempt on an important NPC
|
||||
TASK_DISCOVER_LORE, // Discover ancient lore or knowledge
|
||||
TASK_HARVEST_CROPS, // Harvest crops from a field or farm
|
||||
TASK_EXTEND_TERRITORY, // Extend the territory of a kingdom or faction
|
||||
TASK_REPEL_ATTACK, // Repel an attack on a settlement or fortress
|
||||
TASK_PERFORM_SABOTAGE, // Perform sabotage on enemy equipment or plans
|
||||
TASK_HIDE_EVIDENCE, // Hide evidence of a crime or conspiracy
|
||||
TASK_CAPTURE_ANIMAL, // Capture a wild or dangerous animal
|
||||
TASK_DEFUSE_CONFLICT, // Defuse a conflict between NPCs or factions
|
||||
TASK_CONFRONT_FEARS, // Confront and overcome personal fears or nightmares
|
||||
TASK_PROTECT_TRADER, // Protect a trader on their journey through dangerous lands
|
||||
TASK_EXPAND_INFLUENCE, // Expand the influence of your faction or cause
|
||||
TASK_RESTORE_ANCIENT_ORDER, // Restore an ancient order or organization
|
||||
TASK_INVESTIGATE_RUINS, // Investigate ancient ruins for clues or treasure
|
||||
TASK_REINFORCE_WALLS, // Reinforce the walls of a castle or city
|
||||
TASK_NAVIGATE_MOUNTAINS, // Navigate treacherous mountain paths
|
||||
TASK_PURIFY_SOURCE, // Purify a corrupted or polluted source of water or power
|
||||
TASK_HEAL_WOUNDED, // Heal the wounded after a battle or disaster
|
||||
TASK_ENCHANT_ARMOR, // Enchant armor with magical properties
|
||||
TASK_AVENGE_DEATH, // Avenge the death of a loved one or comrade
|
||||
TASK_LEARN_SPELL, // Learn a new spell or magical ability
|
||||
TASK_FORM_COVENANT, // Form a covenant with a powerful entity or faction
|
||||
TASK_TRAVERSE_DESERT, // Traverse a dangerous desert region
|
||||
TASK_OVERCOME_CURSE, // Overcome or lift a powerful curse
|
||||
TASK_BATTLE_ARENA, // Battle in an arena for glory or rewards
|
||||
TASK_LOCATE_PORTAL, // Locate a portal to another realm or dimension
|
||||
TASK_MANAGE_VILLAGE, // Manage the affairs of a village or small town
|
||||
TASK_NEGOTIATE_TRADE, // Negotiate trade agreements between factions
|
||||
TASK_REPEL_MONSTER, // Repel a monster that threatens a town or settlement
|
||||
TASK_CONDUCT_RITUAL, // Conduct a ritual to summon or banish a being
|
||||
TASK_EXPLORE_CAVES, // Explore caves or underground tunnels
|
||||
TASK_CRAFT_WEAPON, // Craft a weapon using special materials
|
||||
TASK_CLEAR_FOREST, // Clear a forest of dangerous creatures or obstacles
|
||||
TASK_REPAIR_MACHINERY, // Repair complex machinery or constructs
|
||||
TASK_RETRIEVE_SCROLL, // Retrieve a lost or stolen scroll
|
||||
TASK_DEFEND_CARGO, // Defend cargo during transport
|
||||
TASK_RECOVER_LOST_ITEM, // Recover a lost or stolen item of importance
|
||||
TASK_NAVIGATE_SWAMP, // Navigate through a treacherous swamp
|
||||
TASK_EXORCISE_HAUNTING, // Exorcise a haunting from a location
|
||||
TASK_INVOKE_ANCIENT_RITES, // Invoke ancient rites or rituals for protection or power
|
||||
TASK_CONSTRUCT_BRIDGE, // Construct a bridge to cross a river or chasm
|
||||
TASK_UNCOVER_HIDDEN_PATH,// Uncover a hidden path or secret passage
|
||||
TASK_FIND_LOST_CITY, // Find a lost city or civilization
|
||||
TASK_BIND_DEMON, // Bind a demon or spirit to prevent harm
|
||||
TASK_CREATE_ARMOR, // Create armor for protection or battle
|
||||
TASK_MAP_CAVERNS, // Map unexplored caverns or tunnels
|
||||
TASK_LIFT_SIEGE, // Lift a siege on a city or fortress
|
||||
TASK_NAVIGATE_JUNGLE, // Navigate through a dense jungle
|
||||
TASK_PURGE_CORRUPTION, // Purge corruption from a person, place, or thing
|
||||
TASK_RETRIEVE_REMAINS, // Retrieve the remains of a fallen ally or enemy
|
||||
TASK_CREATE_AMULET, // Create a protective amulet or charm
|
||||
TASK_RESOLVE_DISPUTE, // Resolve a dispute between NPCs or factions
|
||||
TASK_STOP_REBELLION, // Stop a rebellion before it gains momentum
|
||||
TASK_REPEL_HORDE, // Repel a horde of enemies attacking a settlement
|
||||
TASK_EXAMINE_ARTIFACT, // Examine an artifact for clues or knowledge
|
||||
TASK_ARRANGE_TREATY, // Arrange a treaty between warring factions
|
||||
TASK_PROTECT_REFUGEES, // Protect refugees fleeing from war or disaster
|
||||
TASK_INTERCEPT_SPY, // Intercept a spy before they deliver critical information
|
||||
TASK_DISCOVER_NEW_LAND, // Discover new land for exploration or colonization
|
||||
TASK_RESCUE_SURVIVORS, // Rescue survivors from a disaster or battle
|
||||
TASK_CULTIVATE_CROPS, // Cultivate crops to ensure a harvest
|
||||
TASK_REPAIR_WEAPON, // Repair a broken or damaged weapon
|
||||
TASK_REPAIR_WEAPON, // Repair a broken or damaged weapon
|
||||
TASK_CONDUCT_INVESTIGATION, // Conduct an investigation into a mystery or crime
|
||||
TASK_DEFEND_VILLAGE, // Defend a village from invaders or monsters
|
||||
TASK_INTERCEPT_COURIER, // Intercept a courier carrying important messages or items
|
||||
TASK_PREPARE_DEFENSES, // Prepare defenses for an impending attack
|
||||
TASK_SEEK_OUTLAW, // Seek and capture or eliminate an outlaw
|
||||
TASK_CONVERT_FOLLOWERS, // Convert followers to a new faith or cause
|
||||
TASK_SMUGGLE_GOODS, // Smuggle goods past enemy lines or authorities
|
||||
TASK_PREPARE_RITUAL, // Prepare a complex ritual requiring multiple steps
|
||||
TASK_REPAIR_ARMOR, // Repair damaged armor
|
||||
TASK_CONDUCT_SURVEILLANCE, // Conduct surveillance on a target or location
|
||||
TASK_ACQUIRE_BLUEPRINTS, // Acquire blueprints for a device or building
|
||||
TASK_ESCORT_DIGNITARY, // Escort a dignitary through dangerous territory
|
||||
TASK_RECRUIT_ALLIES, // Recruit allies to support your cause
|
||||
TASK_CONSTRUCT_BARRACKS, // Construct barracks for housing soldiers
|
||||
TASK_REPAIR_FORTIFICATIONS, // Repair damaged fortifications or walls
|
||||
TASK_DEFUSE_AMBUSH, // Defuse an ambush set by enemies
|
||||
TASK_GATHER_INTEL, // Gather intelligence on enemy positions or plans
|
||||
TASK_CONDUCT_DIPLOMACY, // Conduct diplomatic negotiations with a foreign power
|
||||
TASK_RETRIEVE_BLUEPRINTS,// Retrieve stolen or lost blueprints
|
||||
TASK_INTERCEPT_SMUGGLERS,// Intercept smugglers transporting illegal goods
|
||||
TASK_ESCAPE_PURSUIT, // Escape from pursuers tracking you or your group
|
||||
TASK_REPAIR_GATE, // Repair a damaged or broken gate
|
||||
TASK_CONSTRUCT_TOWER, // Construct a tower for defense or observation
|
||||
TASK_RESUPPLY, // Resupply a forward base or outpost with necessary goods
|
||||
TASK_CONDUCT_HEIST, // Conduct a heist to steal valuable items or information
|
||||
TASK_NAVIGATE_MARSH, // Navigate through a dangerous marsh or bog
|
||||
TASK_REPAIR_BRIDGE, // Repair a bridge to restore a critical route
|
||||
TASK_DISRUPT_SMUGGLING, // Disrupt smuggling operations in a region
|
||||
TASK_ENFORCE_LAW, // Enforce the law in a lawless area or situation
|
||||
TASK_ESCORT_CONVOY, // Escort a convoy through dangerous territory
|
||||
TASK_EXTINGUISH_FIRE, // Extinguish a fire threatening a village or forest
|
||||
TASK_INVESTIGATE_MURDER, // Investigate a murder and find the culprit
|
||||
TASK_GATHER_MEDICINE, // Gather medicine or herbs to treat the sick
|
||||
TASK_REPEL_RAIDERS, // Repel raiders attacking a settlement
|
||||
TASK_DEFEND_CITADEL, // Defend a citadel from an attacking force
|
||||
TASK_RECRUIT_MERCENARIES,// Recruit mercenaries for a specific mission or battle
|
||||
TASK_DISMANTLE_BOMB, // Dismantle a bomb or explosive device
|
||||
TASK_RECONSTRUCT_EVENT, // Reconstruct events of a crime or mystery
|
||||
TASK_CONDUCT_INTERVIEW, // Conduct an interview to gather information or clues
|
||||
TASK_CLEAR_RUBBLE, // Clear rubble from a road, building, or path
|
||||
TASK_DEFEND_TEMPLE, // Defend a temple from desecration or attack
|
||||
TASK_CONSTRUCT_PALISADE, // Construct a palisade for temporary defense
|
||||
TASK_OBTAIN_PERMIT, // Obtain a permit or authorization from authorities
|
||||
TASK_EXAMINE_CORPSE, // Examine a corpse to determine cause of death
|
||||
TASK_PROTECT_MERCHANT, // Protect a merchant from bandits or pirates
|
||||
TASK_FIND_LOST_MAP, // Find a lost map leading to treasure or important locations
|
||||
TASK_RECLAIM_POSSESSION, // Reclaim a possession taken by enemies or thieves
|
||||
TASK_DISMANTLE_TRAP, // Dismantle a trap set by enemies
|
||||
TASK_ACQUIRE_SEAL, // Acquire a seal of authority or authenticity
|
||||
TASK_DEFEND_CARAVAN, // Defend a caravan traveling through dangerous territory
|
||||
TASK_ESTABLISH_OUTPOST, // Establish an outpost in a remote or strategic location
|
||||
TASK_RESOLVE_HOSTAGE_SITUATION, // Resolve a hostage situation peacefully or by force
|
||||
TASK_REPAIR_WELL, // Repair a well to restore access to water
|
||||
TASK_SALVAGE_SHIPWRECK, // Salvage a shipwreck for valuable goods or information
|
||||
TASK_AVERT_DISASTER, // Avert a natural or magical disaster threatening a region
|
||||
TASK_EXORCISE_SPIRIT, // Exorcise a malevolent spirit from a location or person
|
||||
TASK_SMUGGLE_PERSON, // Smuggle a person out of a dangerous area
|
||||
TASK_NAVIGATE_WILDERNESS, // Navigate through a dense and perilous wilderness
|
||||
TASK_PROTECT_ARTISAN, // Protect an artisan while they complete a crucial task
|
||||
TASK_REPAIR_ROAD, // Repair a road to ensure safe travel
|
||||
TASK_COUNTER_INFILTRATION, // Counter enemy infiltration efforts within your ranks
|
||||
TASK_RESCUE_SAILORS, // Rescue sailors stranded at sea or on a deserted island
|
||||
TASK_RECLAIM_TERRITORY, // Reclaim territory lost to enemies or natural forces
|
||||
TASK_DISPEL_ILLUSION, // Dispel an illusion hiding a truth or danger
|
||||
TASK_RESOLVE_FEUD, // Resolve a feud between families, factions, or individuals
|
||||
TASK_RETRIEVE_KEY, // Retrieve a key to unlock a door, chest, or magical barrier
|
||||
TASK_DEFEND_FARMSTEAD, // Defend a farmstead from bandits or wild animals
|
||||
TASK_CONSTRUCT_AQUEDUCT, // Construct an aqueduct to bring water to a settlement
|
||||
TASK_FIND_LOST_CREW, // Find and rescue a lost or missing crew from a ship or expedition
|
||||
TASK_EXCAVATE_TUNNEL, // Excavate a tunnel for mining or escape purposes
|
||||
TASK_BOLSTER_MORALE, // Bolster the morale of troops or a community facing hardship
|
||||
TASK_GUARD_PRISONER, // Guard a high-profile prisoner until their trial or transport
|
||||
TASK_SECURE_RELIC, // Secure a relic of great power or significance from enemies
|
||||
TASK_DEFEND_MARKET, // Defend a marketplace from thieves or invaders
|
||||
TASK_GATHER_SUPPLIES, // Gather supplies for an upcoming expedition or siege
|
||||
TASK_RECLAIM_WEAPONS, // Reclaim weapons stolen by enemies or lost in battle
|
||||
TASK_CONDUCT_FORAGING, // Conduct foraging in the wilderness for food and resources
|
||||
TASK_INVESTIGATE_OMEN, // Investigate an ominous sign or prophecy
|
||||
TASK_RESCUE_DIPLOMAT, // Rescue a diplomat captured by hostile forces
|
||||
TASK_PREPARE_SIEGE, // Prepare for a siege by gathering resources and fortifying defenses
|
||||
TASK_CONSTRUCT_TREBUCHET, // Construct a trebuchet or other siege weapon
|
||||
TASK_CONTAIN_PLAGUE, // Contain an outbreak of plague or disease in a community
|
||||
TASK_SUBDUE_REVOLT, // Subdue a revolt among soldiers or civilians
|
||||
TASK_EXAMINE_DOCUMENTS, // Examine documents for clues, forgery, or hidden information
|
||||
TASK_RESCUE_VILLAGERS, // Rescue villagers taken captive by raiders or monsters
|
||||
TASK_INTERCEPT_REINFORCEMENTS, // Intercept enemy reinforcements before they can reach the battlefield
|
||||
TASK_DEFEND_LIBRARY, // Defend a library or archive from destruction or theft
|
||||
TASK_REPAIR_WALL, // Repair a breach in a wall or fortification
|
||||
TASK_GATHER_RESEARCH_MATERIALS, // Gather materials needed for important research
|
||||
TASK_CONSTRUCT_BATTERING_RAM, // Construct a battering ram to breach enemy gates
|
||||
TASK_NAVIGATE_CANYON, // Navigate through a dangerous canyon or ravine
|
||||
TASK_DEFEND_TREASURY, // Defend a treasury from robbers or enemy forces
|
||||
TASK_RESCUE_HOSTAGES, // Rescue multiple hostages from a heavily guarded location
|
||||
TASK_RESTORE_HOPE, // Restore hope to a demoralized community or group
|
||||
TASK_NEGOTIATE_RANSOM, // Negotiate the ransom for a captured ally or valuable item
|
||||
TASK_REINFORCE_OUTPOST, // Reinforce a vulnerable outpost with troops and supplies
|
||||
TASK_EXAMINE_ARTEFACT, // Examine an artifact for magical properties or historical significance
|
||||
TASK_ESCAPE_TRAP, // Escape from a trap set by enemies or natural forces
|
||||
TASK_CLEAR_INFESTATION, // Clear an infestation of dangerous creatures from a location
|
||||
TASK_REPAIR_BRIDGE, // Repair a damaged bridge to restore travel routes
|
||||
TASK_FORM_DEFENSIVE_PACT, // Form a defensive pact with another faction to deter aggression
|
||||
TASK_CONTAIN_MAGIC, // Contain a runaway magical effect or creature
|
||||
TASK_CONSTRUCT_WATCHTOWER, // Construct a watchtower to oversee strategic areas
|
||||
TASK_SECURE_BORDERS, // Secure the borders of a territory against incursions
|
||||
TASK_RECOVER_RELIC, // Recover a stolen or lost relic of great importance
|
||||
TASK_CREATE_DIVERSION, // Create a diversion to distract enemies or draw them away
|
||||
TASK_RESCUE_TRAPPED_MINERS, // Rescue miners trapped underground by a cave-in or collapse
|
||||
TASK_CONFRONT_WARLORD, // Confront a warlord threatening regional stability
|
||||
TASK_NEGOTIATE_ALLIANCE, // Negotiate an alliance with a powerful faction or group
|
||||
TASK_DEFEND_WAYPOINT, // Defend a strategic waypoint from enemy control
|
||||
TASK_RESCUE_SPY, // Rescue a spy who has been captured behind enemy lines
|
||||
TASK_REPEL_SEIGE, // Repel a siege on a fortress or city
|
||||
TASK_INTERCEPT_CARGO, // Intercept valuable cargo being transported by enemies
|
||||
TASK_DEFEND_OUTPOST, // Defend an outpost from being overrun by enemies
|
||||
TASK_ESCORT_PRISONERS, // Escort prisoners safely to their destination
|
||||
TASK_SECURE_INTEL, // Secure vital intelligence from enemy hands
|
||||
TASK_DEFEND_STRATEGIC_POINT, // Defend a strategic point critical to the overall battle plan
|
||||
TASK_RETRIEVE_ENCHANTED_ITEM, // Retrieve an enchanted item from a guarded location
|
||||
TASK_CONSTRUCT_TRENCH, // Construct a trench for defensive purposes in battle
|
||||
TASK_PREPARE_AMBUSH, // Prepare an ambush against approaching enemies
|
||||
TASK_DISCOVER_HIDDEN_TREASURE, // Discover hidden treasure in an unexplored area
|
||||
TASK_RESCUE_ROYALTY, // Rescue a member of royalty from enemy capture
|
||||
TASK_DEFEND_CAPITAL, // Defend the capital city from an invading force
|
||||
TASK_RECOVER_ANCIENT_TEXTS, // Recover ancient texts containing lost knowledge
|
||||
TASK_CONSTRUCT_CATAPULT, // Construct a catapult for siege warfare
|
||||
TASK_DEFEND_BRIDGE, // Defend a bridge from enemy forces attempting to cross
|
||||
TASK_CLEAR_RIVER_BLOCKAGE, // Clear a blockage in a river to restore water flow
|
||||
TASK_REINFORCE_FORTRESS, // Reinforce a fortress under threat of attack
|
||||
TASK_CONDUCT_ESPIONAGE, // Conduct espionage to gather enemy secrets or plans
|
||||
TASK_EXAMINE_RUINS, // Examine ancient ruins for clues or artifacts
|
||||
TASK_CONSTRUCT_FORT, // Construct a fort to secure a strategic location
|
||||
TASK_RECOVER_STOLEN_GOODS, // Recover stolen goods from bandits or pirates
|
||||
TASK_PREVENT_ASSASSINATION, // Prevent an assassination attempt on a key figure
|
||||
TASK_RESCUE_KIDNAPPED_CHILD, // Rescue a kidnapped child from their captors
|
||||
TASK_ESTABLISH_TRADE_ROUTE, // Establish a new trade route between distant regions
|
||||
TASK_DEFEND_SETTLEMENT, // Defend a settlement from raiders or wild animals
|
||||
TASK_REPAIR_DAMAGED_DAM, // Repair a dam that is at risk of collapsing
|
||||
TASK_RESCUE_STRANDED_TRAVELERS, // Rescue stranded travelers from a remote location
|
||||
TASK_DEFEND_CASTLE, // Defend a castle under siege by enemy forces
|
||||
TASK_RETRIEVE_MAGIC_SCROLL, // Retrieve a powerful magic scroll from a dangerous location
|
||||
TASK_CONSTRUCT_GATE, // Construct a gate to protect a town or city
|
||||
TASK_REINFORCE_BRIDGE, // Reinforce a bridge to withstand heavy use or attack
|
||||
TASK_EXAMINE_RELIC, // Examine a relic for hidden powers or dangers
|
||||
TASK_CONSTRUCT_FENCE, // Construct a fence to keep animals or enemies out
|
||||
TASK_NAVIGATE_STORMY_SEAS, // Navigate through stormy seas to reach a destination
|
||||
TASK_EXAMINE_MAGICAL_ARTIFACT, // Examine a magical artifact to determine its purpose or power
|
||||
TASK_CONSTRUCT_OUTPOST, // Construct an outpost in a strategic or remote location
|
||||
TASK_RECOVER_SACRED_ITEM, // Recover a sacred item stolen from a temple or shrine
|
||||
TASK_ESCORT_WOUNDED, // Escort wounded allies to a safe location for treatment
|
||||
TASK_DEFEND_FORT, // Defend a fort from a concentrated enemy attack
|
||||
TASK_REPAIR_TOWN_WALL, // Repair a damaged town wall to protect against invasion
|
||||
TASK_RESOLVE_POLITICAL_DISPUTE, // Resolve a political dispute before it escalates into conflict
|
||||
TASK_REPEL_INVADERS, // Repel invaders from a territory or settlement
|
||||
TASK_CONSTRUCT_MOAT, // Construct a moat around a fortress or castle
|
||||
TASK_ESCORT_SUPPLIES, // Escort supplies to a besieged location
|
||||
TASK_DEFEND_BARRICADE, // Defend a barricade from being breached by enemies
|
||||
TASK_RETRIEVE_LOST_TREASURE, // Retrieve lost treasure from a dangerous or hidden location
|
||||
TASK_NAVIGATE_BLIZZARD, // Navigate through a blizzard to reach a destination safely
|
||||
TASK_REPEL_ENEMY_SCOUTS, // Repel enemy scouts from discovering strategic positions
|
||||
TASK_CONDUCT_RESCUE_OPERATION, // Conduct a rescue operation to save captured allies or civilians
|
||||
TASK_DEFEND_TOWER, // Defend a tower from enemy assault
|
||||
TASK_CONSTRUCT_DEFENSIVE_POSITION, // Construct a defensive position to prepare for an imminent attack
|
||||
TASK_INTERCEPT_ENEMY_COMMANDER, // Intercept an enemy commander to disrupt their plans
|
||||
TASK_ESTABLISH_COMMUNICATION_LINE, // Establish a communication line between distant allies or outposts
|
||||
TASK_DEFEND_RIVER_CROSSING, // Defend a river crossing from enemy control
|
||||
TASK_RETRIEVE_ANCIENT_WEAPON, // Retrieve an ancient weapon of great power from a guarded location
|
||||
TASK_ESCORT_CIVILIANS, // Escort civilians to safety during a crisis
|
||||
TASK_REPAIR_SHIP_HULL, // Repair a ship's hull to prevent it from sinking
|
||||
TASK_DEFEND_FERRY, // Defend a ferry from bandits or pirates during a crossing
|
||||
TASK_RESCUE_ABDUCTED_PRIEST, // Rescue an abducted priest from a hostile cult
|
||||
TASK_CONSTRUCT_RAMPARTS, // Construct ramparts to strengthen a defensive position
|
||||
TASK_CLEAR_CAVE_IN, // Clear a cave-in to rescue trapped miners or adventurers
|
||||
TASK_DEFEND_ARCHIVE, // Defend an archive containing valuable records or artifacts
|
||||
TASK_REINFORCE_WATCHTOWER, // Reinforce a watchtower to improve surveillance and defense
|
||||
TASK_REPEL_ENEMY_BOARDERS, // Repel enemy boarders attempting to seize control of a ship
|
||||
TASK_ESTABLISH_DEFENSIVE_RING, // Establish a defensive ring to protect a key location
|
||||
TASK_RECOVER_LOST_MANUSCRIPT, // Recover a lost manuscript of significant importance
|
||||
TASK_CONSTRUCT_BULWARK, // Construct a bulwark to provide extra defense against attacks
|
||||
TASK_NAVIGATE_TREACHEROUS_TERRAIN, // Navigate treacherous terrain to reach an objective
|
||||
TASK_REPEL_ENEMY_PATROL, // Repel an enemy patrol from gaining information or territory
|
||||
TASK_CONDUCT_DEFENSIVE_DRILL, // Conduct a defensive drill to prepare for potential attacks
|
||||
TASK_REINFORCE_STRATEGIC_POSITION, // Reinforce a strategic position to prevent enemy advance
|
||||
TASK_RESCUE_MISSING_SCOUTS, // Rescue scouts who have gone missing behind enemy lines
|
||||
TASK_SECURE_WATER_SUPPLY, // Secure a water supply crucial for a settlement's survival
|
||||
TASK_DEFEND_BORDERS, // Defend the borders of a kingdom or territory from incursions
|
||||
TASK_REPAIR_DOCKS, // Repair docks to ensure ships can safely dock and unload supplies
|
||||
TASK_RECLAIM_ANCIENT_CITADEL, // Reclaim an ancient citadel taken over by enemies
|
||||
TASK_DEFEND_PORT, // Defend a port city from enemy naval forces
|
||||
TASK_CONDUCT_SAFETY_INSPECTION, // Conduct a safety inspection of critical infrastructure
|
||||
TASK_REPAIR_DAMAGED_MONUMENT, // Repair a damaged monument of cultural or historical significance
|
||||
TASK_CONSTRUCT_BARRIERS, // Construct barriers to slow down or block enemy movement
|
||||
TASK_DEFEND_STRONGHOLD, // Defend a stronghold from a major enemy offensive
|
||||
TASK_REPEL_NAVAL_INVASION, // Repel a naval invasion threatening coastal defenses
|
||||
TASK_ESTABLISH_TRADE_AGREEMENT, // Establish a trade agreement between distant kingdoms
|
||||
TASK_RESCUE_ABANDONED_CHILDREN, // Rescue abandoned children left in a dangerous area
|
||||
TASK_REINFORCE_CITY_WALLS, // Reinforce city walls to withstand a prolonged siege
|
||||
TASK_CONDUCT_COVERT_OP, // Conduct a covert operation behind enemy lines
|
||||
TASK_DEFEND_HIGHLANDS, // Defend the highlands from encroaching enemy forces
|
||||
TASK_RECOVER_LOST_ARTIFACT, // Recover a lost artifact with significant power
|
||||
TASK_CONSTRUCT_MOUNTAIN_PASS, // Construct a mountain pass to improve travel and trade routes
|
||||
TASK_RESCUE_ENDANGERED_ANIMALS, // Rescue endangered animals from poachers or habitat destruction
|
||||
TASK_DEFEND_AGAINST_RAID, // Defend a settlement against a raid from bandits or enemy troops
|
||||
TASK_RECLAIM_STOLEN_PROPERTY, // Reclaim stolen property taken by criminals or rival factions
|
||||
TASK_REPAIR_CITADEL_DEFENSES, // Repair the defenses of a citadel under threat
|
||||
TASK_CONDUCT_STRATEGIC_RETREAT, // Conduct a strategic retreat to regroup and fortify
|
||||
TASK_REPEL_FOREST_INVASION, // Repel an invasion of hostile forces in a forested area
|
||||
TASK_RESCUE_TRAPPED_SOLDIERS, // Rescue soldiers trapped behind enemy lines or in a collapsed structure
|
||||
TASK_DEFEND_HILLTOP, // Defend a hilltop position from enemy forces trying to gain the high ground
|
||||
TASK_ESTABLISH_BORDER_OUTPOST, // Establish an outpost on the border to monitor enemy movements
|
||||
TASK_RETRIEVE_ABANDONED_SUPPLIES, // Retrieve abandoned supplies left in a dangerous location
|
||||
TASK_DEFEND_WINDMILL, // Defend a windmill from being sabotaged or destroyed
|
||||
TASK_RESCUE_DOWNED_PILOT, // Rescue a downed pilot stranded in enemy territory
|
||||
TASK_REINFORCE_FORTIFIED_POSITION, // Reinforce a fortified position to prepare for a heavy attack
|
||||
TASK_CONSTRUCT_NAVAL_BASE, // Construct a naval base to strengthen maritime defenses
|
||||
TASK_SECURE_FOREST_EDGE, // Secure the edge of a forest to prevent enemy infiltration
|
||||
TASK_RECOVER_ROYAL_HEIRLOOM, // Recover a royal heirloom of immense value and significance
|
||||
TASK_DEFEND_MOUNTAIN_PASS, // Defend a mountain pass from being overtaken by enemy forces
|
||||
TASK_REPAIR_BARRACKS, // Repair barracks to house soldiers or refugees
|
||||
TASK_ESTABLISH_SUPPLY_DEPOT, // Establish a supply depot to support ongoing operations
|
||||
TASK_REPEL_SEA_MONSTER, // Repel a sea monster attacking ships or coastal settlements
|
||||
TASK_RESCUE_ABANDONED_ANIMALS, // Rescue abandoned animals left in a dangerous area
|
||||
TASK_DEFEND_OUTSKIRTS, // Defend the outskirts of a town or city from enemy raids
|
||||
TASK_RECOVER_MAGIC_CRYSTAL, // Recover a magic crystal stolen by enemies
|
||||
TASK_CONDUCT_NIGHT_RAID, // Conduct a night raid on an enemy camp or supply line
|
||||
TASK_REPEL_BORDER_INCURSION, // Repel an enemy incursion across the border
|
||||
TASK_REPAIR_RIVER_DAM, // Repair a river dam to prevent flooding
|
||||
TASK_SECURE_ANCIENT_TOMB, // Secure an ancient tomb from grave robbers or enemies
|
||||
TASK_RESCUE_CIVILIANS_FROM_CONFLICT_ZONE, // Rescue civilians caught in a conflict zone
|
||||
TASK_DEFEND_TRADE_ROUTE, // Defend a trade route from bandits or hostile forces
|
||||
TASK_RECOVER_ENEMY_PLANS, // Recover enemy plans to prevent them from executing their strategy
|
||||
TASK_CONSTRUCT_OBSERVATION_POST, // Construct an observation post to monitor enemy activity
|
||||
TASK_SECURE_SECRET_PASSAGE, // Secure a secret passage to ensure safe travel or escape
|
||||
TASK_REPEL_INVADING_ARMY, // Repel an invading army from your homeland
|
||||
TASK_REPAIR_FISHING_VILLAGE, // Repair a fishing village after a storm or raid
|
||||
TASK_RESCUE_PRISONERS_OF_WAR, // Rescue prisoners of war held by the enemy
|
||||
TASK_DEFEND_COASTLINE, // Defend a coastline from enemy landings or raids
|
||||
TASK_CONDUCT_COUNTERINTELLIGENCE, // Conduct counterintelligence to prevent enemy espionage
|
||||
TASK_REINFORCE_SEIGE_DEFENSES, // Reinforce defenses during an ongoing siege
|
||||
TASK_CONSTRUCT_SUPPLY_LINE, // Construct a supply line to maintain troop morale and effectiveness
|
||||
TASK_RESOLVE_DISPUTE_OVER_TERRITORY, // Resolve a dispute between factions over territorial claims
|
||||
TASK_REPEL_NIGHT_ATTACK, // Repel a night attack by enemy forces
|
||||
TASK_REPAIR_TEMPLE_SHRINE, // Repair a temple or shrine damaged by conflict or disaster
|
||||
TASK_DEFEND_MOUNTAIN_FORTRESS, // Defend a mountain fortress from a major offensive
|
||||
TASK_CONDUCT_LONG_RANGE_RECONNAISSANCE, // Conduct long-range reconnaissance to gather critical intel
|
||||
TASK_RECLAIM_ABANDONED_FORT, // Reclaim an abandoned fort from enemies or wild creatures
|
||||
TASK_RESCUE_SHIPWRECKED_CREW, // Rescue a crew stranded after a shipwreck
|
||||
TASK_DEFEND_WAR_CAMP, // Defend a war camp from enemy sabotage or attack
|
||||
TASK_CONSTRUCT_WATCHTOWER_NETWORK, // Construct a network of watchtowers for enhanced surveillance
|
||||
TASK_REPEL_SKIRMISHERS, // Repel skirmishers attempting to harass your forces
|
||||
TASK_REPAIR_BATTLEFIELD_DEFENSES, // Repair battlefield defenses during or after an engagement
|
||||
TASK_RECOVER_LOST_SCOUTS, // Recover scouts who have been lost or captured during a mission
|
||||
TASK_DEFEND_HARBOR, // Defend a harbor from a naval or amphibious assault
|
||||
TASK_ESTABLISH_SAFEHOUSE, // Establish a safehouse for intelligence or resistance operations
|
||||
TASK_REINFORCE_BATTALION, // Reinforce a battalion under heavy attack or low on morale
|
||||
TASK_REPEL_AMBUSH, // Repel an ambush set by enemies during a march or expedition
|
||||
TASK_REPAIR_TREBUCHET, // Repair a trebuchet damaged during siege warfare
|
||||
TASK_DEFEND_TRADING_POST, // Defend a trading post from bandits or hostile forces
|
||||
TASK_RESCUE_ARTISAN, // Rescue an artisan kidnapped to force them into making weapons or art
|
||||
TASK_CONSTRUCT_BATTERY, // Construct a battery of artillery or defensive weapons
|
||||
TASK_RECOVER_STOLEN_DOCUMENTS, // Recover documents stolen by enemy spies or thieves
|
||||
TASK_DEFEND_BARRACKS, // Defend barracks housing soldiers or important personnel
|
||||
TASK_SECURE_ESCAPE_ROUTE, // Secure an escape route for retreating forces or refugees
|
||||
TASK_REPEL_DESERT_RAIDERS, // Repel raiders attacking from a desert region
|
||||
TASK_REPAIR_CATAPULT, // Repair a catapult damaged in combat or through sabotage
|
||||
TASK_DEFEND_DESERT_OASIS, // Defend a desert oasis from hostile forces or nomads
|
||||
TASK_CONDUCT_TUNNEL_INSPECTION, // Conduct an inspection of tunnels to prevent collapses or enemy use
|
||||
TASK_RECOVER_WOUNDED_ALLIES, // Recover wounded allies from the battlefield
|
||||
TASK_CONSTRUCT_TRENCH_SYSTEM, // Construct a trench system for defense or assault preparation
|
||||
TASK_SECURE_MOUNTAIN_PEAK, // Secure a mountain peak for observation or tactical advantage
|
||||
TASK_REPEL_SWAMP_CREATURES, // Repel creatures attacking from a nearby swamp
|
||||
TASK_DEFEND_FOREST_GROVE, // Defend a forest grove sacred to local inhabitants or druidic orders
|
||||
TASK_RESCUE_HISTORIAN, // Rescue a historian who has been captured or lost in a dangerous area
|
||||
TASK_CONSTRUCT_DEFENSIVE_FORTIFICATIONS, // Construct defensive fortifications to protect against invasions
|
||||
TASK_REPEL_WILDERNESS_ATTACK, // Repel an attack by hostile forces emerging from the wilderness
|
||||
TASK_REPAIR_RAMPARTS, // Repair ramparts damaged during an ongoing siege or conflict
|
||||
TASK_SECURE_STRATEGIC_HILL, // Secure a hilltop offering a strategic advantage in battle
|
||||
TASK_DEFEND_BORDER_FORT, // Defend a fort on the border of enemy territory
|
||||
TASK_RESOLVE_CONFLICT_BETWEEN_CLANS, // Resolve a conflict between rival clans threatening regional stability
|
||||
TASK_REPEL_FOREST_RAIDERS, // Repel raiders attacking from the forest or jungle
|
||||
TASK_CONDUCT_DEEP_RECONNAISSANCE, // Conduct deep reconnaissance into enemy territory
|
||||
TASK_RECLAIM_OCCUPIED_TERRITORY, // Reclaim territory occupied by enemy forces or hostile creatures
|
||||
TASK_SECURE_RIVERBANK, // Secure a riverbank to prevent enemy crossings or incursions
|
||||
TASK_DEFEND_SECRET_ENTRANCE, // Defend a secret entrance to a hidden base or stronghold
|
||||
TASK_RECOVER_FORGOTTEN_KNOWLEDGE, // Recover knowledge lost to time or hidden in ancient texts
|
||||
TASK_REPEL_MOUNTAIN_BANDITS, // Repel bandits attacking from the mountains
|
||||
TASK_RESCUE_MYSTIC, // Rescue a mystic or seer captured by enemies or cultists
|
||||
TASK_CONSTRUCT_SPY_NETWORK, // Construct a network of spies to gather intelligence across a region
|
||||
TASK_DEFEND_ANCIENT_TEMPLE, // Defend an ancient temple from looters or invading forces
|
||||
TASK_REPAIR_ANCIENT_MONUMENT, // Repair an ancient monument of cultural or historical significance
|
||||
TASK_SECURE_FOREST_PASSAGE, // Secure a passage through a dense or enchanted forest
|
||||
TASK_RECOVER_STOLEN_TREASURE, // Recover treasure stolen by thieves or rival factions
|
||||
TASK_REPEL_JUNGLE_BEASTS, // Repel beasts attacking from a jungle or tropical region
|
||||
TASK_DEFEND_ANCIENT_LIBRARY, // Defend an ancient library from being ransacked or destroyed
|
||||
TASK_CONSTRUCT_FORTRESS_GATE, // Construct a gate to secure a fortress or walled city
|
||||
TASK_RESOLVE_CIVIL_UPRISING, // Resolve a civil uprising threatening stability in a city or region
|
||||
TASK_REPEL_MARAUDERS, // Repel marauders attacking villages or supply lines
|
||||
TASK_CONDUCT_SEARCH_AND_DESTROY, // Conduct a search and destroy mission against a specific target
|
||||
TASK_RECOVER_LIFESAVING_MEDICINE, // Recover life-saving medicine from a dangerous or remote location
|
||||
TASK_DEFEND_SHIPPING_LANES, // Defend shipping lanes from pirates or enemy navies
|
||||
TASK_RESCUE_CAPTURED_LEADER, // Rescue a captured leader before they are executed or turned against you
|
||||
TASK_SECURE_FORTIFIED_CAMP, // Secure a camp heavily fortified but under threat of attack
|
||||
TASK_REPEL_ENEMY_RAID, // Repel an enemy raid on your base or territory
|
||||
TASK_REPAIR_BREACHED_WALL, // Repair a wall breached by enemy forces during an assault
|
||||
TASK_DEFEND_WATER_SUPPLY, // Defend a water supply from being poisoned or cut off
|
||||
TASK_RECOVER_DANGEROUS_ARTIFACT, // Recover an artifact that could cause great harm if left in the wrong hands
|
||||
TASK_CONDUCT_RECON_MISSION, // Conduct a reconnaissance mission to gather vital information
|
||||
TASK_RECLAIM_ABANDONED_MINE, // Reclaim an abandoned mine overrun by enemies or dangerous creatures
|
||||
TASK_REPEL_WINTER_OFFENSIVE, // Repel a winter offensive launched by the enemy
|
||||
TASK_DEFEND_TRADING_HUB, // Defend a trading hub crucial for economic stability
|
||||
TASK_SECURE_SECRET_DOCUMENTS, // Secure documents that contain secret or sensitive information
|
||||
TASK_RECOVER_STOLEN_HORSES, // Recover horses stolen by bandits or enemy forces
|
||||
TASK_CONSTRUCT_WATCHTOWER_AT_BORDER, // Construct a watchtower at the border for surveillance and defense
|
||||
TASK_REPEL_NAVAL_RAIDERS, // Repel raiders attacking from the sea or river
|
||||
TASK_DEFEND_BORDER_WATCHTOWER, // Defend a border watchtower from being overrun by enemy forces
|
||||
TASK_RESCUE_CAPTIVE_CHILDREN, // Rescue children taken captive by enemies or slavers
|
||||
TASK_RECOVER_STOLEN_IDOLS, // Recover idols stolen from a temple or sacred site
|
||||
TASK_DEFEND_MINING_OPERATION, // Defend a mining operation from hostile forces or sabotage
|
||||
TASK_CONSTRUCT_SIEGE_ENGINE, // Construct a siege engine for an upcoming battle
|
||||
TASK_REPEL_ENEMY_CHAMPION, // Repel an enemy champion challenging your forces or territory
|
||||
TASK_SECURE_SMUGGLER_ROUTE, // Secure a smuggler's route to prevent illegal trade or enemy infiltration
|
||||
TASK_DEFEND_TOWN_HALL, // Defend the town hall from an insurrection or attack
|
||||
TASK_RESCUE_ABANDONED_WAGON, // Rescue a wagon left behind in enemy territory or dangerous conditions
|
||||
TASK_RECOVER_MAGIC_AMULET, // Recover a magic amulet of significant power or importance
|
||||
TASK_REPEL_BARBARIAN_RAID, // Repel a raid by barbarian tribes attacking a settlement or outpost
|
||||
TASK_DEFEND_SUPPLY_CONVOY, // Defend a supply convoy transporting crucial goods
|
||||
TASK_RECLAIM_HOLY_SITE, // Reclaim a holy site taken over by enemies or desecrated by invaders
|
||||
TASK_SECURE_TRADE_AGREEMENT, // Secure a trade agreement to strengthen economic ties between regions
|
||||
TASK_REPEL_ENEMY_VANGUARD, // Repel an enemy vanguard seeking to establish a foothold
|
||||
TASK_DEFEND_FARM, // Defend a farm from being raided or destroyed
|
||||
TASK_RECOVER_LAWLESS_TERRITORY, // Recover a territory overrun by outlaws or bandits
|
||||
TASK_REPAIR_FORTRESS_WALL, // Repair a damaged fortress wall to prevent further breaches
|
||||
TASK_CONSTRUCT_CITY_GATE, // Construct a gate to secure a city or major settlement
|
||||
TASK_REPEL_ENEMY_INVADERS, // Repel enemy invaders from your territory or homeland
|
||||
TASK_DEFEND_MOUNTAIN_OUTPOST, // Defend a mountain outpost from being overtaken by enemies
|
||||
TASK_RECLAIM_ANCIENT_WEAPON, // Reclaim an ancient weapon lost or hidden in enemy territory
|
||||
TASK_SECURE_VALLEY_PASSAGE, // Secure a valley passage critical for movement or trade
|
||||
TASK_REPEL_SWAMP_RAIDERS, // Repel raiders attacking from a swampy region
|
||||
TASK_CONSTRUCT_HILL_FORT, // Construct a fort on a hill for strategic defense
|
||||
TASK_REPAIR_MILITARY_BASE, // Repair a military base damaged by enemy action
|
||||
TASK_DEFEND_ANCIENT_FORT, // Defend an ancient fort from modern threats
|
||||
TASK_RECOVER_ENCHANTED_TALISMAN, // Recover an enchanted talisman from a dangerous location
|
||||
TASK_REPEL_NOMADIC_RAID, // Repel a raid by nomadic tribes
|
||||
TASK_SECURE_OLD_CASTLE, // Secure an old castle to use as a stronghold
|
||||
TASK_CONDUCT_EVACUATION, // Conduct an evacuation of civilians from a dangerous area
|
||||
TASK_DEFEND_RURAL_VILLAGE, // Defend a rural village from raiders or invaders
|
||||
TASK_RETRIEVE_HIDDEN_TREASURE, // Retrieve treasure hidden in a well-guarded location
|
||||
TASK_CONSTRUCT_BUNKERS, // Construct bunkers for troops or civilians
|
||||
TASK_REPAIR_BATTLEFIELD_EQUIPMENT, // Repair equipment used in recent battles
|
||||
TASK_DEFEND_TEMPLE, // Defend a temple from desecration or attack
|
||||
TASK_REPEL_INVADING_HORDES, // Repel hordes of enemies attacking from multiple directions
|
||||
TASK_SECURE_SUPPLY_ROUTE, // Secure a route used for transporting supplies
|
||||
TASK_RECOVER_ANTIQUITIES, // Recover valuable antiquities from thieves or looters
|
||||
TASK_DEFEND_TREASURE_VAULT, // Defend a vault containing valuable treasure
|
||||
TASK_CONSTRUCT_FIELD_DEFENSES, // Construct defenses in an open field to resist an assault
|
||||
TASK_REPAIR_OLD_WATCHTOWER, // Repair an old watchtower for improved surveillance
|
||||
TASK_REPEL_SIEGE_WEAPONS, // Repel enemy siege weapons targeting your defenses
|
||||
TASK_SECURE_ENCHANTED_FOREST, // Secure a forest with magical properties from intruders
|
||||
TASK_DEFEND_REMOTE_OUTPOST, // Defend a remote outpost from encroaching enemies
|
||||
TASK_REPAIR_MAGE_TOWER, // Repair a tower used by mages for their magical operations
|
||||
TASK_RECOVER_VITAL_SUPPLIES, // Recover essential supplies lost or stolen in conflict
|
||||
TASK_CONSTRUCT_DEFENSIVE_GATES, // Construct gates to enhance the defense of a fortification
|
||||
TASK_REPEL_CLAN_WARLORD, // Repel a warlord leading a clan assault
|
||||
TASK_DEFEND_HISTORICAL_SITE, // Defend a site of historical significance from destruction
|
||||
TASK_REPAIR_FORTIFIED_WALLS, // Repair walls of a fortification to restore its defensive capability
|
||||
TASK_SECURE_TACTICAL_POSITION, // Secure a position of tactical importance in an ongoing conflict
|
||||
TASK_RECOVER_STOLEN_EQUIPMENT, // Recover equipment stolen by enemies or thieves
|
||||
TASK_DEFEND_CIVILIAN_CONVOY, // Defend a convoy of civilians traveling through dangerous areas
|
||||
TASK_CONSTRUCT_REINFORCED_BARRICADES, // Construct barricades reinforced for extra protection
|
||||
TASK_REPEL_WILD_CREATURES, // Repel wild creatures threatening settlements or supply lines
|
||||
TASK_DEFEND_IMPORTANT_BRIDGE, // Defend a bridge critical for transportation and defense
|
||||
TASK_RECOVER_ENEMY_WEAPONS, // Recover weapons lost or captured from the enemy
|
||||
TASK_SECURE_HIDDEN_LAIR, // Secure a hidden lair from intruders or hostile forces
|
||||
TASK_REPAIR_DAMAGED_PALACE, // Repair a palace damaged by conflict or disaster
|
||||
TASK_DEFEND_CULTURAL_CENTER, // Defend a cultural center from attack or vandalism
|
||||
TASK_CONSTRUCT_SHIELD_WALL, // Construct a shield wall to protect against a siege or assault
|
||||
TASK_REPEL_TROLLS, // Repel trolls attacking from mountainous or rocky terrain
|
||||
TASK_RECOVER_ANCIENT_SCROLLS, // Recover ancient scrolls from a protected location
|
||||
TASK_DEFEND_FOREST_VILLAGE, // Defend a village situated within a dense forest from invaders
|
||||
TASK_REPAIR_MYSTIC_OBELISK, // Repair a mystic obelisk of significance to local magical traditions
|
||||
TASK_CONSTRUCT_FORTRESS_TOWER, // Construct a tower within a fortress for better defense and observation
|
||||
TASK_SECURE_ABANDONED_OUTPOST, // Secure an outpost that was previously abandoned
|
||||
TASK_DEFEND_NATIONAL_MONUMENT, // Defend a monument of national importance from damage or theft
|
||||
TASK_RECOVER_HEIRLOOM_WEAPON, // Recover a weapon of significant familial or historical value
|
||||
TASK_CONDUCT_STRATEGIC_SURVEY, // Conduct a survey to assess strategic locations and conditions
|
||||
TASK_REPEL_DARK_MAGIC_USERS, // Repel dark magic users attempting to infiltrate or attack
|
||||
TASK_SECURE_HIDDEN_TREASURE, // Secure treasure hidden in a secret location
|
||||
TASK_DEFEND_RITUAL_SITE, // Defend a site used for important rituals from disruption or attack
|
||||
TASK_REPAIR_MAGICAL_BARRIER, // Repair a magical barrier protecting a critical location
|
||||
TASK_CONSTRUCT_ARTILLERY_EMPLACEMENTS, // Construct emplacements for artillery to enhance defensive capabilities
|
||||
TASK_RECOVER_ANCESTRAL_TREASURE, // Recover treasure passed down through generations from a safe location
|
||||
TASK_DEFEND_MYSTICAL_SPRING, // Defend a mystical spring with significant magical properties
|
||||
TASK_REPAIR_AIRSHIP, // Repair an airship damaged during aerial conflict or travel
|
||||
TASK_SECURE_AIRSPACE, // Secure airspace from aerial threats or intrusions
|
||||
TASK_CONDUCT_MASS_EVACUATION, // Conduct an evacuation of a large population from a threatened area
|
||||
TASK_DEFEND_VITAL_INFRASTRUCTURE, // Defend critical infrastructure from sabotage or attack
|
||||
TASK_RECOVER_DAMAGED_ARTIFACTS, // Recover artifacts damaged during conflicts or raids
|
||||
TASK_CONSTRUCT_REPAIR_STATIONS, // Construct stations for repairing equipment or fortifications
|
||||
TASK_REPEL_CULT_INVADERS, // Repel invaders from a cult or religious faction
|
||||
TASK_SECURE_ANCIENT_TREASURE_TROVE, // Secure a trove of ancient treasures from being plundered
|
||||
TASK_DEFEND_ELITE_TROOPS, // Defend a unit of elite troops from enemy assault or capture
|
||||
TASK_REPAIR_FORTRESS_CANNONS, // Repair cannons within a fortress to restore their effectiveness
|
||||
TASK_CONSTRUCT_REINFORCED_BUNKERS, // Construct bunkers with additional reinforcement for strategic protection
|
||||
TASK_RECOVER_ILLUMINATED_MANUSCRIPTS, // Recover manuscripts with illuminated texts of great value
|
||||
TASK_DEFEND_SECRET_BASE, // Defend a base hidden from enemy eyes from being discovered or attacked
|
||||
TASK_REPAIR_DEFENSIVE_TURRETS, // Repair turrets used for defending against enemy attacks
|
||||
TASK_SECURE_HIGHLY_ENCHANTED_ITEM, // Secure an item of significant magical enchantment
|
||||
TASK_CONDUCT_ELITE_STRIKE_MISSION, // Conduct a high-risk strike mission with elite operatives
|
||||
TASK_DEFEND_AGAINST_MAGIC_ATTACKS, // Defend against magical attacks from enemy spellcasters
|
||||
TASK_RECOVER_HISTORICAL_RELICS, // Recover relics of historical importance from a secure location
|
||||
TASK_REPAIR_ANCIENT_DEFENSES, // Repair ancient defenses to restore their original protective capability
|
||||
TASK_CONSTRUCT_MAGICALLY_ENCHANTED_BARRIERS, // Construct barriers with magical enchantments for enhanced defense
|
||||
TASK_DEFEND_CULTURAL_HERITAGE, // Defend a site of cultural heritage from being attacked or damaged
|
||||
TASK_SECURE_VITAL_MAGIC_ARTIFACT, // Secure a magic artifact crucial to your forces or plans
|
||||
TASK_REPAIR_DILAPIDATED_KEEP, // Repair a keep that has fallen into disrepair and disuse
|
||||
TASK_DEFEND_CRUCIAL_RESOURCE, // Defend a resource essential for survival or strategic advantage
|
||||
TASK_RECOVER_FAMOUS_BATTLE_STANDARD, // Recover a battle standard of historic significance
|
||||
TASK_CONSTRUCT_TACTICAL_FORTIFICATIONS, // Construct fortifications designed for tactical advantage in battle
|
||||
TASK_SECURE_ENCHANTED_WEAPONS, // Secure weapons imbued with enchantments from falling into enemy hands
|
||||
TASK_REPEL_ARMORED_RAIDERS, // Repel raiders equipped with heavy armor and advanced weaponry
|
||||
TASK_DEFEND_RITUAL_ALTAR, // Defend an altar used for significant rituals from desecration
|
||||
TASK_RECOVER_MAGICAL_ENCHANTMENTS, // Recover enchantments lost or stolen from magical artifacts
|
||||
TASK_REPAIR_UNDERGROUND_BUNKERS, // Repair bunkers located underground to ensure their functionality
|
||||
TASK_CONSTRUCT_MAGICAL_OBELISKS, // Construct obelisks with magical properties for enhanced defense or power
|
||||
TASK_DEFEND_VITAL_WAREHOUSE, // Defend a warehouse holding essential supplies or equipment
|
||||
TASK_RECOVER_ANCESTRAL_ARTIFACTS, // Recover artifacts with ancestral or cultural importance
|
||||
TASK_REPAIR_ENCHANTED_FORGE, // Repair a forge used for creating enchanted items
|
||||
TASK_SECURE_COVERT_OPERATION_BASE, // Secure a base used for covert operations and intelligence gathering
|
||||
TASK_DEFEND_COVERT_MEETING_PLACE, // Defend a location used for secret meetings from discovery or attack
|
||||
TASK_RECOVER_ANCIENT_TEXTS, // Recover ancient texts of great knowledge
|
||||
TASK_CONSTRUCT_ELITE_DEFENSIVE_LINE, // Construct a defensive line designed to withstand elite enemy forces
|
||||
TASK_DEFEND_VITAL_TRANSPORT_HUB, // Defend a transport hub crucial for logistics and troop movement
|
||||
TASK_SECURE_MYSTICAL_ARTIFACTS, // Secure artifacts with mystical properties from being stolen or destroyed
|
||||
TASK_RECOVER_COVERT_DOCUMENTS, // Recover documents related to secret operations or intelligence
|
||||
TASK_REPAIR_OBSOLETE_TURRETS, // Repair outdated turrets to bring them back into operational use
|
||||
TASK_DEFEND_ENCHANTED_LIBRARY, // Defend a library containing powerful or magical knowledge from attack
|
||||
TASK_CONSTRUCT_RITUAL_DEFENSES, // Construct defenses specifically designed to protect sacred or ritual sites
|
||||
TASK_REPEL_INVASION_FROM_THE_SEA, // Repel an invasion force approaching by sea
|
||||
TASK_SECURE_ANCIENT_TEMPLE_GATES, // Secure the gates of an ancient temple to prevent unauthorized access
|
||||
TASK_RECOVER_SCARCE_RESOURCES, // Recover resources that are rare or critical for your operations
|
||||
TASK_DEFEND_LANDMARK_STRUCTURE, // Defend a landmark structure of great significance from damage or occupation
|
||||
TASK_CONSTRUCT_FORTIFIED_PERIMETER, // Construct a fortified perimeter around a key installation or settlement
|
||||
TASK_REPAIR_CRUCIAL_COMMUNICATIONS, // Repair communication systems vital for coordinating defense or operations
|
||||
TASK_SECURE_ENCHANTED_BARRIERS, // Secure barriers enhanced with magical protections from being breached
|
||||
TASK_DEFEND_AIRBORNE_OPERATIONS, // Defend operations involving airborne units or assets from enemy interference
|
||||
TASK_RECOVER_HISTORICAL_STATUES, // Recover statues of historical importance from potential damage or theft
|
||||
TASK_REPAIR_MAGICAL_CONDUITS, // Repair conduits used to channel magical energy or spells
|
||||
TASK_CONSTRUCT_REINFORCED_TRENCHE, // Construct a trench with additional reinforcements for better protection
|
||||
TASK_SECURE_MYSTICAL_FOREST, // Secure a forest imbued with mystical properties from intruders
|
||||
TASK_DEFEND_KEY_TRADING_POST, // Defend a trading post crucial for commerce and supply routes
|
||||
TASK_RECOVER_ANCIENT_SCROLLS, // Recover ancient scrolls containing important historical or magical information
|
||||
TASK_CONDUCT_HIGH_STAKES_NEGOTIATIONS, // Conduct negotiations of great importance to resolve conflicts or secure alliances
|
||||
TASK_DEFEND_AGAINST_NECROMANCY, // Defend against necromantic forces or magic targeting your forces or territory
|
||||
TASK_REPAIR_EARTHEN_WALLS, // Repair earthen walls that have been damaged or breached
|
||||
TASK_SECURE_HIDDEN_MINE, // Secure a hidden mine containing valuable resources or artifacts
|
||||
TASK_RECOVER_WOUNDED_VETERANS, // Recover and provide aid to wounded veterans from recent conflicts
|
||||
TASK_DEFEND_ANCIENT_SHRINE, // Defend an ancient shrine from desecration or attack
|
||||
TASK_CONSTRUCT_MAGICAL_WARDS, // Construct wards to protect against magical attacks or intrusions
|
||||
TASK_REPAIR_HISTORICAL_BUILDINGS, // Repair buildings of historical importance damaged in recent events
|
||||
TASK_SECURE_FORTIFIED_OUTPOST, // Secure an outpost with fortifications to prevent enemy capture
|
||||
TASK_DEFEND_VITAL_CROSSROADS, // Defend a crossroads critical for movement and supply routes
|
||||
TASK_RECOVER_DAMAGED_RITUAL_ARTIFACTS, // Recover artifacts used in rituals that have been damaged or lost
|
||||
TASK_REPAIR_ENCHANTED_GATES, // Repair gates enhanced with magical protections to restore their functionality
|
||||
TASK_CONSTRUCT_STRATEGIC_OBSERVATION_POSTS, // Construct posts for strategic observation of enemy movements and positions
|
||||
TASK_SECURE_VITAL_WEAPONSTOCKS, // Secure stocks of vital weapons from being seized or destroyed
|
||||
TASK_DEFEND_CRUCIAL_FORTIFICATION, // Defend a fortification crucial for maintaining control over a region
|
||||
TASK_RECOVER_ANCIENT_WEAPONS, // Recover weapons of ancient origin with significant power or historical value
|
||||
TASK_REPAIR_CIVILIAN_INFRASTRUCTURE, // Repair infrastructure essential for civilian life and support
|
||||
TASK_SECURE_CRITICAL_LANDMARKS, // Secure landmarks of great strategic or symbolic importance from threat
|
||||
TASK_DEFEND_AGAINST_SPY_INTRUSION, // Defend against espionage attempts targeting sensitive areas or information
|
||||
TASK_RECOVER_SENSITIVE_DATA, // Recover data critical to operations or security from compromised sources
|
||||
TASK_CONSTRUCT_ENCHANTED_CAVERN_DEFENSES, // Construct defenses within a cavern with magical enchantments
|
||||
TASK_REPAIR_TREASURE_VAULTS, // Repair vaults used to store valuable treasures and artifacts
|
||||
TASK_SECURE_GREAT_LIBRARY, // Secure a large library holding extensive and valuable knowledge
|
||||
TASK_DEFEND_INFLUENTIAL_LEADER, // Defend a leader of great influence from threats or attempts on their life
|
||||
TASK_RECOVER_CRITICAL_MEDICAL_SUPPLIES, // Recover medical supplies essential for treatment and recovery
|
||||
TASK_REPAIR_DAMAGED_BATTLEFIELD_STRATEGY, // Repair and adjust strategies used on the battlefield based on recent damage
|
||||
TASK_CONSTRUCT_ELITE_PROTECTIVE_ARMOR, // Construct armor designed for elite troops or high-value targets
|
||||
TASK_SECURE_ANCIENT_SECRET_TREASURE, // Secure treasure hidden in ancient locations of historical importance
|
||||
TASK_DEFEND_HIDDEN_MILITARY_BASE, // Defend a secret military base from discovery or attack
|
||||
TASK_RECOVER_DAMAGED_MAGIC_ITEMS, // Recover magic items damaged during recent conflicts or raids
|
||||
TASK_REPAIR_BATTLEFIELD_ARTIFACTS, // Repair artifacts found on the battlefield essential for historical or strategic reasons
|
||||
TASK_CONSTRUCT_PROTECTIVE_RUNES, // Construct runes for protection against magical or physical threats
|
||||
TASK_SECURE_LEGENDARY_SITES, // Secure sites of legendary significance from threats or exploitation
|
||||
TASK_DEFEND_STRATEGIC_TRADE_ROUTE, // Defend a trade route vital for commerce and resource distribution
|
||||
TASK_RECOVER_MYSTICAL_ARTIFACTS, // Recover artifacts with mystical significance from dangerous locations
|
||||
TASK_REPAIR_CRITICAL_INDUSTRIAL_EQUIPMENT, // Repair equipment crucial for industrial operations and production
|
||||
TASK_CONSTRUCT_RITUALISTIC_DEFENSES, // Construct defenses based on ritualistic or magical designs for enhanced protection
|
||||
TASK_SECURE_HIDDEN_MYSTICAL_ARTIFACTS, // Secure mystical artifacts hidden from general knowledge or access
|
||||
TASK_DEFEND_CULTURAL_INSTITUTIONS, // Defend institutions dedicated to culture and the arts from attack or damage
|
||||
TASK_RECOVER_DAMAGED_STATUES, // Recover and restore statues of artistic or historical significance
|
||||
TASK_REPAIR_DEMOLISHED_FORTIFICATIONS, // Repair fortifications that have been demolished or heavily damaged
|
||||
TASK_CONSTRUCT_UNDERGROUND_BUNKERS, // Construct bunkers underground to provide protection and concealment
|
||||
TASK_SECURE_HISTORICAL_SITES, // Secure sites of historical importance from damage, theft, or unauthorized access
|
||||
TASK_DEFEND_MYSTICAL_CAVES, // Defend caves with mystical properties from intrusion or desecration
|
||||
TASK_RECOVER_EXPERT_CRAFTSMAN, // Recover a skilled craftsman who can create or repair valuable items
|
||||
TASK_REPAIR_ANCIENT_DEFENSIVE_STRUCTURES, // Repair ancient structures designed for defensive purposes
|
||||
TASK_CONSTRUCT_ENCHANTED_PROTECTIVE_BARRIERS, // Construct barriers enhanced with enchantments for superior protection
|
||||
TASK_SECURE_ECONOMICALLY_VITAL_RESOURCES, // Secure resources critical for economic stability and growth
|
||||
TASK_DEFEND_AGAINST_MAGICAL_BEASTS, // Defend against beasts with magical properties or abilities
|
||||
TASK_RECOVER_ENCHANTED_SCROLLS, // Recover scrolls imbued with magic from secure locations
|
||||
TASK_REPAIR_HIGH_PRIORITY_EQUIPMENT, // Repair equipment deemed high priority for ongoing operations
|
||||
TASK_CONSTRUCT_FORTIFIED_RESEARCH_LAB, // Construct a research lab with fortified defenses for scientific or magical work
|
||||
TASK_SECURE_MAGICALLY_ENHANCED_TREASURE, // Secure treasure with magical enhancements from theft or damage
|
||||
TASK_DEFEND_TACTICAL_OUTPOSTS, // Defend outposts critical for tactical operations and defense
|
||||
TASK_RECOVER_RARE_ALCHEMICAL_REAGENTS, // Recover reagents used in alchemy that are rare or essential
|
||||
TASK_REPAIR_PROTECTIVE_MAGIC_CONDUITS, // Repair conduits used to channel protective magic or enchantments
|
||||
TASK_CONSTRUCT_ADVANCED_DEFENSIVE_FORTIFICATIONS, // Construct advanced fortifications for improved defense against formidable threats
|
||||
TASK_DEFEND_ENCHANTED_SPRING, // Defend a spring with magical properties from exploitation or attack
|
||||
TASK_RECOVER_LOST_CIVILIZATION_ARTIFACTS, // Recover artifacts from a lost civilization of great historical or magical significance
|
||||
TASK_REPAIR_ADVANCED_SEA_DEFENSES, // Repair advanced defenses designed to protect against sea-based attacks
|
||||
TASK_CONSTRUCT_SECURE_RITUAL_CHAMBERS, // Construct chambers designed for performing high-security rituals
|
||||
TASK_SECURE_CRITICAL_MAGE_TOWER, // Secure a mage tower vital for magical operations and research
|
||||
TASK_DEFEND_HEAVILY_FORTIFIED_CITY, // Defend a city with extensive fortifications from sieges or attacks
|
||||
TASK_RECOVER_ANCIENT_TECHNOLOGY, // Recover technology of ancient origin with significant power or utility
|
||||
TASK_REPAIR_EXPERIMENTAL_WEAPONS, // Repair weapons of experimental design used for cutting-edge combat
|
||||
TASK_CONSTRUCT_PROTECTIVE_ENCHANTMENTS, // Construct enchantments to protect key locations or items from magical harm
|
||||
TASK_SECURE_ALCHEMICAL_REACTORS, // Secure reactors used in alchemy or magical experiments from threats
|
||||
TASK_DEFEND_SUPPLY_DEPOT, // Defend a depot holding critical supplies from sabotage or theft
|
||||
TASK_RECOVER_DAMAGED_ANTIQUITIES, // Recover and restore antiquities damaged in recent conflicts
|
||||
TASK_REPAIR_TACTICAL_ENGINES, // Repair engines used in tactical operations or war machines
|
||||
TASK_CONSTRUCT_RESEARCH_STATIONS, // Construct stations dedicated to research in strategic or magical fields
|
||||
TASK_SECURE_MAGICAL_TRANSMISSION_TOWERS, // Secure towers used for transmitting magical energy or signals from interference
|
||||
TASK_DEFEND_CONSTRUCTED_EMBASSIES, // Defend embassies constructed in dangerous regions from attack or breach
|
||||
TASK_RECOVER_OBSOLETE_ARTIFACTS, // Recover artifacts that have fallen out of use but are still of historical value
|
||||
TASK_REPAIR_SECURE_CHESTS, // Repair chests used to store valuable or sensitive items
|
||||
TASK_CONSTRUCT_FORTIFIED_COMMAND_BUNKERS, // Construct command bunkers with advanced fortifications for strategic command
|
||||
TASK_SECURE_ANCIENT_POWER_SOURCES, // Secure sources of ancient power from theft or misuse
|
||||
TASK_DEFEND_INFLUENTIAL_ORGANIZATIONS, // Defend organizations of great influence or power from hostile actions
|
||||
TASK_RECOVER_LOST_TREASURES, // Recover treasures that have been lost or hidden over time
|
||||
TASK_REPAIR_EXOTIC_ARTIFACTS, // Repair artifacts of exotic origin that are crucial for various operations
|
||||
TASK_CONSTRUCT_SUPPLY_CHAIN_DEFENSES, // Construct defenses to protect critical supply chains from disruption
|
||||
TASK_SECURE_LEGENDARY_TREASURE_CACHES, // Secure caches of treasure with legendary status from plunder
|
||||
TASK_DEFEND_HIGH_PRIORITY_RESEARCH_LABS, // Defend research labs with high-priority projects from attack
|
||||
TASK_RECOVER_SENSITIVE_EQUIPMENT, // Recover equipment essential for operations that has been compromised or lost
|
||||
TASK_REPAIR_ANCIENT_MILITARY_EQUIPMENT, // Repair equipment of ancient military origin for restoration and use
|
||||
TASK_CONSTRUCT_ENCHANTED_SECURITY_SYSTEMS, // Construct security systems with enchantments for heightened protection
|
||||
TASK_SECURE_HISTORICAL_RESEARCH_ARCHIVES, // Secure archives containing historical research from unauthorized access or damage
|
||||
TASK_DEFEND_CRITICAL_WAR_SUPPLIES, // Defend supplies critical for ongoing war efforts from attack or theft
|
||||
TASK_RECOVER_MAGICALLY_ENHANCED_GEAR, // Recover gear enhanced with magical properties that has been lost or stolen
|
||||
TASK_REPAIR_FORTIFIED_MILITARY_OUTPOSTS, // Repair military outposts with fortifications to restore their effectiveness
|
||||
TASK_CONSTRUCT_STRATEGIC_MAGICAL_OBSERVATORIES, // Construct observatories designed for monitoring magical events or phenomena
|
||||
TASK_SECURE_ANCIENT_ENCHANTED_RELICS, // Secure relics with ancient enchantments from being disturbed or misused
|
||||
TASK_DEFEND_HIGHLY_SENSITIVE_SITES, // Defend sites with highly sensitive information or assets from breaches
|
||||
TASK_RECOVER_VITAL_MAGICAL_ESSENCES, // Recover essences crucial for magical operations or artifacts
|
||||
TASK_REPAIR_ADVANCED_ENCHANTMENT_DEVICES, // Repair devices used for advanced enchantments or magical operations
|
||||
TASK_CONSTRUCT_ENCHANTED_TACTICAL_GATES, // Construct gates with enchantments for tactical advantage in defense
|
||||
TASK_SECURE_CRITICAL_ENCHANTED_RESOURCES, // Secure resources imbued with enchantments essential for various uses
|
||||
TASK_DEFEND_AGAINST_MAGICAL_INTERFERENCE, // Defend against interference from magical sources or entities
|
||||
TASK_RECOVER_OLD_TRADITIONAL_WEAPONS, // Recover traditional weapons with significant historical or cultural importance
|
||||
TASK_REPAIR_HIGH_ECH_ARTIFACTS, // Repair artifacts with high technological advancements from damage or malfunction
|
||||
TASK_CONSTRUCT_MAGICALLY_PROTECTED_BARRIERS, // Construct barriers protected with magic for superior defense
|
||||
TASK_SECURE_ENCHANTED_TREASURE_VAULTS, // Secure vaults holding treasure with magical enhancements
|
||||
TASK_DEFEND_KEY_SACRED_SITES, // Defend sacred sites of great importance from desecration or attack
|
||||
TASK_RECOVER_HISTORIC_MILITARY_DOCUMENTS, // Recover documents of historic military importance from secure locations
|
||||
TASK_REPAIR_ADVANCED_PROTECTIVE_SYSTEMS, // Repair systems designed for advanced protection against various threats
|
||||
TASK_CONSTRUCT_DEFENSIVE_RITUALS, // Construct defensive measures based on rituals for enhanced protection
|
||||
TASK_SECURE_HIDDEN_MAGIC_TREASURES, // Secure hidden treasures with magical properties from discovery or theft
|
||||
TASK_DEFEND_CRITICAL_MAGICAL_GATES, // Defend gates with significant magical importance from breach or damage
|
||||
TASK_RECOVER_ANCIENT_ENCHANTMENTS, // Recover enchantments from ancient sources that have been lost or hidden
|
||||
TASK_REPAIR_SECURE_RESEARCH_EQUIPMENT, // Repair equipment used in secure research environments
|
||||
TASK_CONSTRUCT_TACTICAL_ENCHANTED_FORTIFICATIONS, // Construct fortifications with tactical enchantments for strategic defense
|
||||
TASK_SECURE_VITAL_ANCIENT_GRIMOIRES, // Secure grimoires containing ancient knowledge from unauthorized access
|
||||
TASK_DEFEND_INTERNATIONAL_TREATY_SITES, // Defend sites related to international treaties from violations or attacks
|
||||
TASK_RECOVER_HISTORIC_CONSTRUCTION_PLANS, // Recover plans related to historic constructions of strategic importance
|
||||
TASK_REPAIR_DEFENSIVE_ENCHANTMENTS, // Repair enchantments used to protect key defensive structures or assets
|
||||
TASK_CONSTRUCT_ADVANCED_MAGE_BARRIERS, // Construct barriers with advanced magical properties for high-level protection
|
||||
TASK_SECURE_ENCHANTED_WEAPON_STORAGE, // Secure storage areas for weapons with magical enhancements
|
||||
TASK_DEFEND_AGAINST_RITUALISTIC_ATTACKS, // Defend against attacks based on ritualistic or magical practices
|
||||
TASK_RECOVER_HISTORICAL_ARTIFACTS, // Recover artifacts with significant historical value from secure locations
|
||||
TASK_REPAIR_TACTICAL_MAGIC_BARRIERS, // Repair barriers designed for tactical use in magical defenses
|
||||
TASK_CONSTRUCT_SUPPLY_CHAIN_SECURITY, // Construct security measures for protecting critical supply chains
|
||||
TASK_SECURE_ENCHANTED_MILITARY_INSTALLATIONS, // Secure military installations with magical enhancements
|
||||
TASK_DEFEND_HIGH_VALUE_RESEARCH_FACILITIES, // Defend research facilities of high value from threats and breaches
|
||||
TASK_RECOVER_DAMAGED_MYSTICAL_ARTIFACTS, // Recover and restore artifacts of mystical importance that have been damaged
|
||||
TASK_REPAIR_ADVANCED_DEFENSIVE_CONDUITS, // Repair conduits used for advanced defensive measures
|
||||
TASK_CONSTRUCT_MAGICAL_HARVESTING_STATIONS, // Construct stations for harvesting magical resources or energy
|
||||
TASK_SECURE_CRUCIAL_MAGICAL_TRANSPORTS, // Secure transport routes or vessels used for moving magical resources
|
||||
TASK_DEFEND_RESEARCH_AND_DEVELOPMENT_SITES, // Defend sites dedicated to research and development from attacks or sabotage
|
||||
TASK_RECOVER_EXOTIC_RITUAL_ARTIFACTS, // Recover artifacts used in exotic rituals from danger or theft
|
||||
TASK_REPAIR_ADVANCED_STRATEGIC_ARTIFACTS, // Repair strategic artifacts with advanced features or technology
|
||||
TASK_CONSTRUCT_FORTIFIED_MAGIC_WARDS, // Construct wards with fortifications to enhance magical protection
|
||||
TASK_SECURE_LEGENDARY_ENCHANTED_ITEMS, // Secure items of legendary enchantment from theft or destruction
|
||||
TASK_DEFEND_ANTIQUITY_STORAGE_FACILITIES, // Defend facilities storing valuable antiquities from breach or damage
|
||||
TASK_RECOVER_HISTORICAL_RESEARCH_EQUIPMENT, // Recover equipment used in historical research from loss or damage
|
||||
TASK_REPAIR_TACTICAL_ENCHANTED_ARTIFACTS, // Repair artifacts with tactical enchantments for improved functionality
|
||||
TASK_CONSTRUCT_ENCHANTED_PROTECTIVE_SHELTERS, // Construct shelters with magical protection for safety and security
|
||||
TASK_SECURE_ANCIENT_MAGIC_SECRETS, // Secure secrets related to ancient magic from being exposed or misused
|
||||
TASK_DEFEND_CRITICAL_MAGIC_RESEARCH, // Defend research focused on magic from disruption or attack
|
||||
TASK_RECOVER_DAMAGED_HISTORICAL_RELICS, // Recover and restore relics of historical significance that have been damaged
|
||||
};
|
||||
|
||||
#endif
|
||||
23
models/guild/GuildBanner.h
Normal file
23
models/guild/GuildBanner.h
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
/**
|
||||
* Jingga
|
||||
*
|
||||
* @copyright Jingga
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
#ifndef TOS_MODELS_GUILD_BANNER_H
|
||||
#define TOS_MODELS_GUILD_BANNER_H
|
||||
|
||||
struct GuildBanner {
|
||||
int shape;
|
||||
int colors;
|
||||
|
||||
int crest;
|
||||
int crest_colors;
|
||||
|
||||
int pole;
|
||||
int pole_colors;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -11,23 +11,37 @@
|
|||
|
||||
#include "../../stdlib/Types.h"
|
||||
|
||||
#include "../../mob/MobStats.h"
|
||||
#include "../../mob/skill/StatsTarget.h"
|
||||
#include "../mob/MobStats.h"
|
||||
#include "../mob/skill/StatsTarget.h"
|
||||
|
||||
// @todo when to use points and when to use values?
|
||||
|
||||
struct Equipment {
|
||||
byte type;
|
||||
char* name;
|
||||
};
|
||||
|
||||
// @tood how to handle multiplicative stats?
|
||||
// you can have 2 stats for 2 target types (e.g. you could create a buff and debuff in one skill)
|
||||
SMobStats stats1;
|
||||
StatsTarget stats1_target;
|
||||
struct SEquipmentStatsPoints {
|
||||
// Item requirements
|
||||
PrimaryStatsPoints requirements;
|
||||
|
||||
SMobStats stats2;
|
||||
StatsTarget stats2_target;
|
||||
// Item stats
|
||||
// items cannot have stats like str, they can only modify primary stats of chars (see below)
|
||||
SecondaryStatsPoints secondary_item;
|
||||
|
||||
// @todo probably add more of the Skill attributes here
|
||||
// @question what should be part of skills and what should be part of items?!?!?!?
|
||||
// Modifies the char stats
|
||||
// @todo A character cannot do for example fire damage (only items and skills can do that)
|
||||
// This means these stats are unused and just use up memory
|
||||
PrimaryStatsPoints primary_char_add;
|
||||
PrimaryStatsRelPoints primary_char_mul;
|
||||
|
||||
SecondaryStatsPoints secondary_char_add;
|
||||
SecondaryStatsRelPoints secondary_char_mul;
|
||||
|
||||
// Modifies the skills
|
||||
// only modifies skills that have these stats != 0
|
||||
SecondaryStatsPoints secondary_skill_add;
|
||||
SecondaryStatsRelPoints secondary_skill_mul;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -20,6 +20,7 @@ struct EquipmentType {
|
|||
bool damage;
|
||||
bool armor;
|
||||
bool supporting;
|
||||
bool beam;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1 @@
|
|||
// @todo
|
||||
24
models/mob/ActivityStats.h
Normal file
24
models/mob/ActivityStats.h
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
/**
|
||||
* Jingga
|
||||
*
|
||||
* @copyright Jingga
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
#ifndef TOS_MODELS_MOB_ACTIVITY_STATS_H
|
||||
#define TOS_MODELS_MOB_ACTIVITY_STATS_H
|
||||
|
||||
#include "../../stdlib/Types.h"
|
||||
|
||||
/**
|
||||
* @todo optimize order of struct members to ensure optimal struct size
|
||||
*/
|
||||
|
||||
struct SActivityStats {
|
||||
int32 farming;
|
||||
int32 thiefing;
|
||||
int32 mining;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -26,14 +26,14 @@ void mob_interpolate(Mob* mob, f32 time)
|
|||
|
||||
float p = OMS_MIN(t2 / t1, 1.0f);
|
||||
|
||||
mob->state.location.x = s1->location.x + (s2->location.x - s1->location.x) * p;
|
||||
mob->state.location.y = s1->location.y + (s2->location.y - s1->location.y) * p;
|
||||
mob->state.location.z = s1->location.z + (s2->location.z - s1->location.z) * p;
|
||||
mob->state.location.position.x = s1->location.position.x + (s2->location.position.x - s1->location.position.x) * p;
|
||||
mob->state.location.position.y = s1->location.position.y + (s2->location.position.y - s1->location.position.y) * p;
|
||||
mob->state.location.position.z = s1->location.position.z + (s2->location.position.z - s1->location.position.z) * p;
|
||||
|
||||
mob->state.orientation.x = s1->orientation.x + (s2->orientation.x - s1->orientation.x) * p;
|
||||
mob->state.orientation.y = s1->orientation.y + (s2->orientation.y - s1->orientation.y) * p;
|
||||
mob->state.orientation.z = s1->orientation.z + (s2->orientation.z - s1->orientation.z) * p;
|
||||
mob->state.orientation.w = s1->orientation.w + (s2->orientation.w - s1->orientation.w) * p;
|
||||
mob->state.location.orientation.x = s1->location.orientation.x + (s2->location.orientation.x - s1->location.orientation.x) * p;
|
||||
mob->state.location.orientation.y = s1->location.orientation.y + (s2->location.orientation.y - s1->location.orientation.y) * p;
|
||||
mob->state.location.orientation.z = s1->location.orientation.z + (s2->location.orientation.z - s1->location.orientation.z) * p;
|
||||
mob->state.location.orientation.w = s1->location.orientation.w + (s2->location.orientation.w - s1->location.orientation.w) * p;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -16,6 +16,8 @@
|
|||
|
||||
#include "MobState.h"
|
||||
|
||||
// @todo consider to create 3 mob state arrays instead and have every array ordered in the same way
|
||||
|
||||
struct Mob {
|
||||
byte category;
|
||||
byte mclass;
|
||||
|
|
@ -29,6 +31,26 @@ struct Mob {
|
|||
MobState state;
|
||||
MobState state1;
|
||||
MobState state2;
|
||||
|
||||
// Data layout
|
||||
// 12223444
|
||||
// 1: scale sign
|
||||
// 2: scale factor (8)
|
||||
// 3: weight sign
|
||||
// 4: weight factor (8)
|
||||
byte scale;
|
||||
byte weight;
|
||||
|
||||
// Data layout
|
||||
// 11111112222222333333344444445555
|
||||
// 1: Base color (skin color)
|
||||
// 2: Second color (head hair color)
|
||||
// 3: Third color (head hair color)
|
||||
// 4: Fourth color (head hair color)
|
||||
// 5: Fifth color (head hair color)
|
||||
|
||||
SecondaryStatsValues max;
|
||||
SecondaryStatsValues current;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -9,13 +9,20 @@
|
|||
#ifndef TOS_MODELS_MOB_STATE_H
|
||||
#define TOS_MODELS_MOB_STATE_H
|
||||
|
||||
#include "../Location.h"
|
||||
#include "../../stdlib/Types.h"
|
||||
#include "../../stdlib/Mathtypes.h"
|
||||
#include "MobAction.h"
|
||||
|
||||
/**
|
||||
* @todo optimize order of struct members to ensure optimal struct size
|
||||
*/
|
||||
|
||||
// @todo consider to have an array of mob_location which contains position+orientation probably much better cache wise?
|
||||
// but these locations are only chunk relative?! Well the absolute position comes from the chunk id.
|
||||
// The whole world is split into a x b x c chunks
|
||||
|
||||
struct MobState {
|
||||
v3_f32 location;
|
||||
v4_f32 orientation;
|
||||
Location location;
|
||||
|
||||
float t;
|
||||
|
||||
|
|
@ -24,9 +31,10 @@ struct MobState {
|
|||
// last 3 bytes = animation to use
|
||||
uint32 action = (MOB_ACTION_INACTIVE << 24);
|
||||
|
||||
int chunk_id;
|
||||
|
||||
bool in_battle;
|
||||
|
||||
int chunk_id;
|
||||
byte environment; // dungeon/raid, pvp-openworld, pvp, pvp-tournament, open-world, instance-private, instance-invite, housing,
|
||||
};
|
||||
|
||||
|
|
|
|||
48
models/mob/MobStats.cpp
Normal file
48
models/mob/MobStats.cpp
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
/**
|
||||
* Jingga
|
||||
*
|
||||
* @copyright Jingga
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
#ifndef TOS_MODELS_MOB_STATS_C
|
||||
#define TOS_MODELS_MOB_STATS_C
|
||||
|
||||
#include "MobStats.h"
|
||||
#include "../../stdlib/simd/SIMD_I32.h"
|
||||
|
||||
// Calculate whenever character points or items change
|
||||
// 1. combine primary Item points with character points
|
||||
// 2. combine secondary item points with character points
|
||||
// 3. calculate semi static character values from points
|
||||
|
||||
// Calculated for every skill and then cached whenever that skill is used
|
||||
inline
|
||||
void calculate_modify_values(
|
||||
const Skill* skill,
|
||||
const SMobStatsTotal* mob_stats,
|
||||
const SEquipmentStatsTotal* item_stats,
|
||||
SecondaryStatsValues* modify_values
|
||||
)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// @todo check what to do??
|
||||
|
||||
inline
|
||||
void handle_character_fight_action(
|
||||
const SecondaryStatsValues* modify_values,
|
||||
const Skill* skill,
|
||||
SecondaryStatsValues *mob_values,
|
||||
int steps
|
||||
)
|
||||
{
|
||||
// @todo not correct since the modify_value needs further modification in relation to the effected mob (e.g. defense consideration)
|
||||
// but this means i also need the skill as parameter
|
||||
int32_4_add((int32 *) modify_values, (int32 *) mob_values, (int32 *) mob_values, 10, steps);
|
||||
f32_4_add((f32 *) (modify_values + 1), (f32 *) (mob_values + 1), (f32 *) (mob_values + 1), 10, steps);
|
||||
}
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -14,6 +14,7 @@
|
|||
#include "../../../utils/MathUtils.h"
|
||||
#include "Drop.h"
|
||||
|
||||
// @todo how to do class specific loot table?
|
||||
struct LootTable {
|
||||
// Chance this table becomes effective at all
|
||||
// Useful to define multiple loot tables for a mob e.g. normal drop + 1 rare guarantueed
|
||||
|
|
@ -38,6 +39,10 @@ struct LootTable {
|
|||
// How much gold should be dropped
|
||||
uint32 gold_min_count;
|
||||
uint32 gold_max_count;
|
||||
|
||||
// How much xp should be dropped
|
||||
uint32 xp_min_count;
|
||||
uint32 xp_max_count;
|
||||
};
|
||||
|
||||
// 1. check if table comes into effect
|
||||
|
|
|
|||
|
|
@ -35,6 +35,9 @@
|
|||
char title[MAX_CHAR_TITLE_LENGTH];
|
||||
|
||||
Equipment equipment[14];
|
||||
|
||||
PrimaryStatsPoints stat_points;
|
||||
|
||||
PSettings settings;
|
||||
|
||||
Backpack* packpack;
|
||||
|
|
|
|||
|
|
@ -11,6 +11,11 @@
|
|||
#define MAX_SKILL_NAME 32
|
||||
#define MAX_SKILL_DESCRIPTION 128
|
||||
|
||||
/**
|
||||
* @todo optimize order of struct members to ensure optimal struct size
|
||||
*/
|
||||
|
||||
// @todo We adjusted SMobStats -> we can remove a lot of variables below
|
||||
struct Skill
|
||||
{
|
||||
// not required for server
|
||||
|
|
@ -19,47 +24,98 @@ struct Skill
|
|||
|
||||
int id;
|
||||
|
||||
// animations
|
||||
// @todo animations
|
||||
void* animation_casting;
|
||||
void* animation_channeling;
|
||||
|
||||
// @todo e.g. attack command, movement command, etc. for totems and minions
|
||||
void* commands;
|
||||
|
||||
// @todo configuration e.g. which minions to pick, release minion, select new minion...
|
||||
void* options;
|
||||
|
||||
bool projectile_animation_uses_item; // Use the equiped item for the projectile
|
||||
|
||||
byte target; // what is targatable (self, enemies, allies, ground, none?) Has to be bitset 2^n to define multiple
|
||||
byte default_target;
|
||||
|
||||
bool has_hitbox; // some skills have hitboxes (e.g. totems, minions, some breakable prisons, ...)
|
||||
|
||||
// @todo how to assign life and resource to skill (e.g. life to destroyable prison, totems or resources to minions)
|
||||
|
||||
f32 visual_scale; // make visual larger/smaller
|
||||
|
||||
// @tood how to handle multiplicative stats?
|
||||
// you can have 2 stats for 2 target types (e.g. you could create a buff and debuff in one skill)
|
||||
SMobStats stats1;
|
||||
// Scales skill over channeling time (e.g. makes balls larger and after reaching peak makes them smaller)
|
||||
byte scale_type;
|
||||
|
||||
// the following scale factors can be considered key frames
|
||||
f32 scale1;
|
||||
f32 scale2;
|
||||
f32 scale3;
|
||||
|
||||
// @todo when to use points and when to use values?
|
||||
// Stats of the skill itself
|
||||
SecondaryStatsPoints skill_stats;
|
||||
StatsTarget skill_target;
|
||||
|
||||
// @todo when to use points and when to use values?
|
||||
// Modifies stats
|
||||
// You can have 2 stats for 2 target types (e.g. you could create a buff and debuff in one skill)
|
||||
// 1
|
||||
PrimaryStatsPoints stats1_primary_add;
|
||||
PrimaryStatsRelPoints stats1_primary_mul;
|
||||
|
||||
SecondaryStatsPoints stats1_secondary_add;
|
||||
SecondaryStatsRelPoints stats1_secondary_mul;
|
||||
StatsTarget stats1_target;
|
||||
|
||||
SMobStats stats2;
|
||||
// 2
|
||||
PrimaryStatsPoints stats2_primary_add;
|
||||
PrimaryStatsRelPoints stats2_primary_mul;
|
||||
|
||||
SecondaryStatsPoints stats2_secondary_add;
|
||||
SecondaryStatsRelPoints stats2_secondary_mul;
|
||||
StatsTarget stats2_target;
|
||||
|
||||
byte skill_movement; // none, follows target, random moevement, random movement in aoe
|
||||
// Modifiers
|
||||
// Char
|
||||
PrimaryStatsPoints primary_char_add;
|
||||
PrimaryStatsRelPoints primary_char_mul;
|
||||
|
||||
SecondaryStatsPoints secondary_char_add;
|
||||
SecondaryStatsRelPoints secondary_char_mul;
|
||||
|
||||
// Item
|
||||
PrimaryStatsPoints primary_item_add;
|
||||
PrimaryStatsRelPoints primary_item_mul;
|
||||
|
||||
SecondaryStatsPoints secondary_item_add;
|
||||
SecondaryStatsRelPoints secondary_item_mul;
|
||||
|
||||
int skill_movement; // none, follows target, random moevement, random movement in aoe
|
||||
// @todo how to make specific custom movement pattern for boss fights
|
||||
|
||||
// Useful to cast multiple totems:
|
||||
byte count; // how often is the skill executed @question can this also be used as tick count for heals? or is this in the MobStats?
|
||||
byte count_delay; // delay between executions
|
||||
byte count_manual; // you can manually perform the skill count * times
|
||||
// @todo how to implement random distribution e.g. place n totems in random distribution close to selected spot
|
||||
byte count_manual; // you can manually perform the skill count * times. Manual = wherever you want.
|
||||
byte count_radius; // radius in which they are randomly distributed
|
||||
byte count_distance; // distance between sub skills
|
||||
// @todo maybe combine with aoe? we could remove radius and distance and just use them from aoe
|
||||
|
||||
// General
|
||||
int resource_cost;
|
||||
int health_cost;
|
||||
|
||||
bool is_range;
|
||||
f32 attack_range;
|
||||
void* attack_anim;
|
||||
|
||||
bool is_melee;
|
||||
f32 melee_range;
|
||||
|
||||
bool async_cast; // Can be casted with other skills at the same time/another skill can be cast while casting this
|
||||
|
||||
// Projectile data
|
||||
bool is_projectile;
|
||||
f32 projectile_speed;
|
||||
int projectile_count;
|
||||
int projectile_shape; // 3d Model
|
||||
|
||||
int projectile_distribution;
|
||||
|
|
@ -69,9 +125,6 @@ struct Skill
|
|||
// shatter is basically a second hit
|
||||
bool shatter;
|
||||
int shatter_projectiles;
|
||||
int shatter_count; // How often can it shatter at most
|
||||
f32 shatter_probability;
|
||||
f32 shatter_range;
|
||||
f32 shatter_duration;
|
||||
uint32 shatter_damage;
|
||||
|
||||
|
|
@ -79,7 +132,7 @@ struct Skill
|
|||
bool is_boomerang;
|
||||
|
||||
// Casting happens before the skill
|
||||
f32 cast_duration;
|
||||
// This can also be used for telegraphs
|
||||
bool is_cast_cancalable;
|
||||
bool is_cast_disruptable;
|
||||
bool is_cast_movable;
|
||||
|
|
@ -92,16 +145,15 @@ struct Skill
|
|||
bool is_channeling_disruptable;
|
||||
bool is_channeling_movable;
|
||||
|
||||
byte channeling_distribution; // beginning, on hit, end, intervals, smooth -> also effects dmg if channeling is cancled
|
||||
byte channeling_distribution; // beginning, on hit, end, intervals, or use damage distribution -> also effects dmg if channeling is cancled
|
||||
byte channeling_ticks; // how often is dmg dealt
|
||||
|
||||
f32 passthrough_damage; // How much of your damage in % is passing through to the next mob.
|
||||
int passtrhough_count;
|
||||
byte damage_distribution_location; // const, linear-increase, linear-decrease according to the shape of the skill.. e.g. more damage in center of aoe or more damage at the end of a end of a wave like skill
|
||||
byte damage_distribution_time; // similar to above but it might increase over time not based on location
|
||||
|
||||
// AOE
|
||||
bool is_aoe;
|
||||
f32 aoe_distance;
|
||||
int aoe_shape; // circle, square, donut
|
||||
int aoe_shape; // circle, square, donut, movement (e.g. fire trail on dodge)
|
||||
AoeDistribution aoe_fill_pattern;
|
||||
f32 aoe_dim1;
|
||||
f32 aoe_dim2;
|
||||
|
|
@ -111,26 +163,14 @@ struct Skill
|
|||
byte aoe_apply; // Applies while in aoe, applies even after moving out of aoe
|
||||
|
||||
// DOT
|
||||
f32 dot_duration;
|
||||
int dot_count;
|
||||
byte dot_state; // only when moving, standing still, always
|
||||
|
||||
byte dot_effective; // always; on move; on stand still
|
||||
|
||||
byte dot_buff_effective; // buff modifier (e.g. increase by/decrease by)
|
||||
float dot_buff; // buff dot when on move or on standstill
|
||||
|
||||
int bleeding_dot;
|
||||
int poison_dot;
|
||||
int burn_dot;
|
||||
int ice_dot;
|
||||
int resource_drain;
|
||||
int dot_shatter;
|
||||
|
||||
// Minion (and totems)
|
||||
int minion_type;
|
||||
int minon_count; // Max minion count
|
||||
int minion_duration;
|
||||
int minion_summon_count; // How many summons per summon cast @question still required with general skill count? I don't think so.
|
||||
|
||||
// Effects
|
||||
|
|
@ -140,21 +180,35 @@ struct Skill
|
|||
f32 effect_spreading_max_count; // How many mobs can be effected at maximum
|
||||
f32 effect_duration;
|
||||
|
||||
// Aura
|
||||
f32 aura_range;
|
||||
|
||||
// Push/pull
|
||||
byte push_pull_distance;
|
||||
byte push_pull_direction; // circle, pov = fan like; > 0 = push, < 0 = pull
|
||||
byte movement_type; // push, pull, dodge, jump, sprint, fly
|
||||
byte movement_distance;
|
||||
byte movement_direction; // e.g. target, view/orientation, opposite of view/orientation
|
||||
byte movement_shape; // circle, pov = fan like; > 0 = push, < 0 = pull
|
||||
// @todo maybe use location change? this way we could also implement a teleport
|
||||
|
||||
byte player_visibility; // = e.g. sneak skill
|
||||
byte mob_visibility; // = e.g. sneak skill
|
||||
|
||||
// @todo skill jumps over to close by enemies = chain lightning
|
||||
|
||||
// @todo illusion skill that multiplies the targeted mob and also shuffels the position
|
||||
|
||||
// move_distances (e.g. launch attack propells attacker forward x distance)
|
||||
byte movement_distances;
|
||||
// example: limits_movement = 0 + skill_disabled 0xFFFFFFFF = all = stun
|
||||
byte limits_movement; // limits_movement @question maybe use character stat and set movement to -INF
|
||||
uint32 limits_skills; // skill types disabled (bit field required), 0 = none
|
||||
// @todo how to implement skill limits only within certain range?
|
||||
// maybe just set it to is_aoe?!?!
|
||||
|
||||
byte locks_stat_type; // 0 = none, 1 for example could be health = useful to make someone invulnerable
|
||||
|
||||
// @todo how to implement fear? make mobs run away a short distance.
|
||||
// maybe somhow use push? because it is like a push but by making the mob walk.
|
||||
|
||||
// @todo how to implement a skill that shoots multiple large ball projectiles in a radial or linar pattern
|
||||
// from the caster with random distances in between each other but also in waves.
|
||||
// e.g. first wave sends out x balls , then second wave sends x balls but in different locations
|
||||
|
||||
// @todo how to implement a beam? e.g. arcane beam or mana drain? maybe a type of projectile?
|
||||
};
|
||||
|
||||
#endif
|
||||
0
models/mob/skill/definitions/beam
Normal file
0
models/mob/skill/definitions/beam
Normal file
4
models/mob/skill/definitions/health_inverse_dmg.cfg
Normal file
4
models/mob/skill/definitions/health_inverse_dmg.cfg
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
# do damage based on the inverse of healt
|
||||
// @todo needs skill modification that doesn't exist yet
|
||||
|
||||
dmg = max_healt / health * base_dmg;
|
||||
1
models/mob/skill/definitions/health_to_dmg.cfg
Normal file
1
models/mob/skill/definitions/health_to_dmg.cfg
Normal file
|
|
@ -0,0 +1 @@
|
|||
# converts health to dmg
|
||||
2
models/mob/skill/definitions/sacrafice.cfg
Normal file
2
models/mob/skill/definitions/sacrafice.cfg
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
# uses health for some form of attack... @todo really needs to get mapped out
|
||||
# can be achieved through the mobstat that are part of the skill
|
||||
0
models/mob/skill/definitions/teleport.cfg
Normal file
0
models/mob/skill/definitions/teleport.cfg
Normal file
0
pathfinding/AStar.h
Normal file
0
pathfinding/AStar.h
Normal file
0
pathfinding/Jps.h
Normal file
0
pathfinding/Jps.h
Normal file
0
pathfinding/JpsBounded.h
Normal file
0
pathfinding/JpsBounded.h
Normal file
0
pathfinding/Jpsp.h
Normal file
0
pathfinding/Jpsp.h
Normal file
|
|
@ -16,11 +16,42 @@
|
|||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <linux/limits.h>
|
||||
#include <errno.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "../../stdlib/Types.h"
|
||||
#include "../../utils/Utils.h"
|
||||
#include "../../utils/TestUtils.h"
|
||||
|
||||
#ifndef MAX_PATH
|
||||
#define MAX_PATH PATH_MAX
|
||||
#endif
|
||||
|
||||
int sprintf_s(char *buffer, size_t sizeOfBuffer, const char *format, ...) {
|
||||
int result;
|
||||
va_list args;
|
||||
|
||||
if (buffer == NULL || format == NULL || sizeOfBuffer == 0) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
va_start(args, format);
|
||||
|
||||
result = vsnprintf(buffer, sizeOfBuffer, format, args);
|
||||
|
||||
va_end(args);
|
||||
|
||||
if (result >= 0 && (size_t)result >= sizeOfBuffer) {
|
||||
buffer[sizeOfBuffer - 1] = '\0';
|
||||
errno = 80;
|
||||
return 80;
|
||||
}
|
||||
|
||||
// Return the result
|
||||
return result;
|
||||
}
|
||||
|
||||
inline
|
||||
uint64 file_size(const char* filename) {
|
||||
struct stat st;
|
||||
|
|
@ -179,6 +210,23 @@ void self_path(char* path) {
|
|||
}
|
||||
}
|
||||
|
||||
inline void relative_to_absolute(const char* rel, char* path)
|
||||
{
|
||||
char self_path[MAX_PATH];
|
||||
ssize_t count = readlink("/proc/self/exe", self_path, MAX_PATH - 1);
|
||||
if (count == -1) {
|
||||
return;
|
||||
}
|
||||
self_path[count] = '\0';
|
||||
|
||||
char* last = strrchr(self_path, '/');
|
||||
if (last != NULL) {
|
||||
*(last + 1) = '\0';
|
||||
}
|
||||
|
||||
snprintf(path, MAX_PATH, "%s%s", self_path, rel);
|
||||
}
|
||||
|
||||
inline
|
||||
void strncpy_s(char *dest, size_t destsz, const char *src, size_t count) {
|
||||
size_t i;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,9 @@
|
|||
#ifndef TOS_UTILS_WIN32_H
|
||||
#define TOS_UTILS_WIN32_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <windows.h>
|
||||
#include <string.h>
|
||||
#ifdef _MSC_VER
|
||||
#include <io.h>
|
||||
#endif
|
||||
|
|
@ -296,6 +298,21 @@ inline void self_path(char* path)
|
|||
GetModuleFileNameA(NULL, (LPSTR) path, MAX_PATH);
|
||||
}
|
||||
|
||||
inline void relative_to_absolute(const char* rel, char* path)
|
||||
{
|
||||
char self_path[MAX_PATH];
|
||||
if (GetModuleFileNameA(NULL, self_path, MAX_PATH) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
char* last = strrchr(self_path, '\\');
|
||||
if (last != NULL) {
|
||||
*(last + 1) = '\0';
|
||||
}
|
||||
|
||||
snprintf(path, MAX_PATH, "%s%s", self_path, rel);
|
||||
}
|
||||
|
||||
void log_to_file(LogPool* logs, HANDLE fp)
|
||||
{
|
||||
// we don't log an empty log pool
|
||||
|
|
|
|||
|
|
@ -10,11 +10,11 @@
|
|||
#define TOS_STDLIB_INTRINSICS_H
|
||||
|
||||
#include <immintrin.h>
|
||||
#include <inttypes.h>
|
||||
#include <xmmintrin.h>
|
||||
|
||||
#if __linux__
|
||||
#include <x86intrin.h>
|
||||
#include <x86gprintrin.h>
|
||||
#endif
|
||||
|
||||
#include "Types.h"
|
||||
|
|
@ -65,4 +65,20 @@ inline uint32 hash(uint64 a, uint64 b = 0)
|
|||
return _mm_extract_epi32(hash, 0);
|
||||
}
|
||||
|
||||
inline void atomic_increment(int32* a, int32 b) {
|
||||
_aadd_i32(a, b);
|
||||
}
|
||||
|
||||
inline void atomic_increment(int64* a, int64 b) {
|
||||
_aadd_i64(a, b);
|
||||
}
|
||||
|
||||
inline void atomic_decrement(int32* a, int32 b) {
|
||||
_aadd_i32(a, -b);
|
||||
}
|
||||
|
||||
inline void atomic_decrement(int64* a, int64 b) {
|
||||
_aadd_i64(a, -b);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -35,7 +35,7 @@ struct f32_16 {
|
|||
};
|
||||
};
|
||||
|
||||
inline f32_4 load_f32_4(f32 *mem)
|
||||
inline f32_4 load_f32_4(const f32* mem)
|
||||
{
|
||||
f32_4 simd;
|
||||
simd.s = _mm_loadu_ps(mem);
|
||||
|
|
@ -43,7 +43,7 @@ inline f32_4 load_f32_4(f32 *mem)
|
|||
return simd;
|
||||
}
|
||||
|
||||
inline f32_4 init_f32_4(f32 *mem)
|
||||
inline f32_4 init_f32_4(const f32* mem)
|
||||
{
|
||||
f32_4 simd;
|
||||
simd.s = _mm_set_ps(mem[0], mem[1], mem[2], mem[3]);
|
||||
|
|
@ -53,7 +53,7 @@ inline f32_4 init_f32_4(f32 *mem)
|
|||
|
||||
inline void unload_f32_4(f32_4 a, f32 *array) { _mm_store_ps(array, a.s); }
|
||||
|
||||
inline f32_8 load_f32_8(f32 *mem)
|
||||
inline f32_8 load_f32_8(const f32* mem)
|
||||
{
|
||||
f32_8 simd;
|
||||
simd.s = _mm256_loadu_ps(mem);
|
||||
|
|
@ -61,7 +61,7 @@ inline f32_8 load_f32_8(f32 *mem)
|
|||
return simd;
|
||||
}
|
||||
|
||||
inline f32_8 init_f32_8(f32 *mem)
|
||||
inline f32_8 init_f32_8(const f32* mem)
|
||||
{
|
||||
f32_8 simd;
|
||||
simd.s = _mm256_set_ps(mem[0], mem[1], mem[2], mem[3], mem[4], mem[5], mem[6], mem[7]);
|
||||
|
|
@ -71,7 +71,7 @@ inline f32_8 init_f32_8(f32 *mem)
|
|||
|
||||
inline void unload_f32_8(f32_8 a, f32 *array) { _mm256_store_ps(array, a.s); }
|
||||
|
||||
inline f32_16 load_f32_16(f32 *mem)
|
||||
inline f32_16 load_f32_16(const f32* mem)
|
||||
{
|
||||
f32_16 simd;
|
||||
simd.s = _mm512_loadu_ps(mem);
|
||||
|
|
@ -79,7 +79,7 @@ inline f32_16 load_f32_16(f32 *mem)
|
|||
return simd;
|
||||
}
|
||||
|
||||
inline f32_16 init_f32_16(f32 *mem)
|
||||
inline f32_16 init_f32_16(const f32* mem)
|
||||
{
|
||||
f32_16 simd;
|
||||
simd.s = _mm512_set_ps(mem[0], mem[1], mem[2], mem[3], mem[4], mem[5], mem[6], mem[7], mem[8], mem[9], mem[10],
|
||||
|
|
@ -114,6 +114,62 @@ inline f32_16 init_zero_f32_16()
|
|||
return simd;
|
||||
}
|
||||
|
||||
inline f32_4 init_value_f32_4(f32 value)
|
||||
{
|
||||
f32_4 simd;
|
||||
simd.s = _mm_set1_ps(value);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline f32_8 init_value_f32_8(f32 value)
|
||||
{
|
||||
f32_8 simd;
|
||||
simd.s = _mm256_set1_ps(value);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline f32_16 init_value_f32_16(f32 value)
|
||||
{
|
||||
f32_16 simd;
|
||||
simd.s = _mm512_set1_ps(value);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline f32_4 init_values_f32_4(f32 a, f32 b, f32 c, f32 d)
|
||||
{
|
||||
f32_4 simd;
|
||||
simd.s = _mm_set_ps(a, b, c, d);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline f32_8 init_values_f32_8(
|
||||
f32 a, f32 b, f32 c, f32 d,
|
||||
f32 e, f32 f, f32 g, f32 h
|
||||
)
|
||||
{
|
||||
f32_8 simd;
|
||||
simd.s = _mm256_set_ps(a, b, c, d, e, f, g, h);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline f32_16 init_values_f32_16(
|
||||
f32 a, f32 b, f32 c, f32 d,
|
||||
f32 e, f32 f, f32 g, f32 h,
|
||||
f32 i, f32 j, f32 k, f32 l,
|
||||
f32 m, f32 n, f32 o, f32 p
|
||||
)
|
||||
{
|
||||
f32_16 simd;
|
||||
simd.s = _mm512_set_ps(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline f32_4 operator+(f32_4 a, f32_4 b)
|
||||
{
|
||||
f32_4 simd;
|
||||
|
|
@ -603,11 +659,8 @@ inline f32_8 abs(f32_8 a)
|
|||
|
||||
inline f32_16 abs(f32_16 a)
|
||||
{
|
||||
unsigned int unsigned_mask = (unsigned int) (1 << 31);
|
||||
__m512 mask = _mm512_set1_ps(*(float *) &unsigned_mask);
|
||||
|
||||
f32_16 simd;
|
||||
simd.s = _mm512_and_ps(a.s, mask);
|
||||
simd.s = _mm512_abs_ps(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
|
@ -928,4 +981,261 @@ inline bool all_false(f32_16 a)
|
|||
return is_false;
|
||||
}
|
||||
|
||||
// @todo from down here we can optimize some of the code by NOT using the wrappers
|
||||
// the code is self contained and we could use te intrinsic functions directly
|
||||
|
||||
inline
|
||||
void simd_mult(const f32* a, const f32* b, f32* result, int size, int steps)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (steps == 16) {
|
||||
f32_16 a_16;
|
||||
f32_16 b_16;
|
||||
f32_16 result_16;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_16 = load_f32_16(a);
|
||||
b_16 = load_f32_16(b);
|
||||
result_16 = a_16 * b_16;
|
||||
unload_f32_16(result_16, result);
|
||||
}
|
||||
} else if (steps == 8) {
|
||||
f32_8 a_8;
|
||||
f32_8 b_8;
|
||||
f32_8 result_8;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_8 = load_f32_8(a);
|
||||
b_8 = load_f32_8(b);
|
||||
result_8 = a_8 * b_8;
|
||||
unload_f32_8(result_8, result);
|
||||
}
|
||||
} else if (steps == 4) {
|
||||
f32_4 a_4;
|
||||
f32_4 b_4;
|
||||
f32_4 result_4;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_4 = load_f32_4(a);
|
||||
b_4 = load_f32_4(b);
|
||||
result_4 = a_4 * b_4;
|
||||
unload_f32_4(result_4, result);
|
||||
}
|
||||
}
|
||||
|
||||
for (; i < size; ++i) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
*result = *a * *b;
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void f32_4_mult(const f32* a, const f32* b, f32* result)
|
||||
{
|
||||
f32_4 a_4 = load_f32_4(a);
|
||||
f32_4 b_4 = load_f32_4(b);
|
||||
f32_4 result_4 = a_4 * b_4;
|
||||
|
||||
unload_f32_4(result_4, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void simd_mult(const f32* a, const f32* b, f32* result, int size, int steps)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (steps == 16) {
|
||||
f32_16 a_16;
|
||||
f32_16 b_16;
|
||||
f32_16 result_16;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_16 = load_f32_16(a);
|
||||
b_16 = load_f32_16(b);
|
||||
result_16 = a_16 + b_16;
|
||||
unload_f32_16(result_16, result);
|
||||
}
|
||||
} else if (steps == 8) {
|
||||
f32_8 a_8;
|
||||
f32_8 b_8;
|
||||
f32_8 result_8;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_8 = load_f32_8(a);
|
||||
b_8 = load_f32_8(b);
|
||||
result_8 = a_8 + b_8;
|
||||
unload_f32_8(result_8, result);
|
||||
}
|
||||
} else if (steps == 4) {
|
||||
f32_4 a_4;
|
||||
f32_4 b_4;
|
||||
f32_4 result_4;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_4 = load_f32_4(a);
|
||||
b_4 = load_f32_4(b);
|
||||
result_4 = a_4 + b_4;
|
||||
unload_f32_4(result_4, result);
|
||||
}
|
||||
}
|
||||
|
||||
for (; i < size; ++i) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
*result = *a + *b;
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void f32_4_add(const f32* a, const f32* b, f32* result)
|
||||
{
|
||||
f32_4 a_4 = load_f32_4(a);
|
||||
f32_4 b_4 = load_f32_4(b);
|
||||
f32_4 result_4 = a_4 + b_4;
|
||||
|
||||
unload_f32_4(result_4, result);
|
||||
}
|
||||
|
||||
// @todo add more operations like the one above "f32_4_mult()"
|
||||
|
||||
inline
|
||||
f32_4 simd_sin(f32_4 a)
|
||||
{
|
||||
f32_4 simd;
|
||||
simd.s = _mm_sin_ps(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline
|
||||
f32_8 simd_sin(f32_8 a)
|
||||
{
|
||||
f32_8 simd;
|
||||
simd.s = _mm256_sin_ps(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline
|
||||
f32_16 simd_sin(f32_16 a)
|
||||
{
|
||||
f32_16 simd;
|
||||
simd.s = _mm512_sin_ps(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline
|
||||
f32_4 simd_cos(f32_4 a)
|
||||
{
|
||||
f32_4 simd;
|
||||
simd.s = _mm_cos_ps(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline
|
||||
f32_8 simd_cos(f32_8 a)
|
||||
{
|
||||
f32_8 simd;
|
||||
simd.s = _mm256_cos_ps(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline
|
||||
f32_16 simd_cos(f32_16 a)
|
||||
{
|
||||
f32_16 simd;
|
||||
simd.s = _mm512_cos_ps(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline
|
||||
f32_4 simd_asin(f32_4 a)
|
||||
{
|
||||
f32_4 simd;
|
||||
simd.s = _mm_asin_ps(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline
|
||||
f32_8 simd_asin(f32_8 a)
|
||||
{
|
||||
f32_8 simd;
|
||||
simd.s = _mm256_asin_ps(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline
|
||||
f32_16 simd_asin(f32_16 a)
|
||||
{
|
||||
f32_16 simd;
|
||||
simd.s = _mm512_asin_ps(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline
|
||||
f32_4 simd_acos(f32_4 a)
|
||||
{
|
||||
f32_4 simd;
|
||||
simd.s = _mm_acos_ps(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline
|
||||
f32_8 simd_acos(f32_8 a)
|
||||
{
|
||||
f32_8 simd;
|
||||
simd.s = _mm256_acos_ps(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline
|
||||
f32_16 simd_acos(f32_16 a)
|
||||
{
|
||||
f32_16 simd;
|
||||
simd.s = _mm512_acos_ps(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
// @todo implement more trigonometry function
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -17,81 +17,160 @@
|
|||
#include <intrin.h>
|
||||
#endif
|
||||
|
||||
inline
|
||||
bool is_sse_supported()
|
||||
// @todo implement for arm?
|
||||
|
||||
inline int max_sse_supported()
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
int cpuInfo[4] = {-1};
|
||||
__cpuid(cpuInfo, 1); // CPUID function 1
|
||||
|
||||
// Check the SSE feature bit in EDX
|
||||
return (cpuInfo[3] >> 25) & 1;
|
||||
uint32_t ecx = cpuInfo[2];
|
||||
uint32_t edx = cpuInfo[3];
|
||||
#else
|
||||
uint32_t eax, ebx, ecx, edx;
|
||||
|
||||
eax = 1; // CPUID function 1
|
||||
|
||||
__asm__ __volatile__("cpuid;" : "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) : "a"(eax));
|
||||
|
||||
// Check the AVX feature bit in ECX
|
||||
return (ecx >> 28) & 1;
|
||||
__asm__ __volatile__("cpuid;"
|
||||
: "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx)
|
||||
: "a"(eax));
|
||||
#endif
|
||||
|
||||
bool sse42_supported = (ecx >> 20) & 1;
|
||||
if (sse42_supported) {
|
||||
return 42;
|
||||
}
|
||||
|
||||
bool sse41_supported = (ecx >> 19) & 1;
|
||||
if (sse41_supported) {
|
||||
return 41;
|
||||
}
|
||||
|
||||
bool sse3_supported = (ecx >> 0) & 1;
|
||||
if (sse3_supported) {
|
||||
return 3;
|
||||
}
|
||||
|
||||
bool sse2_supported = (edx >> 26) & 1;
|
||||
if (sse2_supported) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline
|
||||
bool is_avx256_supported()
|
||||
int max_avx256_supported()
|
||||
{
|
||||
int max_version = 0;
|
||||
|
||||
#ifdef _MSC_VER
|
||||
int cpuInfo[4] = {-1};
|
||||
__cpuid(cpuInfo, 1); // CPUID function 1
|
||||
int cpuInfo[4];
|
||||
__cpuid(cpuInfo, 1);
|
||||
|
||||
// Check the AVX feature bit in ECX
|
||||
if ((cpuInfo[2] >> 28) & 1) {
|
||||
__cpuid(cpuInfo, 7); // CPUID function 7, sub-function 0
|
||||
// Check the AVX2 feature bit in EBX
|
||||
return (cpuInfo[1] >> 5) & 1;
|
||||
__cpuid(cpuInfo, 7); // Query extended features
|
||||
|
||||
if ((cpuInfo[1] >> 5) & 1) {
|
||||
max_version = 2;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
#else
|
||||
uint32_t eax, ebx, ecx, edx;
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
|
||||
eax = 7; // CPUID function 7
|
||||
ecx = 0; // Sub-function 0
|
||||
__asm__ __volatile__("cpuid"
|
||||
: "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx)
|
||||
: "a"(1));
|
||||
if ((ecx >> 28) & 1) {
|
||||
eax = 7;
|
||||
ecx = 0;
|
||||
__asm__ __volatile__("cpuid"
|
||||
: "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx)
|
||||
: "a"(eax), "c"(ecx));
|
||||
|
||||
__asm__ __volatile__("cpuid;" : "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) : "a"(eax), "c"(ecx));
|
||||
|
||||
// Check the AVX-256 (AVX2) feature bit in EBX
|
||||
return (ebx >> 5) & 1;
|
||||
if ((ebx >> 5) & 1) {
|
||||
max_version = 2;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return max_version;
|
||||
}
|
||||
|
||||
inline
|
||||
bool is_avx512_supported()
|
||||
int max_avx512_supported()
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
int cpuInfo[4] = {-1};
|
||||
__cpuid(cpuInfo, 1); // CPUID function 1
|
||||
int cpuInfo[4];
|
||||
__cpuid(cpuInfo, 1);
|
||||
int ebx = 0;
|
||||
|
||||
// Check the AVX feature bit in ECX
|
||||
if ((cpuInfo[2] >> 28) & 1) {
|
||||
__cpuid(cpuInfo, 7); // CPUID function 7, sub-function 0
|
||||
// Check the AVX-512 feature bit in EBX
|
||||
return (cpuInfo[1] >> 16) & 1;
|
||||
__cpuid(cpuInfo, 7);
|
||||
|
||||
ebx = cpuInfo[1];
|
||||
}
|
||||
#else
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
|
||||
__asm__ __volatile__("cpuid"
|
||||
: "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx)
|
||||
: "a"(1));
|
||||
if ((ecx >> 28) & 1) {
|
||||
eax = 7;
|
||||
ecx = 0;
|
||||
__asm__ __volatile__("cpuid"
|
||||
: "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx)
|
||||
: "a"(eax), "c"(ecx));
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((ebx >> 16) & 1) {
|
||||
return 1; // AVX-512F
|
||||
}
|
||||
|
||||
return false;
|
||||
#else
|
||||
uint32_t eax, ebx, ecx, edx;
|
||||
if ((ebx >> 17) & 1) {
|
||||
return 2; // AVX-512DQ
|
||||
}
|
||||
|
||||
eax = 7; // CPUID function 7
|
||||
ecx = 0; // Sub-function 0
|
||||
if ((ebx >> 21) & 1) {
|
||||
return 3; // AVX-512IFMA
|
||||
}
|
||||
|
||||
__asm__ __volatile__("cpuid;" : "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) : "a"(eax), "c"(ecx));
|
||||
if ((ebx >> 26) & 1) {
|
||||
return 4; // AVX-512PF
|
||||
}
|
||||
|
||||
// Check the AVX-512 feature bit in EBX
|
||||
return (ebx >> 16) & 1;
|
||||
#endif
|
||||
if ((ebx >> 27) & 1) {
|
||||
return 5; // AVX-512ER
|
||||
}
|
||||
|
||||
if ((ebx >> 28) & 1) {
|
||||
return 6; // AVX-512CD
|
||||
}
|
||||
|
||||
if ((ebx >> 30) & 1) {
|
||||
return 7; // AVX-512BW
|
||||
}
|
||||
|
||||
if ((ebx >> 31) & 1) {
|
||||
return 8; // AVX-512VL
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
const char avx512_versions[8][12] = {
|
||||
"AVX-512F",
|
||||
"AVX-512DQ",
|
||||
"AVX-512IFMA",
|
||||
"AVX-512PF",
|
||||
"AVX-512ER",
|
||||
"AVX-512CD",
|
||||
"AVX-512BW",
|
||||
"AVX-512VL"
|
||||
};
|
||||
*/
|
||||
|
||||
#endif
|
||||
976
stdlib/simd/SIMD_I16.h
Normal file
976
stdlib/simd/SIMD_I16.h
Normal file
|
|
@ -0,0 +1,976 @@
|
|||
/**
|
||||
* Jingga
|
||||
*
|
||||
* @copyright Jingga
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
#ifndef TOS_TOS_STDLIB_SIMD_I16_H
|
||||
#define TOS_TOS_STDLIB_SIMD_I16_H
|
||||
|
||||
#include <immintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
|
||||
#include "../Types.h"
|
||||
|
||||
struct int16_8 {
|
||||
union {
|
||||
__m128i s;
|
||||
int16 v[8];
|
||||
};
|
||||
};
|
||||
|
||||
struct int16_16 {
|
||||
union {
|
||||
__m256i s;
|
||||
int16 v[16];
|
||||
};
|
||||
};
|
||||
|
||||
struct int16_32 {
|
||||
union {
|
||||
__m512i s;
|
||||
int16 v[32];
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
inline int16_8 load_int16_8(const int16* mem)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_loadu_epi16(mem);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 init_int16_8(const int16* mem)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_set_epi16(
|
||||
mem[0], mem[1], mem[2], mem[3],
|
||||
mem[4], mem[5], mem[6], mem[7]
|
||||
);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline void unload_int16_8(int16_8 a, int16 *array) { _mm_store_si128((__m128i *) array, a.s); }
|
||||
|
||||
inline int16_16 load_int16_16(const int16* mem)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_loadu_epi16(mem);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 init_int16_16(const int16* mem)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_set_epi16(
|
||||
mem[0], mem[1], mem[2], mem[3], mem[4], mem[5], mem[6], mem[7],
|
||||
mem[8], mem[9], mem[10], mem[11], mem[12], mem[13], mem[14], mem[15]
|
||||
);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline void unload_int16_16(int16_16 a, int16 *array) { _mm256_store_si256((__m256i *) array, a.s); }
|
||||
|
||||
inline int16_32 load_int16_32(const int16* mem)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_loadu_epi16(mem);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 init_int16_32(const int16* mem)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_set_epi16(
|
||||
mem[0], mem[1], mem[2], mem[3], mem[4], mem[5], mem[6], mem[7],
|
||||
mem[8], mem[9], mem[10], mem[11], mem[12], mem[13], mem[14], mem[15],
|
||||
mem[16], mem[17], mem[18], mem[19], mem[20], mem[21], mem[22], mem[23],
|
||||
mem[24], mem[25], mem[26], mem[27], mem[28], mem[29], mem[30], mem[31]
|
||||
);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline void unload_int16_32(int16_32 a, int16 *array) { _mm512_storeu_epi16(array, a.s); }
|
||||
|
||||
inline int16_8 init_zero_int16_8()
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_setzero_si128();
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 init_zero_int16_16()
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_setzero_si256();
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 init_zero_int16_32()
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_setzero_si512();
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 init_value_int16_8(int16 value)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_set1_epi16(value);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 init_value_int16_16(int16 value)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_set1_epi16(value);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 init_value_int16_32(int16 value)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_set1_epi16(value);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 operator+(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_add_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 operator+(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_add_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 operator+(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_add_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 operator-(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_sub_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 operator-(int16_8 a) { return init_zero_int16_8() - a; }
|
||||
|
||||
inline int16_16 operator-(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_sub_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 operator-(int16_16 a) { return init_zero_int16_16() - a; }
|
||||
|
||||
inline int16_32 operator-(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_sub_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 operator-(int16_32 a) { return init_zero_int16_32() - a; }
|
||||
|
||||
inline int16_8 operator*(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_mul_epi32(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 operator*(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_mul_epi32(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 operator*(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_mul_epi32(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 operator/(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_div_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 operator/(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_div_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 operator/(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_div_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 operator^(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_xor_si128(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 operator^(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_xor_si256(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 operator^(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_xor_si512(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 &operator-=(int16_8 &a, int16_8 b)
|
||||
{
|
||||
a = a - b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_16 &operator-=(int16_16 &a, int16_16 b)
|
||||
{
|
||||
a = a - b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_32 &operator-=(int16_32 &a, int16_32 b)
|
||||
{
|
||||
a = a - b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_8 &operator+=(int16_8 &a, int16_8 b)
|
||||
{
|
||||
a = a + b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_16 &operator+=(int16_16 &a, int16_16 b)
|
||||
{
|
||||
a = a + b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_32 &operator+=(int16_32 &a, int16_32 b)
|
||||
{
|
||||
a = a + b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_8 &operator*=(int16_8 &a, int16_8 b)
|
||||
{
|
||||
a = a * b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_16 &operator*=(int16_16 &a, int16_16 b)
|
||||
{
|
||||
a = a * b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_32 &operator*=(int16_32 &a, int16_32 b)
|
||||
{
|
||||
a = a * b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_8 &operator/=(int16_8 &a, int16_8 b)
|
||||
{
|
||||
a.s = (a / b).s;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_16 &operator/=(int16_16 &a, int16_16 b)
|
||||
{
|
||||
a.s = (a / b).s;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_32 &operator/=(int16_32 &a, int16_32 b)
|
||||
{
|
||||
a.s = (a / b).s;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_8 &operator^=(int16_8 &a, int16_8 b)
|
||||
{
|
||||
a = a ^ b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_16 &operator^=(int16_16 &a, int16_16 b)
|
||||
{
|
||||
a = a ^ b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_32 &operator^=(int16_32 &a, int16_32 b)
|
||||
{
|
||||
a = a ^ b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_8 operator<(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_cmplt_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 operator<(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_xor_si256(_mm256_cmpgt_epi16(a.s, b.s), _mm256_set1_epi16(-1));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 operator<(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_mask_blend_epi16(_mm512_cmplt_epi16_mask(a.s, b.s), a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 operator<=(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_andnot_si128(_mm_cmplt_epi16(b.s, a.s), _mm_set1_epi16(-1));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 operator<=(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_andnot_si256(_mm256_cmpgt_epi16(a.s, b.s), _mm256_set1_epi16(-1));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 operator<=(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_mask_blend_epi16(_mm512_knot(_mm512_cmpgt_epi16_mask(b.s, a.s)), b.s, a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 operator>(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_cmpgt_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 operator>(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_cmpgt_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 operator>(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_mask_blend_epi16(_mm512_cmpgt_epi16_mask(a.s, b.s), a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 operator>=(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_andnot_si128(_mm_cmplt_epi16(a.s, b.s), _mm_set1_epi16(-1));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 operator>=(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_andnot_si256(_mm256_cmpgt_epi16(b.s, a.s), _mm256_set1_epi16(-1));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 operator>=(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_mask_blend_epi16(_mm512_cmpge_epi16_mask(a.s, b.s), a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 operator==(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_cmpeq_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 operator==(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_cmpeq_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 operator==(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_mask_blend_epi16(_mm512_cmpeq_epi16_mask(a.s, b.s), a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 operator!=(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_andnot_si128(_mm_cmpeq_epi16(a.s, b.s), _mm_set1_epi16(-1));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 operator!=(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_mask_blend_epi16(_mm256_cmp_epi16_mask(a.s, b.s, _MM_CMPINT_NE), a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 operator!=(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_mask_blend_epi16(_mm512_cmp_epi16_mask(a.s, b.s, _MM_CMPINT_NE), a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 operator&(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_and_si128(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 operator&(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_and_si256(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 operator&(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_and_si512(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 operator|(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_or_si128(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 operator|(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_or_si256(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 operator|(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_or_si512(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 &operator&=(int16_8 &a, int16_8 b)
|
||||
{
|
||||
a = a & b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_16 &operator&=(int16_16 &a, int16_16 b)
|
||||
{
|
||||
a = a & b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_32 &operator&=(int16_32 &a, int16_32 b)
|
||||
{
|
||||
a = a & b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_8 &operator|=(int16_8 &a, int16_8 b)
|
||||
{
|
||||
a = a | b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_16 &operator|=(int16_16 &a, int16_16 b)
|
||||
{
|
||||
a = a | b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_32 &operator|=(int16_32 &a, int16_32 b)
|
||||
{
|
||||
a = a | b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int16_8 abs(int16_8 a)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_abs_epi16(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 abs(int16_16 a)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_abs_epi16(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 abs(int16_32 a)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_abs_epi16(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 simd_min(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_min_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 simd_min(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_min_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 simd_min(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_min_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 simd_max(int16_8 a, int16_8 b)
|
||||
{
|
||||
int16_8 simd;
|
||||
simd.s = _mm_max_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_16 simd_max(int16_16 a, int16_16 b)
|
||||
{
|
||||
int16_16 simd;
|
||||
simd.s = _mm256_max_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_32 simd_max(int16_32 a, int16_32 b)
|
||||
{
|
||||
int16_32 simd;
|
||||
simd.s = _mm512_max_epi16(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int16_8 clamp(int16_8 min_value, int16_8 a, int16_8 max_value)
|
||||
{
|
||||
return simd_min(simd_max(a, min_value), max_value);
|
||||
}
|
||||
|
||||
inline int16_16 clamp(int16_16 min_value, int16_16 a, int16_16 max_value)
|
||||
{
|
||||
return simd_min(simd_max(a, min_value), max_value);
|
||||
}
|
||||
|
||||
inline int16_32 clamp(int16_32 min_value, int16_32 a, int16_32 max_value)
|
||||
{
|
||||
return simd_min(simd_max(a, min_value), max_value);
|
||||
}
|
||||
|
||||
inline int16 which_true(int16_8 a)
|
||||
{
|
||||
int16 which_true = _mm_movemask_epi8(a.s);
|
||||
|
||||
return which_true;
|
||||
}
|
||||
|
||||
inline int16 which_true(int16_16 a)
|
||||
{
|
||||
int16 which_true = _mm256_movemask_epi8(a.s);
|
||||
|
||||
return which_true;
|
||||
}
|
||||
|
||||
inline int16 which_true(int16_32 a)
|
||||
{
|
||||
int16 which_true = _mm512_movepi16_mask(a.s);
|
||||
|
||||
return which_true;
|
||||
}
|
||||
|
||||
inline bool any_true(int16_8 a)
|
||||
{
|
||||
bool is_any_true = _mm_movemask_epi8(a.s) > 0;
|
||||
|
||||
return is_any_true;
|
||||
}
|
||||
|
||||
inline bool any_true(int16_16 a)
|
||||
{
|
||||
bool is_any_true = _mm256_movemask_epi8(a.s) > 0;
|
||||
|
||||
return is_any_true;
|
||||
}
|
||||
|
||||
inline bool any_true(int16_32 a)
|
||||
{
|
||||
bool is_any_true = _mm512_movepi16_mask(a.s) > 0;
|
||||
|
||||
return is_any_true;
|
||||
}
|
||||
|
||||
inline bool all_true(int16_8 a)
|
||||
{
|
||||
bool is_true = _mm_movemask_epi8(a.s) == 15;
|
||||
|
||||
return is_true;
|
||||
}
|
||||
|
||||
inline bool all_true(int16_16 a)
|
||||
{
|
||||
bool is_true = _mm256_movemask_epi8(a.s) == 255;
|
||||
|
||||
return is_true;
|
||||
}
|
||||
|
||||
inline bool all_true(int16_32 a)
|
||||
{
|
||||
bool is_true = _mm512_movepi16_mask(a.s) == 65535;
|
||||
|
||||
return is_true;
|
||||
}
|
||||
|
||||
inline bool all_false(int16_8 a)
|
||||
{
|
||||
bool is_false = _mm_movemask_epi8(a.s) == 0;
|
||||
|
||||
return is_false;
|
||||
}
|
||||
|
||||
inline bool all_false(int16_16 a)
|
||||
{
|
||||
bool is_false = _mm256_movemask_epi8(a.s) == 0;
|
||||
|
||||
return is_false;
|
||||
}
|
||||
|
||||
inline bool all_false(int16_32 a)
|
||||
{
|
||||
// @todo This can be optimized (requires also changes in the comparison functions return)
|
||||
bool is_false = _mm512_movepi16_mask(a.s) == 0;
|
||||
|
||||
return is_false;
|
||||
}
|
||||
|
||||
// @todo from down here we can optimize some of the code by NOT using the wrappers
|
||||
// the code is self contained and we could use te intrinsic functions directly
|
||||
|
||||
inline
|
||||
void simd_mult(const int16* a, const int16* b, int16* result, int size, int steps)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (steps == 16) {
|
||||
int16_32 a_16;
|
||||
int16_32 b_16;
|
||||
int16_32 result_16;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_16 = load_int16_32(a);
|
||||
b_16 = load_int16_32(b);
|
||||
result_16 = a_16 * b_16;
|
||||
unload_int16_32(result_16, result);
|
||||
}
|
||||
} else if (steps == 8) {
|
||||
int16_16 a_8;
|
||||
int16_16 b_8;
|
||||
int16_16 result_8;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_8 = load_int16_16(a);
|
||||
b_8 = load_int16_16(b);
|
||||
result_8 = a_8 * b_8;
|
||||
unload_int16_16(result_8, result);
|
||||
}
|
||||
} else if (steps == 4) {
|
||||
int16_8 a_4;
|
||||
int16_8 b_4;
|
||||
int16_8 result_4;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_4 = load_int16_8(a);
|
||||
b_4 = load_int16_8(b);
|
||||
result_4 = a_4 * b_4;
|
||||
unload_int16_8(result_4, result);
|
||||
}
|
||||
}
|
||||
|
||||
for (; i < size; ++i) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
*result = *a * *b;
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void simd_mult(const int16* a, const int16* b, int16* result)
|
||||
{
|
||||
int16_8 a_4 = load_int16_8(a);
|
||||
int16_8 b_4 = load_int16_8(b);
|
||||
int16_8 result_4 = a_4 * b_4;
|
||||
|
||||
unload_int16_8(result_4, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int16_16_mult(const int16* a, const int16* b, int16* result)
|
||||
{
|
||||
int16_16 a_8 = load_int16_16(a);
|
||||
int16_16 b_8 = load_int16_16(b);
|
||||
int16_16 result_8 = a_8 * b_8;
|
||||
|
||||
unload_int16_16(result_8, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int16_32_mult(const int16* a, const int16* b, int16* result)
|
||||
{
|
||||
int16_32 a_16 = load_int16_32(a);
|
||||
int16_32 b_16 = load_int16_32(b);
|
||||
int16_32 result_16 = a_16 * b_16;
|
||||
|
||||
unload_int16_32(result_16, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void simd_add(const int16* a, const int16* b, int16* result, int size, int steps)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (steps == 16) {
|
||||
int16_32 a_16;
|
||||
int16_32 b_16;
|
||||
int16_32 result_16;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_16 = load_int16_32(a);
|
||||
b_16 = load_int16_32(b);
|
||||
result_16 = a_16 + b_16;
|
||||
unload_int16_32(result_16, result);
|
||||
}
|
||||
} else if (steps == 8) {
|
||||
int16_16 a_8;
|
||||
int16_16 b_8;
|
||||
int16_16 result_8;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_8 = load_int16_16(a);
|
||||
b_8 = load_int16_16(b);
|
||||
result_8 = a_8 + b_8;
|
||||
unload_int16_16(result_8, result);
|
||||
}
|
||||
} else if (steps == 4) {
|
||||
int16_8 a_4;
|
||||
int16_8 b_4;
|
||||
int16_8 result_4;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_4 = load_int16_8(a);
|
||||
b_4 = load_int16_8(b);
|
||||
result_4 = a_4 + b_4;
|
||||
unload_int16_8(result_4, result);
|
||||
}
|
||||
}
|
||||
|
||||
for (; i < size; ++i) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
*result = *a + *b;
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void int16_8_add(const int16* a, const int16* b, int16* result)
|
||||
{
|
||||
int16_8 a_4 = load_int16_8(a);
|
||||
int16_8 b_4 = load_int16_8(b);
|
||||
int16_8 result_4 = a_4 + b_4;
|
||||
|
||||
unload_int16_8(result_4, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int16_16_add(const int16* a, const int16* b, int16* result)
|
||||
{
|
||||
int16_16 a_8 = load_int16_16(a);
|
||||
int16_16 b_8 = load_int16_16(b);
|
||||
int16_16 result_8 = a_8 + b_8;
|
||||
|
||||
unload_int16_16(result_8, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int16_32_add(const int16* a, const int16* b, int16* result)
|
||||
{
|
||||
int16_32 a_16 = load_int16_32(a);
|
||||
int16_32 b_16 = load_int16_32(b);
|
||||
int16_32 result_16 = a_16 + b_16;
|
||||
|
||||
unload_int16_32(result_16, result);
|
||||
}
|
||||
|
||||
// @todo add more operations like the one above "int16_8_mult()"
|
||||
|
||||
#endif
|
||||
|
|
@ -15,6 +15,9 @@
|
|||
#include "../Types.h"
|
||||
#include "SIMD_F32.h"
|
||||
|
||||
// @todo a lot of sse functions require high level (e.g. sse4.1) this needs to be changed to be more general
|
||||
// or better create alternative functions for the available sse version.
|
||||
|
||||
struct int32_4 {
|
||||
union {
|
||||
__m128i s;
|
||||
|
|
@ -36,7 +39,7 @@ struct int32_16 {
|
|||
};
|
||||
};
|
||||
|
||||
inline int32_4 load_int32_4(int32 *mem)
|
||||
inline int32_4 load_int32_4(const int32* mem)
|
||||
{
|
||||
int32_4 simd;
|
||||
simd.s = _mm_loadu_epi32(mem);
|
||||
|
|
@ -44,7 +47,7 @@ inline int32_4 load_int32_4(int32 *mem)
|
|||
return simd;
|
||||
}
|
||||
|
||||
inline int32_4 init_int32_4(int32 *mem)
|
||||
inline int32_4 init_int32_4(const int32* mem)
|
||||
{
|
||||
int32_4 simd;
|
||||
simd.s = _mm_set_epi32(mem[0], mem[1], mem[2], mem[3]);
|
||||
|
|
@ -54,7 +57,7 @@ inline int32_4 init_int32_4(int32 *mem)
|
|||
|
||||
inline void unload_int32_4(int32_4 a, int32 *array) { _mm_store_si128((__m128i *) array, a.s); }
|
||||
|
||||
inline int32_8 load_int32_8(int32 *mem)
|
||||
inline int32_8 load_int32_8(const int32* mem)
|
||||
{
|
||||
int32_8 simd;
|
||||
simd.s = _mm256_loadu_epi32(mem);
|
||||
|
|
@ -62,7 +65,7 @@ inline int32_8 load_int32_8(int32 *mem)
|
|||
return simd;
|
||||
}
|
||||
|
||||
inline int32_8 init_int32_8(int32 *mem)
|
||||
inline int32_8 init_int32_8(const int32* mem)
|
||||
{
|
||||
int32_8 simd;
|
||||
simd.s = _mm256_set_epi32(mem[0], mem[1], mem[2], mem[3], mem[4], mem[5], mem[6], mem[7]);
|
||||
|
|
@ -72,7 +75,7 @@ inline int32_8 init_int32_8(int32 *mem)
|
|||
|
||||
inline void unload_int32_8(int32_8 a, int32 *array) { _mm256_store_si256((__m256i *) array, a.s); }
|
||||
|
||||
inline int32_16 load_int32_16(int32 *mem)
|
||||
inline int32_16 load_int32_16(const int32* mem)
|
||||
{
|
||||
int32_16 simd;
|
||||
simd.s = _mm512_loadu_epi32(mem);
|
||||
|
|
@ -80,7 +83,7 @@ inline int32_16 load_int32_16(int32 *mem)
|
|||
return simd;
|
||||
}
|
||||
|
||||
inline int32_16 init_int32_16(int32 *mem)
|
||||
inline int32_16 init_int32_16(const int32* mem)
|
||||
{
|
||||
int32_16 simd;
|
||||
simd.s = _mm512_set_epi32(mem[0], mem[1], mem[2], mem[3], mem[4], mem[5], mem[6], mem[7], mem[8], mem[9],
|
||||
|
|
@ -115,6 +118,116 @@ inline int32_16 init_zero_int32_16()
|
|||
return simd;
|
||||
}
|
||||
|
||||
inline int32_4 init_value_int32_4(int32 value)
|
||||
{
|
||||
int32_4 simd;
|
||||
simd.s = _mm_set1_epi32(value);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int32_8 init_value_int32_8(int32 value)
|
||||
{
|
||||
int32_8 simd;
|
||||
simd.s = _mm256_set1_epi32(value);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int32_16 init_value_int32_16(int32 value)
|
||||
{
|
||||
int32_16 simd;
|
||||
simd.s = _mm512_set1_epi32(value);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int32_4 init_values_int32_4(int32 a, int32 b, int32 c, int32 d)
|
||||
{
|
||||
int32_4 simd;
|
||||
simd.s = _mm_set_epi32(a, b, c, d);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int32_8 init_values_int32_8(
|
||||
int32 a, int32 b, int32 c, int32 d,
|
||||
int32 e, int32 f, int32 g, int32 h
|
||||
)
|
||||
{
|
||||
int32_8 simd;
|
||||
simd.s = _mm256_set_epi32(a, b, c, d, e, f, g, h);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int32_16 init_values_int32_16(
|
||||
int32 a, int32 b, int32 c, int32 d,
|
||||
int32 e, int32 f, int32 g, int32 h,
|
||||
int32 i, int32 j, int32 k, int32 l,
|
||||
int32 m, int32 n, int32 o, int32 p
|
||||
)
|
||||
{
|
||||
int32_16 simd;
|
||||
simd.s = _mm512_set_epi32(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline
|
||||
int32_4 f32_4_to_int32_4(f32_4 a)
|
||||
{
|
||||
int32_4 result;
|
||||
result.s = _mm_cvtps_epi32(a.s);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
inline
|
||||
f32_4 int32_4_to_f32_4(int32_4 a)
|
||||
{
|
||||
f32_4 result;
|
||||
result.s = _mm_cvtepi32_ps(a.s);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
inline
|
||||
int32_8 f32_8_to_int32_8(f32_8 a)
|
||||
{
|
||||
int32_8 result;
|
||||
result.s = _mm256_cvtps_epi32(a.s);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
inline
|
||||
f32_8 int32_8_to_f32_8(int32_8 a)
|
||||
{
|
||||
f32_8 result;
|
||||
result.s = _mm256_cvtepi32_ps(a.s);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
inline
|
||||
int32_16 f32_16_to_int32_16(f32_16 a)
|
||||
{
|
||||
int32_16 result;
|
||||
result.s = _mm512_cvtps_epi32(a.s);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
inline
|
||||
f32_16 int32_16_to_f32_16(int32_16 a)
|
||||
{
|
||||
f32_16 result;
|
||||
result.s = _mm512_cvtepi32_ps(a.s);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
inline int32_4 operator+(int32_4 a, int32_4 b)
|
||||
{
|
||||
int32_4 simd;
|
||||
|
|
@ -193,26 +306,74 @@ inline int32_16 operator*(int32_16 a, int32_16 b)
|
|||
return simd;
|
||||
}
|
||||
|
||||
inline f32_4 operator/(int32_4 a, int32_4 b)
|
||||
inline int32_4 operator/(int32_4 a, int32_4 b)
|
||||
{
|
||||
int32_4 simd;
|
||||
simd.s = _mm_div_epi32(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int32_8 operator/(int32_8 a, int32_8 b)
|
||||
{
|
||||
int32_8 simd;
|
||||
simd.s = _mm256_div_epi32(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int32_16 operator/(int32_16 a, int32_16 b)
|
||||
{
|
||||
int32_16 simd;
|
||||
simd.s = _mm512_div_epi32(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline f32_4 operator/(f32_4 a, int32_4 b)
|
||||
{
|
||||
f32_4 simd;
|
||||
simd.s = _mm_div_ps(_mm_cvtepi32_ps(a.s), _mm_cvtepi32_ps(b.s));
|
||||
simd.s = _mm_div_ps(a.s, _mm_cvtepi32_ps(b.s));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline f32_8 operator/(int32_8 a, int32_8 b)
|
||||
inline f32_8 operator/(f32_8 a, int32_8 b)
|
||||
{
|
||||
f32_8 simd;
|
||||
simd.s = _mm256_div_ps(_mm256_cvtepi32_ps(a.s), _mm256_cvtepi32_ps(b.s));
|
||||
simd.s = _mm256_div_ps(a.s, _mm256_cvtepi32_ps(b.s));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline f32_16 operator/(int32_16 a, int32_16 b)
|
||||
inline f32_16 operator/(f32_16 a, int32_16 b)
|
||||
{
|
||||
f32_16 simd;
|
||||
simd.s = _mm512_div_ps(_mm512_cvtepi32_ps(a.s), _mm512_cvtepi32_ps(b.s));
|
||||
simd.s = _mm512_div_ps(a.s, _mm512_cvtepi32_ps(b.s));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline f32_4 operator/(int32_4 a, f32_4 b)
|
||||
{
|
||||
f32_4 simd;
|
||||
simd.s = _mm_div_ps(_mm_cvtepi32_ps(a.s), b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline f32_8 operator/(int32_8 a, f32_8 b)
|
||||
{
|
||||
f32_8 simd;
|
||||
simd.s = _mm256_div_ps(_mm256_cvtepi32_ps(a.s), b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline f32_16 operator/(int32_16 a, f32_16 b)
|
||||
{
|
||||
f32_16 simd;
|
||||
simd.s = _mm512_div_ps(_mm512_cvtepi32_ps(a.s), b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
|
@ -306,21 +467,21 @@ inline int32_16 &operator*=(int32_16 &a, int32_16 b)
|
|||
|
||||
inline int32_4 &operator/=(int32_4 &a, int32_4 b)
|
||||
{
|
||||
a.s = _mm_cvtps_epi32((a / b).s);
|
||||
a.s = (a / b).s;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int32_8 &operator/=(int32_8 &a, int32_8 b)
|
||||
{
|
||||
a.s = _mm256_cvtps_epi32((a / b).s);
|
||||
a.s = (a / b).s;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int32_16 &operator/=(int32_16 &a, int32_16 b)
|
||||
{
|
||||
a.s = _mm512_cvtps_epi32((a / b).s);
|
||||
a.s = (a / b).s;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
|
@ -582,28 +743,24 @@ inline int32_16 &operator|=(int32_16 &a, int32_16 b)
|
|||
|
||||
inline int32_4 abs(int32_4 a)
|
||||
{
|
||||
__m128i mask = _mm_set1_epi32(0x7FFFFFFF);
|
||||
|
||||
int32_4 simd;
|
||||
simd.s = _mm_and_si128(a.s, mask);
|
||||
simd.s = _mm_abs_epi32(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int32_8 abs(int32_8 a)
|
||||
{
|
||||
__m256i mask = _mm256_set1_epi32(0x7FFFFFFF);
|
||||
int32_8 simd;
|
||||
simd.s = _mm256_and_si256(a.s, mask);
|
||||
simd.s = _mm256_abs_epi32(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int32_16 abs(int32_16 a)
|
||||
{
|
||||
__m512i mask = _mm512_set1_epi32(0x7FFFFFFF);
|
||||
int32_16 simd;
|
||||
simd.s = _mm512_and_epi32(a.s, mask);
|
||||
simd.s = _mm512_abs_epi64(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
|
@ -864,4 +1021,546 @@ inline bool all_false(int32_16 a)
|
|||
return is_false;
|
||||
}
|
||||
|
||||
// @todo from down here we can optimize some of the code by NOT using the wrappers
|
||||
// the code is self contained and we could use te intrinsic functions directly
|
||||
|
||||
inline
|
||||
void simd_mult(const int32* a, const int32* b, int32* result, int size, int steps)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (steps == 16) {
|
||||
int32_16 a_16;
|
||||
int32_16 b_16;
|
||||
int32_16 result_16;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_16 = load_int32_16(a);
|
||||
b_16 = load_int32_16(b);
|
||||
result_16 = a_16 * b_16;
|
||||
unload_int32_16(result_16, result);
|
||||
}
|
||||
} else if (steps == 8) {
|
||||
int32_8 a_8;
|
||||
int32_8 b_8;
|
||||
int32_8 result_8;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_8 = load_int32_8(a);
|
||||
b_8 = load_int32_8(b);
|
||||
result_8 = a_8 * b_8;
|
||||
unload_int32_8(result_8, result);
|
||||
}
|
||||
} else if (steps == 4) {
|
||||
int32_4 a_4;
|
||||
int32_4 b_4;
|
||||
int32_4 result_4;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_4 = load_int32_4(a);
|
||||
b_4 = load_int32_4(b);
|
||||
result_4 = a_4 * b_4;
|
||||
unload_int32_4(result_4, result);
|
||||
}
|
||||
}
|
||||
|
||||
for (; i < size; ++i) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
*result = *a * *b;
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void simd_mult(const int32* a, const f32* b, f32* result, int size, int steps)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (steps == 16) {
|
||||
int32_16 a_16;
|
||||
f32_16 af_16;
|
||||
f32_16 b_16;
|
||||
f32_16 result_16;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_16 = load_int32_16(a);
|
||||
af_16 = int32_16_to_f32_16(a_16);
|
||||
b_16 = load_f32_16(b);
|
||||
result_16 = af_16 * b_16;
|
||||
unload_f32_16(result_16, result);
|
||||
}
|
||||
} else if (steps == 8) {
|
||||
int32_8 a_8;
|
||||
f32_8 af_8;
|
||||
f32_8 b_8;
|
||||
f32_8 result_8;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_8 = load_int32_8(a);
|
||||
af_8 = int32_8_to_f32_8(a_8);
|
||||
b_8 = load_f32_8(b);
|
||||
result_8 = af_8 * b_8;
|
||||
unload_f32_8(result_8, result);
|
||||
}
|
||||
} else if (steps == 4) {
|
||||
int32_4 a_4;
|
||||
f32_4 af_4;
|
||||
f32_4 b_4;
|
||||
f32_4 result_4;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_4 = load_int32_4(a);
|
||||
af_4 = int32_4_to_f32_4(a_4);
|
||||
b_4 = load_f32_4(b);
|
||||
result_4 = af_4 * b_4;
|
||||
unload_f32_4(result_4, result);
|
||||
}
|
||||
}
|
||||
|
||||
for (; i < size; ++i) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
*result = *a * *b;
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void simd_mult(const int32* a, const f32* b, int32* result, int size, int steps)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (steps == 16) {
|
||||
int32_16 a_16;
|
||||
f32_16 af_16;
|
||||
f32_16 b_16;
|
||||
f32_16 result_16;
|
||||
int32_16 resulti_16;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_16 = load_int32_16(a);
|
||||
af_16 = int32_16_to_f32_16(a_16);
|
||||
b_16 = load_f32_16(b);
|
||||
result_16 = af_16 * b_16;
|
||||
resulti_16 = f32_16_to_int32_16(result_16);
|
||||
unload_int32_16(resulti_16, result);
|
||||
}
|
||||
} else if (steps == 8) {
|
||||
int32_8 a_8;
|
||||
f32_8 af_8;
|
||||
f32_8 b_8;
|
||||
f32_8 result_8;
|
||||
int32_8 resulti_8;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_8 = load_int32_8(a);
|
||||
af_8 = int32_8_to_f32_8(a_8);
|
||||
b_8 = load_f32_8(b);
|
||||
result_8 = af_8 * b_8;
|
||||
resulti_8 = f32_8_to_int32_8(result_8);
|
||||
unload_int32_8(resulti_8, result);
|
||||
}
|
||||
} else if (steps == 4) {
|
||||
int32_4 a_4;
|
||||
f32_4 af_4;
|
||||
f32_4 b_4;
|
||||
f32_4 result_4;
|
||||
int32_4 resulti_4;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_4 = load_int32_4(a);
|
||||
af_4 = int32_4_to_f32_4(a_4);
|
||||
b_4 = load_f32_4(b);
|
||||
result_4 = af_4 * b_4;
|
||||
resulti_4 = f32_4_to_int32_4(result_4);
|
||||
unload_int32_4(resulti_4, result);
|
||||
}
|
||||
}
|
||||
|
||||
for (; i < size; ++i) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
*result = *a * *b;
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void int32_4_mult(const int32* a, const int32* b, int32* result)
|
||||
{
|
||||
int32_4 a_4 = load_int32_4(a);
|
||||
int32_4 b_4 = load_int32_4(b);
|
||||
int32_4 result_4 = a_4 * b_4;
|
||||
|
||||
unload_int32_4(result_4, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int32_8_mult(const int32* a, const int32* b, int32* result)
|
||||
{
|
||||
int32_8 a_8 = load_int32_8(a);
|
||||
int32_8 b_8 = load_int32_8(b);
|
||||
int32_8 result_8 = a_8 * b_8;
|
||||
|
||||
unload_int32_8(result_8, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int32_16_mult(const int32* a, const int32* b, int32* result)
|
||||
{
|
||||
int32_16 a_16 = load_int32_16(a);
|
||||
int32_16 b_16 = load_int32_16(b);
|
||||
int32_16 result_16 = a_16 * b_16;
|
||||
|
||||
unload_int32_16(result_16, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int32_4_mult(const int32* a, const f32* b, f32* result)
|
||||
{
|
||||
int32_4 a_4 = load_int32_4(a);
|
||||
f32_4 af_4 = int32_4_to_f32_4(a_4);
|
||||
f32_4 b_4 = load_f32_4(b);
|
||||
f32_4 result_4 = af_4 * b_4;
|
||||
|
||||
unload_f32_4(result_4, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int32_8_mult(const int32* a, const f32* b, f32* result)
|
||||
{
|
||||
int32_8 a_8 = load_int32_8(a);
|
||||
f32_8 af_8 = int32_8_to_f32_8(a_8);
|
||||
f32_8 b_8 = load_f32_8(b);
|
||||
f32_8 result_8 = af_8 * b_8;
|
||||
|
||||
unload_f32_8(result_8, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int32_16_mult(const int32* a, const f32* b, f32* result)
|
||||
{
|
||||
int32_16 a_16 = load_int32_16(a);
|
||||
f32_16 af_16 = int32_16_to_f32_16(a_16);
|
||||
f32_16 b_16 = load_f32_16(b);
|
||||
f32_16 result_16 = af_16 * b_16;
|
||||
|
||||
unload_f32_16(result_16, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void simd_add(const int32* a, const int32* b, int32* result, int size, int steps)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (steps == 16) {
|
||||
int32_16 a_16;
|
||||
int32_16 b_16;
|
||||
int32_16 result_16;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_16 = load_int32_16(a);
|
||||
b_16 = load_int32_16(b);
|
||||
result_16 = a_16 + b_16;
|
||||
unload_int32_16(result_16, result);
|
||||
}
|
||||
} else if (steps == 8) {
|
||||
int32_8 a_8;
|
||||
int32_8 b_8;
|
||||
int32_8 result_8;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_8 = load_int32_8(a);
|
||||
b_8 = load_int32_8(b);
|
||||
result_8 = a_8 + b_8;
|
||||
unload_int32_8(result_8, result);
|
||||
}
|
||||
} else if (steps == 4) {
|
||||
int32_4 a_4;
|
||||
int32_4 b_4;
|
||||
int32_4 result_4;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_4 = load_int32_4(a);
|
||||
b_4 = load_int32_4(b);
|
||||
result_4 = a_4 + b_4;
|
||||
unload_int32_4(result_4, result);
|
||||
}
|
||||
}
|
||||
|
||||
for (; i < size; ++i) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
*result = *a + *b;
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void simd_add(const int32* a, const f32* b, f32* result, int size, int steps)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (steps == 16) {
|
||||
int32_16 a_16;
|
||||
f32_16 af_16;
|
||||
f32_16 b_16;
|
||||
f32_16 result_16;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_16 = load_int32_16(a);
|
||||
af_16 = int32_16_to_f32_16(a_16);
|
||||
b_16 = load_f32_16(b);
|
||||
result_16 = af_16 + b_16;
|
||||
unload_f32_16(result_16, result);
|
||||
}
|
||||
} else if (steps == 8) {
|
||||
int32_8 a_8;
|
||||
f32_8 af_8;
|
||||
f32_8 b_8;
|
||||
f32_8 result_8;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_8 = load_int32_8(a);
|
||||
af_8 = int32_8_to_f32_8(a_8);
|
||||
b_8 = load_f32_8(b);
|
||||
result_8 = af_8 + b_8;
|
||||
unload_f32_8(result_8, result);
|
||||
}
|
||||
} else if (steps == 4) {
|
||||
int32_4 a_4;
|
||||
f32_4 af_4;
|
||||
f32_4 b_4;
|
||||
f32_4 result_4;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_4 = load_int32_4(a);
|
||||
af_4 = int32_4_to_f32_4(a_4);
|
||||
b_4 = load_f32_4(b);
|
||||
result_4 = af_4 + b_4;
|
||||
unload_f32_4(result_4, result);
|
||||
}
|
||||
}
|
||||
|
||||
for (; i < size; ++i) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
*result = *a + *b;
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void simd_add(const int32* a, const f32* b, int32* result, int size, int steps)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (steps == 16) {
|
||||
int32_16 a_16;
|
||||
f32_16 af_16;
|
||||
f32_16 b_16;
|
||||
f32_16 result_16;
|
||||
int32_16 resulti_16;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_16 = load_int32_16(a);
|
||||
af_16 = int32_16_to_f32_16(a_16);
|
||||
b_16 = load_f32_16(b);
|
||||
result_16 = af_16 + b_16;
|
||||
resulti_16 = f32_16_to_int32_16(result_16);
|
||||
unload_int32_16(resulti_16, result);
|
||||
}
|
||||
} else if (steps == 8) {
|
||||
int32_8 a_8;
|
||||
f32_8 af_8;
|
||||
f32_8 b_8;
|
||||
f32_8 result_8;
|
||||
int32_8 resulti_8;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_8 = load_int32_8(a);
|
||||
af_8 = int32_8_to_f32_8(a_8);
|
||||
b_8 = load_f32_8(b);
|
||||
result_8 = af_8 + b_8;
|
||||
resulti_8 = f32_8_to_int32_8(result_8);
|
||||
unload_int32_8(resulti_8, result);
|
||||
}
|
||||
} else if (steps == 4) {
|
||||
int32_4 a_4;
|
||||
f32_4 af_4;
|
||||
f32_4 b_4;
|
||||
f32_4 result_4;
|
||||
int32_4 resulti_4;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_4 = load_int32_4(a);
|
||||
af_4 = int32_4_to_f32_4(a_4);
|
||||
b_4 = load_f32_4(b);
|
||||
result_4 = af_4 + b_4;
|
||||
resulti_4 = f32_4_to_int32_4(result_4);
|
||||
unload_int32_4(resulti_4, result);
|
||||
}
|
||||
}
|
||||
|
||||
for (; i < size; ++i) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
*result = *a + *b;
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void int32_4_add(const int32* a, const int32* b, int32* result)
|
||||
{
|
||||
int32_4 a_4 = load_int32_4(a);
|
||||
int32_4 b_4 = load_int32_4(b);
|
||||
int32_4 result_4 = a_4 + b_4;
|
||||
|
||||
unload_int32_4(result_4, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int32_8_add(const int32* a, const int32* b, int32* result)
|
||||
{
|
||||
int32_8 a_8 = load_int32_8(a);
|
||||
int32_8 b_8 = load_int32_8(b);
|
||||
int32_8 result_8 = a_8 + b_8;
|
||||
|
||||
unload_int32_8(result_8, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int32_16_add(const int32* a, const int32* b, int32* result)
|
||||
{
|
||||
int32_16 a_16 = load_int32_16(a);
|
||||
int32_16 b_16 = load_int32_16(b);
|
||||
int32_16 result_16 = a_16 + b_16;
|
||||
|
||||
unload_int32_16(result_16, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int32_4_add(const int32* a, const f32* b, f32* result)
|
||||
{
|
||||
int32_4 a_4 = load_int32_4(a);
|
||||
f32_4 af_4 = int32_4_to_f32_4(a_4);
|
||||
f32_4 b_4 = load_f32_4(b);
|
||||
f32_4 result_4 = af_4 + b_4;
|
||||
|
||||
unload_f32_4(result_4, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int32_8_add(const int32* a, const f32* b, f32* result)
|
||||
{
|
||||
int32_8 a_8 = load_int32_8(a);
|
||||
f32_8 af_8 = int32_8_to_f32_8(a_8);
|
||||
f32_8 b_8 = load_f32_8(b);
|
||||
f32_8 result_8 = af_8 + b_8;
|
||||
|
||||
unload_f32_8(result_8, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int32_16_add(const int32* a, const f32* b, f32* result)
|
||||
{
|
||||
int32_16 a_16 = load_int32_16(a);
|
||||
f32_16 af_16 = int32_16_to_f32_16(a_16);
|
||||
f32_16 b_16 = load_f32_16(b);
|
||||
f32_16 result_16 = af_16 + b_16;
|
||||
|
||||
unload_f32_16(result_16, result);
|
||||
}
|
||||
|
||||
// WARNING: only works with SSE4.2
|
||||
// WARNING: incl. \0 both strings must be <= 16
|
||||
bool simd_str_compare(const char* str1, const char* str2) {
|
||||
__m128i s1 = _mm_loadu_si128((const __m128i*) str1);
|
||||
__m128i s2 = _mm_loadu_si128((const __m128i*) str2);
|
||||
|
||||
return _mm_cmpistrc(s1, s2, _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_EACH) == 0;
|
||||
}
|
||||
|
||||
// @todo add more operations like the one above "int32_4_mult()"
|
||||
|
||||
#endif
|
||||
|
|
|
|||
983
stdlib/simd/SIMD_I8.h
Normal file
983
stdlib/simd/SIMD_I8.h
Normal file
|
|
@ -0,0 +1,983 @@
|
|||
/**
|
||||
* Jingga
|
||||
*
|
||||
* @copyright Jingga
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
#ifndef TOS_TOS_STDLIB_SIMD_I8_H
|
||||
#define TOS_TOS_STDLIB_SIMD_I8_H
|
||||
|
||||
#include <immintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
|
||||
#include "../Types.h"
|
||||
|
||||
struct int8_16 {
|
||||
union {
|
||||
__m128i s;
|
||||
int8 v[16];
|
||||
};
|
||||
};
|
||||
|
||||
struct int8_32 {
|
||||
union {
|
||||
__m256i s;
|
||||
int8 v[32];
|
||||
};
|
||||
};
|
||||
|
||||
struct int8_64 {
|
||||
union {
|
||||
__m512i s;
|
||||
int8 v[64];
|
||||
};
|
||||
};
|
||||
|
||||
inline int8_16 load_int8_16(const int8* mem)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_loadu_epi8(mem);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 init_int8_16(const int8* mem)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_set_epi8(
|
||||
mem[0], mem[1], mem[2], mem[3],
|
||||
mem[4], mem[5], mem[6], mem[7],
|
||||
mem[8], mem[9], mem[10], mem[11],
|
||||
mem[12], mem[13], mem[14], mem[15]
|
||||
);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline void unload_int8_16(int8_16 a, int8 *array) { _mm_store_si128((__m128i *) array, a.s); }
|
||||
|
||||
inline int8_32 load_int8_32(const int8* mem)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_loadu_epi8(mem);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 init_int8_32(const int8* mem)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_set_epi8(
|
||||
mem[0], mem[1], mem[2], mem[3], mem[4], mem[5], mem[6], mem[7],
|
||||
mem[8], mem[9], mem[10], mem[11], mem[12], mem[13], mem[14], mem[15],
|
||||
mem[16], mem[17], mem[18], mem[19], mem[20], mem[21], mem[22], mem[23],
|
||||
mem[24], mem[25], mem[26], mem[27], mem[28], mem[29], mem[30], mem[31]
|
||||
);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline void unload_int8_32(int8_32 a, int8 *array) { _mm256_store_si256((__m256i *) array, a.s); }
|
||||
|
||||
inline int8_64 load_int8_64(const int8* mem)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_loadu_epi8(mem);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 init_int8_64(const int8* mem)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_set_epi8(
|
||||
mem[0], mem[1], mem[2], mem[3], mem[4], mem[5], mem[6], mem[7],
|
||||
mem[8], mem[9], mem[10], mem[11], mem[12], mem[13], mem[14], mem[15],
|
||||
mem[16], mem[17], mem[18], mem[19], mem[20], mem[21], mem[22], mem[23],
|
||||
mem[24], mem[25], mem[26], mem[27], mem[28], mem[29], mem[30], mem[31],
|
||||
mem[32], mem[33], mem[34], mem[35], mem[36], mem[37], mem[38], mem[39],
|
||||
mem[40], mem[41], mem[42], mem[43], mem[44], mem[45], mem[46], mem[47],
|
||||
mem[48], mem[49], mem[50], mem[51], mem[52], mem[53], mem[54], mem[55],
|
||||
mem[56], mem[57], mem[58], mem[59], mem[60], mem[61], mem[62], mem[63]
|
||||
);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline void unload_int8_64(int8_64 a, int8 *array) { _mm512_storeu_epi8(array, a.s); }
|
||||
|
||||
inline int8_16 init_zero_int8_16()
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_setzero_si128();
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 init_zero_int8_32()
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_setzero_si256();
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 init_zero_int8_64()
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_setzero_si512();
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 init_value_int8_16(int8 value)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_set1_epi8(value);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 init_value_int8_32(int8 value)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_set1_epi8(value);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 init_value_int8_64(int8 value)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_set1_epi8(value);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 operator+(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_add_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 operator+(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_add_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 operator+(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_add_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 operator-(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_sub_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 operator-(int8_16 a) { return init_zero_int8_16() - a; }
|
||||
|
||||
inline int8_32 operator-(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_sub_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 operator-(int8_32 a) { return init_zero_int8_32() - a; }
|
||||
|
||||
inline int8_64 operator-(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_sub_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 operator-(int8_64 a) { return init_zero_int8_64() - a; }
|
||||
|
||||
inline int8_16 operator*(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_mul_epi32(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 operator*(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_mul_epi32(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 operator*(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_mul_epi32(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 operator/(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_div_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 operator/(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_div_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 operator/(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_div_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 operator^(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_xor_si128(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 operator^(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_xor_si256(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 operator^(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_xor_si512(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 &operator-=(int8_16 &a, int8_16 b)
|
||||
{
|
||||
a = a - b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_32 &operator-=(int8_32 &a, int8_32 b)
|
||||
{
|
||||
a = a - b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_64 &operator-=(int8_64 &a, int8_64 b)
|
||||
{
|
||||
a = a - b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_16 &operator+=(int8_16 &a, int8_16 b)
|
||||
{
|
||||
a = a + b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_32 &operator+=(int8_32 &a, int8_32 b)
|
||||
{
|
||||
a = a + b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_64 &operator+=(int8_64 &a, int8_64 b)
|
||||
{
|
||||
a = a + b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_16 &operator*=(int8_16 &a, int8_16 b)
|
||||
{
|
||||
a = a * b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_32 &operator*=(int8_32 &a, int8_32 b)
|
||||
{
|
||||
a = a * b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_64 &operator*=(int8_64 &a, int8_64 b)
|
||||
{
|
||||
a = a * b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_16 &operator/=(int8_16 &a, int8_16 b)
|
||||
{
|
||||
a.s = (a / b).s;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_32 &operator/=(int8_32 &a, int8_32 b)
|
||||
{
|
||||
a.s = (a / b).s;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_64 &operator/=(int8_64 &a, int8_64 b)
|
||||
{
|
||||
a.s = (a / b).s;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_16 &operator^=(int8_16 &a, int8_16 b)
|
||||
{
|
||||
a = a ^ b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_32 &operator^=(int8_32 &a, int8_32 b)
|
||||
{
|
||||
a = a ^ b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_64 &operator^=(int8_64 &a, int8_64 b)
|
||||
{
|
||||
a = a ^ b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_16 operator<(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_cmplt_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 operator<(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_xor_si256(_mm256_cmpgt_epi8(a.s, b.s), _mm256_set1_epi8(-1));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 operator<(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_mask_blend_epi8(_mm512_cmplt_epi8_mask(a.s, b.s), a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 operator<=(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_andnot_si128(_mm_cmplt_epi8(b.s, a.s), _mm_set1_epi8(-1));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 operator<=(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_andnot_si256(_mm256_cmpgt_epi8(a.s, b.s), _mm256_set1_epi8(-1));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 operator<=(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_mask_blend_epi8(_mm512_knot(_mm512_cmpgt_epi8_mask(b.s, a.s)), b.s, a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 operator>(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_cmpgt_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 operator>(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_cmpgt_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 operator>(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_mask_blend_epi8(_mm512_cmpgt_epi8_mask(a.s, b.s), a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 operator>=(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_andnot_si128(_mm_cmplt_epi8(a.s, b.s), _mm_set1_epi8(-1));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 operator>=(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_andnot_si256(_mm256_cmpgt_epi8(b.s, a.s), _mm256_set1_epi8(-1));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 operator>=(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_mask_blend_epi8(_mm512_cmpge_epi8_mask(a.s, b.s), a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 operator==(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_cmpeq_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 operator==(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_cmpeq_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 operator==(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_mask_blend_epi8(_mm512_cmpeq_epi8_mask(a.s, b.s), a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 operator!=(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_andnot_si128(_mm_cmpeq_epi8(a.s, b.s), _mm_set1_epi8(-1));
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 operator!=(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_mask_blend_epi8(_mm256_cmp_epi8_mask(a.s, b.s, _MM_CMPINT_NE), a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 operator!=(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_mask_blend_epi8(_mm512_cmp_epi8_mask(a.s, b.s, _MM_CMPINT_NE), a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 operator&(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_and_si128(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 operator&(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_and_si256(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 operator&(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_and_si512(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 operator|(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_or_si128(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 operator|(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_or_si256(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 operator|(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_or_si512(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 &operator&=(int8_16 &a, int8_16 b)
|
||||
{
|
||||
a = a & b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_32 &operator&=(int8_32 &a, int8_32 b)
|
||||
{
|
||||
a = a & b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_64 &operator&=(int8_64 &a, int8_64 b)
|
||||
{
|
||||
a = a & b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_16 &operator|=(int8_16 &a, int8_16 b)
|
||||
{
|
||||
a = a | b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_32 &operator|=(int8_32 &a, int8_32 b)
|
||||
{
|
||||
a = a | b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_64 &operator|=(int8_64 &a, int8_64 b)
|
||||
{
|
||||
a = a | b;
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
inline int8_16 abs(int8_16 a)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_abs_epi8(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 abs(int8_32 a)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_abs_epi16(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 abs(int8_64 a)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_abs_epi16(a.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 simd_min(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_min_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 simd_min(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_min_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 simd_min(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_min_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 simd_max(int8_16 a, int8_16 b)
|
||||
{
|
||||
int8_16 simd;
|
||||
simd.s = _mm_max_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_32 simd_max(int8_32 a, int8_32 b)
|
||||
{
|
||||
int8_32 simd;
|
||||
simd.s = _mm256_max_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_64 simd_max(int8_64 a, int8_64 b)
|
||||
{
|
||||
int8_64 simd;
|
||||
simd.s = _mm512_max_epi8(a.s, b.s);
|
||||
|
||||
return simd;
|
||||
}
|
||||
|
||||
inline int8_16 clamp(int8_16 min_value, int8_16 a, int8_16 max_value)
|
||||
{
|
||||
return simd_min(simd_max(a, min_value), max_value);
|
||||
}
|
||||
|
||||
inline int8_32 clamp(int8_32 min_value, int8_32 a, int8_32 max_value)
|
||||
{
|
||||
return simd_min(simd_max(a, min_value), max_value);
|
||||
}
|
||||
|
||||
inline int8_64 clamp(int8_64 min_value, int8_64 a, int8_64 max_value)
|
||||
{
|
||||
return simd_min(simd_max(a, min_value), max_value);
|
||||
}
|
||||
|
||||
inline int8 which_true(int8_16 a)
|
||||
{
|
||||
int8 which_true = _mm_movemask_epi8(a.s);
|
||||
|
||||
return which_true;
|
||||
}
|
||||
|
||||
inline int8 which_true(int8_32 a)
|
||||
{
|
||||
int8 which_true = _mm256_movemask_epi8(a.s);
|
||||
|
||||
return which_true;
|
||||
}
|
||||
|
||||
inline int8 which_true(int8_64 a)
|
||||
{
|
||||
int8 which_true = _mm512_movepi8_mask(a.s);
|
||||
|
||||
return which_true;
|
||||
}
|
||||
|
||||
inline bool any_true(int8_16 a)
|
||||
{
|
||||
bool is_any_true = _mm_movemask_epi8(a.s) > 0;
|
||||
|
||||
return is_any_true;
|
||||
}
|
||||
|
||||
inline bool any_true(int8_32 a)
|
||||
{
|
||||
bool is_any_true = _mm256_movemask_epi8(a.s) > 0;
|
||||
|
||||
return is_any_true;
|
||||
}
|
||||
|
||||
inline bool any_true(int8_64 a)
|
||||
{
|
||||
bool is_any_true = _mm512_movepi8_mask(a.s) > 0;
|
||||
|
||||
return is_any_true;
|
||||
}
|
||||
|
||||
inline bool all_true(int8_16 a)
|
||||
{
|
||||
bool is_true = _mm_movemask_epi8(a.s) == 15;
|
||||
|
||||
return is_true;
|
||||
}
|
||||
|
||||
inline bool all_true(int8_32 a)
|
||||
{
|
||||
bool is_true = _mm256_movemask_epi8(a.s) == 255;
|
||||
|
||||
return is_true;
|
||||
}
|
||||
|
||||
inline bool all_true(int8_64 a)
|
||||
{
|
||||
bool is_true = _mm512_movepi8_mask(a.s) == 65535;
|
||||
|
||||
return is_true;
|
||||
}
|
||||
|
||||
inline bool all_false(int8_16 a)
|
||||
{
|
||||
bool is_false = _mm_movemask_epi8(a.s) == 0;
|
||||
|
||||
return is_false;
|
||||
}
|
||||
|
||||
inline bool all_false(int8_32 a)
|
||||
{
|
||||
bool is_false = _mm256_movemask_epi8(a.s) == 0;
|
||||
|
||||
return is_false;
|
||||
}
|
||||
|
||||
inline bool all_false(int8_64 a)
|
||||
{
|
||||
// @todo This can be optimized (requires also changes in the comparison functions return)
|
||||
bool is_false = _mm512_movepi8_mask(a.s) == 0;
|
||||
|
||||
return is_false;
|
||||
}
|
||||
|
||||
// @todo from down here we can optimize some of the code by NOT using the wrappers
|
||||
// the code is self contained and we could use te intrinsic functions directly
|
||||
|
||||
inline
|
||||
void simd_mult(const int8* a, const int8* b, int8* result, int size, int steps)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (steps == 16) {
|
||||
int8_64 a_16;
|
||||
int8_64 b_16;
|
||||
int8_64 result_16;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_16 = load_int8_64(a);
|
||||
b_16 = load_int8_64(b);
|
||||
result_16 = a_16 * b_16;
|
||||
unload_int8_64(result_16, result);
|
||||
}
|
||||
} else if (steps == 8) {
|
||||
int8_32 a_8;
|
||||
int8_32 b_8;
|
||||
int8_32 result_8;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_8 = load_int8_32(a);
|
||||
b_8 = load_int8_32(b);
|
||||
result_8 = a_8 * b_8;
|
||||
unload_int8_32(result_8, result);
|
||||
}
|
||||
} else if (steps == 4) {
|
||||
int8_16 a_4;
|
||||
int8_16 b_4;
|
||||
int8_16 result_4;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_4 = load_int8_16(a);
|
||||
b_4 = load_int8_16(b);
|
||||
result_4 = a_4 * b_4;
|
||||
unload_int8_16(result_4, result);
|
||||
}
|
||||
}
|
||||
|
||||
for (; i < size; ++i) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
*result = *a * *b;
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void int8_16_mult(const int8* a, const int8* b, int8* result)
|
||||
{
|
||||
int8_16 a_4 = load_int8_16(a);
|
||||
int8_16 b_4 = load_int8_16(b);
|
||||
int8_16 result_4 = a_4 * b_4;
|
||||
|
||||
unload_int8_16(result_4, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int8_32_mult(const int8* a, const int8* b, int8* result)
|
||||
{
|
||||
int8_32 a_8 = load_int8_32(a);
|
||||
int8_32 b_8 = load_int8_32(b);
|
||||
int8_32 result_8 = a_8 * b_8;
|
||||
|
||||
unload_int8_32(result_8, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int8_64_mult(const int8* a, const int8* b, int8* result)
|
||||
{
|
||||
int8_64 a_16 = load_int8_64(a);
|
||||
int8_64 b_16 = load_int8_64(b);
|
||||
int8_64 result_16 = a_16 * b_16;
|
||||
|
||||
unload_int8_64(result_16, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void simd_add(const int8* a, const int8* b, int8* result, int size, int steps)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (steps == 16) {
|
||||
int8_64 a_16;
|
||||
int8_64 b_16;
|
||||
int8_64 result_16;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_16 = load_int8_64(a);
|
||||
b_16 = load_int8_64(b);
|
||||
result_16 = a_16 + b_16;
|
||||
unload_int8_64(result_16, result);
|
||||
}
|
||||
} else if (steps == 8) {
|
||||
int8_32 a_8;
|
||||
int8_32 b_8;
|
||||
int8_32 result_8;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_8 = load_int8_32(a);
|
||||
b_8 = load_int8_32(b);
|
||||
result_8 = a_8 + b_8;
|
||||
unload_int8_32(result_8, result);
|
||||
}
|
||||
} else if (steps == 4) {
|
||||
int8_16 a_4;
|
||||
int8_16 b_4;
|
||||
int8_16 result_4;
|
||||
|
||||
for (i = 0; i <= size - steps; i += steps) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
a_4 = load_int8_16(a);
|
||||
b_4 = load_int8_16(b);
|
||||
result_4 = a_4 + b_4;
|
||||
unload_int8_16(result_4, result);
|
||||
}
|
||||
}
|
||||
|
||||
for (; i < size; ++i) {
|
||||
++a;
|
||||
++b;
|
||||
++result;
|
||||
|
||||
*result = *a + *b;
|
||||
}
|
||||
}
|
||||
|
||||
inline
|
||||
void int8_16_add(const int8* a, const int8* b, int8* result)
|
||||
{
|
||||
int8_16 a_4 = load_int8_16(a);
|
||||
int8_16 b_4 = load_int8_16(b);
|
||||
int8_16 result_4 = a_4 + b_4;
|
||||
|
||||
unload_int8_16(result_4, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int8_32_add(const int8* a, const int8* b, int8* result)
|
||||
{
|
||||
int8_32 a_8 = load_int8_32(a);
|
||||
int8_32 b_8 = load_int8_32(b);
|
||||
int8_32 result_8 = a_8 + b_8;
|
||||
|
||||
unload_int8_32(result_8, result);
|
||||
}
|
||||
|
||||
inline
|
||||
void int8_64_add(const int8* a, const int8* b, int8* result)
|
||||
{
|
||||
int8_64 a_16 = load_int8_64(a);
|
||||
int8_64 b_16 = load_int8_64(b);
|
||||
int8_64 result_16 = a_16 + b_16;
|
||||
|
||||
unload_int8_64(result_16, result);
|
||||
}
|
||||
|
||||
// @todo add more operations like the one above "int8_16_mult()"
|
||||
|
||||
#endif
|
||||
|
|
@ -265,6 +265,8 @@ void ms_to_timespec(timespec *ts, uint32 ms)
|
|||
|
||||
return sysinfo.dwNumberOfProcessors;
|
||||
}
|
||||
|
||||
#define pthread_exit(a) {return (a);}
|
||||
#else
|
||||
unsigned int pcthread_get_num_procs()
|
||||
{
|
||||
|
|
|
|||
0
ui/Dropdown.h
Normal file
0
ui/Dropdown.h
Normal file
0
ui/Image.h
Normal file
0
ui/Image.h
Normal file
0
ui/Panel.h
Normal file
0
ui/Panel.h
Normal file
0
ui/Select.h
Normal file
0
ui/Select.h
Normal file
0
ui/Table.h
Normal file
0
ui/Table.h
Normal file
0
ui/Textarea.h
Normal file
0
ui/Textarea.h
Normal file
0
ui/Textfield.h
Normal file
0
ui/Textfield.h
Normal file
35
ui/UIButton.h
Normal file
35
ui/UIButton.h
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
#ifndef TOS_UI_BUTTON_H
|
||||
#define TOS_UI_BUTTON_H
|
||||
|
||||
#include "UIElement.h"
|
||||
#include "UILayout.h"
|
||||
|
||||
#include "../animation/AnimationEaseType.h"
|
||||
|
||||
enum ButtonState {
|
||||
BUTTON_STATE_DEFAULT,
|
||||
BUTTON_STATE_HOVER,
|
||||
BUTTON_STATE_CLICK
|
||||
};
|
||||
|
||||
struct UIButton {
|
||||
UIElement element;
|
||||
|
||||
ButtonState state_old;
|
||||
ButtonState state_new;
|
||||
|
||||
// Is pointer becuase we probably want to have a global layout style that we re-use over and over
|
||||
UILayout* layout_default;
|
||||
|
||||
UILayout* layout_hover;
|
||||
float layout_hover_anim_duration;
|
||||
AnimationEaseType layout_hover_anim_style;
|
||||
int hover_sound;
|
||||
|
||||
UILayout* layout_click;
|
||||
float layout_click_anim_duration;
|
||||
AnimationEaseType layout_click_anim_style;
|
||||
int click_sound;
|
||||
};
|
||||
|
||||
#endif
|
||||
20
ui/UIElement.h
Normal file
20
ui/UIElement.h
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
#ifndef TOS_UI_ELEMENT_H
|
||||
#define TOS_UI_ELEMENT_H
|
||||
|
||||
#include "UIElementType.h"
|
||||
|
||||
struct UIElement {
|
||||
int id;
|
||||
int type;
|
||||
|
||||
int window_id;
|
||||
int panel_id;
|
||||
|
||||
bool is_visible;
|
||||
bool is_active;
|
||||
bool is_focused;
|
||||
|
||||
UIElementType type;
|
||||
};
|
||||
|
||||
#endif
|
||||
20
ui/UIElementType.h
Normal file
20
ui/UIElementType.h
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
#ifndef TOS_UI_ELEMENT_TYPE_H
|
||||
#define TOS_UI_ELEMENT_TYPE_H
|
||||
|
||||
enum UIElementType {
|
||||
UI_ELEMENT_TYPE_BUTTON,
|
||||
UI_ELEMENT_TYPE_SELECT,
|
||||
UI_ELEMENT_TYPE_DROPDOWN,
|
||||
UI_ELEMENT_TYPE_TEXTFIELD,
|
||||
UI_ELEMENT_TYPE_TEXTAREA,
|
||||
UI_ELEMENT_TYPE_IMAGE,
|
||||
UI_ELEMENT_TYPE_TEXT,
|
||||
UI_ELEMENT_TYPE_LINK,
|
||||
UI_ELEMENT_TYPE_TABLE,
|
||||
|
||||
UI_ELEMENT_TYPE_VIEW_WINDOW,
|
||||
UI_ELEMENT_TYPE_VIEW_PANEL,
|
||||
UI_ELEMENT_TYPE_VIEW_TAB,
|
||||
};
|
||||
|
||||
#endif
|
||||
51
ui/UILayout.h
Normal file
51
ui/UILayout.h
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
#ifndef TOS_UI_LAYOUT_H
|
||||
#define TOS_UI_LAYOUT_H
|
||||
|
||||
#include "../stdlib/Mathtypes.h"
|
||||
|
||||
#include "UIPosition.h"
|
||||
#include "UILocation.h"
|
||||
|
||||
struct UILayout {
|
||||
int x;
|
||||
int y;
|
||||
|
||||
int width;
|
||||
int height;
|
||||
|
||||
UIPosition position;
|
||||
|
||||
UILocation self;
|
||||
UILocation children;
|
||||
|
||||
int margin[4];
|
||||
int padding[4];
|
||||
|
||||
int border_width[4];
|
||||
v3_int32 border_color;
|
||||
|
||||
v3_int32 color_background;
|
||||
v3_int32 color_foreground;
|
||||
|
||||
int image_background;
|
||||
int image_width;
|
||||
int image_height;
|
||||
|
||||
// Horizontal and vertical scaling can have 2 scalable areas
|
||||
int image_horizontal_area1[4];
|
||||
int image_horizontal_area2[4];
|
||||
|
||||
int image_vertical_area1[4];
|
||||
int image_vertical_area2[4];
|
||||
bool image_repeatable;
|
||||
|
||||
int shadow_outer_width[4];
|
||||
int shadow_outer_color;
|
||||
|
||||
int shadow_inner_width[4];
|
||||
int shadow_inner_color;
|
||||
|
||||
int curser_style;
|
||||
};
|
||||
|
||||
#endif
|
||||
13
ui/UILocation.h
Normal file
13
ui/UILocation.h
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#ifndef TOS_UI_LOCATION_H
|
||||
#define TOS_UI_LOCATION_H
|
||||
|
||||
enum UILocation {
|
||||
UI_LOCATION_LEFT,
|
||||
UI_LOCATION_CENTER,
|
||||
UI_LOCATION_RIGHT,
|
||||
|
||||
UI_LOCATION_FLEX_ROW,
|
||||
UI_LOCATION_FLEX_COL
|
||||
};
|
||||
|
||||
#endif
|
||||
9
ui/UIPosition.h
Normal file
9
ui/UIPosition.h
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#ifndef TOS_UI_POSITION_H
|
||||
#define TOS_UI_POSITION_H
|
||||
|
||||
enum UIPosition {
|
||||
UI_POSITION_RELATIVE,
|
||||
UI_POSITION_ABSOLUTE
|
||||
};
|
||||
|
||||
#endif
|
||||
39
ui/UIWindow.h
Normal file
39
ui/UIWindow.h
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
#ifndef TOS_UI_WINDOW_H
|
||||
#define TOS_UI_WINDOW_H
|
||||
|
||||
#include "UIElement.h"
|
||||
#include "UILayout.h"
|
||||
|
||||
#include "../animation/AnimationEaseType.h"
|
||||
|
||||
enum WindowState {
|
||||
WINDOW_STATE_ACIVE,
|
||||
WINDOW_STATE_INACTIVE,
|
||||
WINDOW_STATE_FOCUS,
|
||||
|
||||
WINDOW_STATE_MOVING,
|
||||
WINDOW_STATE_OPENING,
|
||||
WINDOW_STATE_CLOSING
|
||||
};
|
||||
|
||||
struct UIWindow {
|
||||
UIElement element;
|
||||
|
||||
WindowState state_old;
|
||||
WindowState state_new;
|
||||
|
||||
bool is_minimizable;
|
||||
bool is_maximizable;
|
||||
bool is_movable;
|
||||
bool is_resizable;
|
||||
|
||||
// window is only movable when holding this area
|
||||
int movable_area[4];
|
||||
|
||||
UILayout* layout_default;
|
||||
float layout_open_anim_duration;
|
||||
float layout_close_anim_duration;
|
||||
float layout_min_anim_duration;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -9,7 +9,12 @@
|
|||
#ifndef TOS_UTILS_COMPILER_H
|
||||
#define TOS_UTILS_COMPILER_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include <malloc.h>
|
||||
|
||||
inline
|
||||
void* aligned_alloc(size_t alignment, size_t size) {
|
||||
return _aligned_malloc(size, alignment);
|
||||
|
|
@ -20,8 +25,6 @@
|
|||
_aligned_free(ptr);
|
||||
}
|
||||
#else
|
||||
#include <stdlib.h>
|
||||
|
||||
inline
|
||||
void aligned_free(void* ptr) {
|
||||
free(ptr);
|
||||
|
|
|
|||
50
utils/FastPipes.h
Normal file
50
utils/FastPipes.h
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
/**
|
||||
* Jingga
|
||||
*
|
||||
* @copyright Jingga
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
#ifndef TOS_UTILS_FAST_PIPES_H
|
||||
#define TOS_UTILS_FAST_PIPES_H
|
||||
|
||||
// requires kernel32.lib and user32.lib
|
||||
|
||||
#if _WIN32
|
||||
#include <windows.h>
|
||||
#include <io.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
|
||||
static int ENABLE_FAST_PIPES()
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
wchar_t pipe_name[32];
|
||||
wsprintfW(pipe_name, L"\\\\.\\pipe\\fastpipe%x", GetCurrentProcessId());
|
||||
HANDLE fast_pip = CreateFileW(pipe_name, GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
|
||||
|
||||
if(fast_pip != INVALID_HANDLE_VALUE) {
|
||||
SetStdHandle(STD_OUTPUT_HANDLE, fast_pip);
|
||||
SetStdHandle(STD_INPUT_HANDLE, fast_pip);
|
||||
|
||||
int std_out = _open_osfhandle((intptr_t) fast_pip, O_WRONLY|O_TEXT);
|
||||
int std_in = _open_osfhandle((intptr_t) fast_pip, O_RDONLY|O_TEXT);
|
||||
|
||||
_dup2(std_out, _fileno(stdout));
|
||||
_dup2(std_in, _fileno(stdin));
|
||||
|
||||
_close(std_out);
|
||||
_close(std_in);
|
||||
|
||||
result = 1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
#else
|
||||
#define ENABLE_FAST_PIPES(...) 0
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
@ -15,6 +15,28 @@
|
|||
|
||||
#include "../stdlib/Types.h"
|
||||
|
||||
inline
|
||||
void wchar_to_char(const wchar_t* src, char* dest, int length = 0)
|
||||
{
|
||||
char* temp = (char *) src;
|
||||
size_t len = wcslen(src) * sizeof(wchar_t);
|
||||
|
||||
if (length > 0 && length < len) {
|
||||
len = length;
|
||||
}
|
||||
|
||||
for (int i = 0; i < len; ++i) {
|
||||
if (*temp != '\0') {
|
||||
*dest = (char) *temp;
|
||||
++dest;
|
||||
}
|
||||
|
||||
++temp;
|
||||
}
|
||||
|
||||
*dest = '\0';
|
||||
}
|
||||
|
||||
inline size_t str_count(const char *str, const char *substr)
|
||||
{
|
||||
size_t l1 = strlen(str);
|
||||
|
|
|
|||
523
utils/SystemInfo.h
Normal file
523
utils/SystemInfo.h
Normal file
|
|
@ -0,0 +1,523 @@
|
|||
/**
|
||||
* Jingga
|
||||
*
|
||||
* @copyright Jingga
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
#ifndef TOS_UTILS_SYSTEM_INFO_H
|
||||
#define TOS_UTILS_SYSTEM_INFO_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include "StringUtils.h"
|
||||
#include "../stdlib/Types.h"
|
||||
#include "../stdlib/simd/SIMD_Helper.h"
|
||||
|
||||
#if _WIN32
|
||||
#include <winsock2.h>
|
||||
#include <iphlpapi.h>
|
||||
#include <ws2tcpip.h>
|
||||
#include <windows.h>
|
||||
#include <d3d11.h>
|
||||
#include <dxgi.h>
|
||||
#include <wbemidl.h>
|
||||
#include <comdef.h>
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include <intrin.h>
|
||||
#endif
|
||||
|
||||
#if __linux__ && (__i386__ || __x86_64__)
|
||||
#include <cpuid.h>
|
||||
#endif
|
||||
|
||||
// @todo implement for arm?
|
||||
// @todo implement for linux?
|
||||
|
||||
struct CpuCacheInfo {
|
||||
int level;
|
||||
int size;
|
||||
int ways;
|
||||
int partitions;
|
||||
int sets;
|
||||
int line_size;
|
||||
};
|
||||
|
||||
void get_cache_info(int level, CpuCacheInfo* cache) {
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
int type;
|
||||
|
||||
cache->level = level;
|
||||
cache->size = 0;
|
||||
cache->ways = 0;
|
||||
cache->partitions = 0;
|
||||
cache->sets = 0;
|
||||
cache->line_size = 0;
|
||||
|
||||
#if _WIN32
|
||||
int regs[4];
|
||||
__cpuidex(regs, 4, level);
|
||||
eax = regs[0];
|
||||
ebx = regs[1];
|
||||
ecx = regs[2];
|
||||
edx = regs[3];
|
||||
|
||||
type = (eax & 0x1F);
|
||||
#else
|
||||
__cpuid_count(4, level, eax, ebx, ecx, edx);
|
||||
|
||||
type = (eax & 0x1F);
|
||||
#endif
|
||||
|
||||
if (type == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
cache->ways = ((ebx >> 22) & 0x3FF) + 1;
|
||||
cache->line_size = (ebx & 0xFFF) + 1;
|
||||
cache->partitions = ((ebx >> 12) & 0x3FF) + 1;
|
||||
cache->sets = ecx + 1;
|
||||
cache->size = cache->ways * cache->partitions * cache->line_size * cache->sets;
|
||||
}
|
||||
|
||||
// @todo add vendor name
|
||||
struct MainboardInfo {
|
||||
char name[64];
|
||||
char serial_number[64];
|
||||
};
|
||||
|
||||
void get_mainboard_info(MainboardInfo* info) {
|
||||
info->name[63] = '\0';
|
||||
info->serial_number[63] = '\0';
|
||||
|
||||
HRESULT hres;
|
||||
|
||||
// Step 1: Initialize COM library
|
||||
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
|
||||
if (FAILED(hres)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Step 2: Set general COM security levels
|
||||
hres = CoInitializeSecurity(
|
||||
NULL,
|
||||
-1,
|
||||
NULL,
|
||||
NULL,
|
||||
RPC_C_AUTHN_LEVEL_DEFAULT,
|
||||
RPC_C_IMP_LEVEL_IMPERSONATE,
|
||||
NULL,
|
||||
EOAC_NONE,
|
||||
NULL
|
||||
);
|
||||
if (FAILED(hres)) {
|
||||
CoUninitialize();
|
||||
return;
|
||||
}
|
||||
|
||||
// Step 3: Obtain initial locator to WMI
|
||||
IWbemLocator *pLoc = NULL;
|
||||
hres = CoCreateInstance(
|
||||
CLSID_WbemLocator,
|
||||
0,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_IWbemLocator,
|
||||
(LPVOID *)&pLoc
|
||||
);
|
||||
if (FAILED(hres)) {
|
||||
CoUninitialize();
|
||||
return;
|
||||
}
|
||||
|
||||
// Step 4: Connect to WMI through IWbemLocator::ConnectServer
|
||||
IWbemServices *pSvc = NULL;
|
||||
hres = pLoc->ConnectServer(
|
||||
_bstr_t(L"ROOT\\CIMV2"),
|
||||
NULL,
|
||||
NULL,
|
||||
0,
|
||||
NULL,
|
||||
0,
|
||||
0,
|
||||
&pSvc
|
||||
);
|
||||
if (FAILED(hres)) {
|
||||
pLoc->Release();
|
||||
CoUninitialize();
|
||||
return;
|
||||
}
|
||||
|
||||
// Step 5: Set security levels on the proxy
|
||||
hres = CoSetProxyBlanket(
|
||||
pSvc,
|
||||
RPC_C_AUTHN_WINNT,
|
||||
RPC_C_AUTHZ_NONE,
|
||||
NULL,
|
||||
RPC_C_AUTHN_LEVEL_CALL,
|
||||
RPC_C_IMP_LEVEL_IMPERSONATE,
|
||||
NULL,
|
||||
EOAC_NONE
|
||||
);
|
||||
if (FAILED(hres)) {
|
||||
pSvc->Release();
|
||||
pLoc->Release();
|
||||
CoUninitialize();
|
||||
return;
|
||||
}
|
||||
|
||||
// Step 6: Use the IWbemServices pointer to make a WMI query
|
||||
IEnumWbemClassObject* pEnumerator = NULL;
|
||||
hres = pSvc->ExecQuery(
|
||||
bstr_t("WQL"),
|
||||
bstr_t("SELECT * FROM Win32_BaseBoard"),
|
||||
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
|
||||
NULL,
|
||||
&pEnumerator
|
||||
);
|
||||
if (FAILED(hres)) {
|
||||
pSvc->Release();
|
||||
pLoc->Release();
|
||||
CoUninitialize();
|
||||
return;
|
||||
}
|
||||
|
||||
// Step 7: Retrieve the data
|
||||
IWbemClassObject *pclsObj = NULL;
|
||||
ULONG uReturn = 0;
|
||||
while (pEnumerator) {
|
||||
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
|
||||
if (0 == uReturn) {
|
||||
break;
|
||||
}
|
||||
|
||||
VARIANT vtProp;
|
||||
hr = pclsObj->Get(L"Product", 0, &vtProp, 0, 0);
|
||||
if (SUCCEEDED(hr)) {
|
||||
snprintf(info->name, 64, "%S", vtProp.bstrVal);
|
||||
VariantClear(&vtProp);
|
||||
}
|
||||
|
||||
hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0);
|
||||
if (SUCCEEDED(hr)) {
|
||||
snprintf(info->serial_number, 63, "%S", vtProp.bstrVal);
|
||||
info->serial_number[64] = '\0';
|
||||
|
||||
VariantClear(&vtProp);
|
||||
}
|
||||
|
||||
pclsObj->Release();
|
||||
}
|
||||
|
||||
// Clean up
|
||||
pSvc->Release();
|
||||
pLoc->Release();
|
||||
pEnumerator->Release();
|
||||
CoUninitialize();
|
||||
}
|
||||
|
||||
// @todo add ipv6
|
||||
struct NetworkInfo {
|
||||
char slot[64];
|
||||
byte mac[8];
|
||||
};
|
||||
|
||||
int get_network_info(NetworkInfo* info) {
|
||||
WSADATA wsaData;
|
||||
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD dwSize = 0;
|
||||
PIP_ADAPTER_ADDRESSES pAdapterAddresses = NULL;
|
||||
PIP_ADAPTER_ADDRESSES pAdapter = NULL;
|
||||
|
||||
// Get the size of the adapter addresses buffer
|
||||
if (GetAdaptersAddresses(AF_UNSPEC, 0, NULL, NULL, &dwSize) == ERROR_BUFFER_OVERFLOW) {
|
||||
pAdapterAddresses = (PIP_ADAPTER_ADDRESSES) malloc(dwSize);
|
||||
if (pAdapterAddresses == NULL) {
|
||||
WSACleanup();
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
WSACleanup();
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Get the adapter addresses
|
||||
if (GetAdaptersAddresses(AF_UNSPEC, 0, NULL, pAdapterAddresses, &dwSize) != NO_ERROR) {
|
||||
free(pAdapterAddresses);
|
||||
WSACleanup();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
|
||||
// Iterate over the adapters and print their MAC addresses
|
||||
pAdapter = pAdapterAddresses;
|
||||
while (pAdapter && i < 4) {
|
||||
if (pAdapter->PhysicalAddressLength != 0) {
|
||||
info[i].slot[63] = '\0';
|
||||
info[i].mac[23] = '\0';
|
||||
|
||||
memcpy(info[i].mac, pAdapter->PhysicalAddress, 8);
|
||||
wcstombs(info[i].slot, pAdapter->FriendlyName, 63);
|
||||
|
||||
++i;
|
||||
}
|
||||
|
||||
pAdapter = pAdapter->Next;
|
||||
}
|
||||
|
||||
free(pAdapterAddresses);
|
||||
WSACleanup();
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
struct SIMDInfo {
|
||||
float sse;
|
||||
int avx256;
|
||||
int avx512;
|
||||
};
|
||||
|
||||
struct CpuInfo {
|
||||
char vendor[13];
|
||||
char brand[49];
|
||||
int model;
|
||||
int family;
|
||||
int mhz;
|
||||
CpuCacheInfo cache[4];
|
||||
int page_size;
|
||||
SIMDInfo simd;
|
||||
};
|
||||
|
||||
void get_cpu_info(CpuInfo* info) {
|
||||
int temp;
|
||||
info->simd.sse = (temp = max_sse_supported()) > 9 ? temp / 10.0f : temp;
|
||||
info->simd.avx256 = max_avx256_supported();
|
||||
info->simd.avx512 = max_avx512_supported();
|
||||
|
||||
get_cache_info(1, &info->cache[0]);
|
||||
get_cache_info(2, &info->cache[1]);
|
||||
get_cache_info(3, &info->cache[2]);
|
||||
get_cache_info(4, &info->cache[3]);
|
||||
|
||||
SYSTEM_INFO sys_info;
|
||||
GetSystemInfo(&sys_info);
|
||||
info->page_size = sys_info.dwPageSize;
|
||||
|
||||
int cpuInfo[4] = { 0 };
|
||||
__cpuid(cpuInfo, 0);
|
||||
|
||||
memset(info->vendor, 0, sizeof(info->vendor));
|
||||
*((int*)info->vendor) = cpuInfo[1];
|
||||
*((int*)(info->vendor + 4)) = cpuInfo[3];
|
||||
*((int*)(info->vendor + 8)) = cpuInfo[2];
|
||||
info->vendor[12] = '\0';
|
||||
|
||||
__cpuid(cpuInfo, 0x80000002);
|
||||
memcpy(info->brand, cpuInfo, sizeof(cpuInfo));
|
||||
__cpuid(cpuInfo, 0x80000003);
|
||||
memcpy(info->brand + 16, cpuInfo, sizeof(cpuInfo));
|
||||
__cpuid(cpuInfo, 0x80000004);
|
||||
memcpy(info->brand + 32, cpuInfo, sizeof(cpuInfo));
|
||||
info->brand[48] = '\0';
|
||||
|
||||
__cpuid(cpuInfo, 1);
|
||||
info->model = (cpuInfo[0] >> 4) & 0xF;
|
||||
info->family = (cpuInfo[0] >> 8) & 0xF;
|
||||
|
||||
DWORD bufSize = sizeof(DWORD);
|
||||
HKEY hKey;
|
||||
long lError = RegOpenKeyExA(
|
||||
HKEY_LOCAL_MACHINE,
|
||||
"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",
|
||||
0, KEY_READ, &hKey
|
||||
);
|
||||
|
||||
if (lError == ERROR_SUCCESS) {
|
||||
RegQueryValueExA(hKey, "~MHz", NULL, NULL, (LPBYTE) &(info->mhz), &bufSize);
|
||||
}
|
||||
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
struct OSInfo {
|
||||
char vendor[16];
|
||||
char name[64];
|
||||
int major;
|
||||
int minor;
|
||||
};
|
||||
|
||||
void get_os_info(OSInfo* info) {
|
||||
info->vendor[15] = '\0';
|
||||
info->name[63] = '\0';
|
||||
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
OSVERSIONINFOEXW version_info;
|
||||
memset(&version_info, 0, sizeof(OSVERSIONINFOEXW));
|
||||
version_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW);
|
||||
NTSTATUS(WINAPI *RtlGetVersion)(OSVERSIONINFOEXW*) = (NTSTATUS(WINAPI *)(OSVERSIONINFOEXW*))GetProcAddress(GetModuleHandleW(L"ntdll.dll"), "RtlGetVersion");
|
||||
if (RtlGetVersion != nullptr) {
|
||||
RtlGetVersion(&version_info);
|
||||
}
|
||||
|
||||
strcpy(info->vendor, "Microsoft");
|
||||
strcpy(info->name, "Windows");
|
||||
info->major = version_info.dwMajorVersion;
|
||||
info->minor = version_info.dwMinorVersion;
|
||||
#else
|
||||
strcpy(info->vendor, "Linux");
|
||||
strcpy(info->name, "Linux");
|
||||
info->major = 0;
|
||||
info->minor = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
struct RamInfo {
|
||||
int memory;
|
||||
};
|
||||
|
||||
void get_ram_info(RamInfo* info) {
|
||||
MEMORYSTATUSEX statex;
|
||||
statex.dwLength = sizeof(statex);
|
||||
GlobalMemoryStatusEx(&statex);
|
||||
info->memory = (int) (statex.ullTotalPhys / (1024 * 1024));
|
||||
}
|
||||
|
||||
struct GpuInfo {
|
||||
char name[64];
|
||||
int vram;
|
||||
};
|
||||
|
||||
unsigned int get_gpu_info(GpuInfo* info) {
|
||||
IDXGIFactory *pFactory = NULL;
|
||||
IDXGIAdapter *pAdapter = NULL;
|
||||
DXGI_ADAPTER_DESC adapterDesc;
|
||||
|
||||
HRESULT hr = CreateDXGIFactory(__uuidof(IDXGIFactory), (void**)&pFactory);
|
||||
if (FAILED(hr)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
UINT i = 0;
|
||||
while (pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND && i < 2) {
|
||||
hr = pAdapter->GetDesc(&adapterDesc);
|
||||
if (FAILED(hr)) {
|
||||
pAdapter->Release();
|
||||
break;
|
||||
}
|
||||
|
||||
wcstombs(info[i].name, adapterDesc.Description, 63);
|
||||
info[i].name[63] = '\0';
|
||||
info[i].vram = (int) (adapterDesc.DedicatedVideoMemory / (1024 * 1024));
|
||||
|
||||
pAdapter->Release();
|
||||
i++;
|
||||
}
|
||||
|
||||
pFactory->Release();
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
struct SystemInfo {
|
||||
OSInfo os;
|
||||
MainboardInfo mainboard;
|
||||
|
||||
NetworkInfo network[4];
|
||||
int network_count;
|
||||
|
||||
CpuInfo cpu;
|
||||
RamInfo ram;
|
||||
|
||||
GpuInfo gpu[2];
|
||||
int gpu_count;
|
||||
};
|
||||
|
||||
void render_system_info(char* buf, const SystemInfo* info) {
|
||||
const char avx512[8][12] = {
|
||||
"AVX-512F",
|
||||
"AVX-512DQ",
|
||||
"AVX-512IFMA",
|
||||
"AVX-512PF",
|
||||
"AVX-512ER",
|
||||
"AVX-512CD",
|
||||
"AVX-512BW",
|
||||
"AVX-512VL"
|
||||
};
|
||||
|
||||
sprintf_s(
|
||||
buf,
|
||||
4096,
|
||||
"OS:\n"
|
||||
"==============\n"
|
||||
"Vendor: %s\n" "Name: %s\n" "Major: %d\n" "Minor: %d\n"
|
||||
"\n"
|
||||
"Mainboard:\n"
|
||||
"==============\n"
|
||||
"Name: %s\n" "SN: %s\n"
|
||||
"\n"
|
||||
"Network:\n"
|
||||
"==============\n"
|
||||
"Slot: %s\n" "MAC: %02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X\n"
|
||||
"\n"
|
||||
"Slot: %s\n" "MAC: %02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X\n"
|
||||
"\n"
|
||||
"Slot: %s\n" "MAC: %02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X\n"
|
||||
"\n"
|
||||
"Slot: %s\n" "MAC: %02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X\n"
|
||||
"\n"
|
||||
"CPU:\n"
|
||||
"==============\n"
|
||||
"Hardware\n" "Vendor: %s\n" "Brand: %s\n" "Model: %d\n" "Family: %d\n" "Mhz: %d\n" "Page Size: %d\n"
|
||||
"\n"
|
||||
"Cache:\n"
|
||||
"L1: Size %d Line %d\n"
|
||||
"L2: Size %d Line %d\n"
|
||||
"L3: Size %d Line %d\n"
|
||||
"L4: Size %d Line %d\n"
|
||||
"\n"
|
||||
"SIMD:\n" "SSE: %.1f\n" "AVX256: %d\n" "AVX512: %s\n"
|
||||
"\n"
|
||||
"GPU:\n"
|
||||
"==============\n"
|
||||
"Name: %s\n" "VRAM: %d\n"
|
||||
"\n"
|
||||
"Name: %s\n" "VRAM: %d\n"
|
||||
"\n"
|
||||
"RAM:\n"
|
||||
"==============\n"
|
||||
"Memory: %d MB",
|
||||
info->os.vendor, info->os.name, info->os.major, info->os.minor,
|
||||
info->mainboard.name, info->mainboard.serial_number,
|
||||
info->network[0].slot, info->network[0].mac[0], info->network[0].mac[1], info->network[0].mac[2], info->network[0].mac[3], info->network[0].mac[4], info->network[0].mac[5], info->network[0].mac[6], info->network[0].mac[7],
|
||||
info->network_count < 2 ? "" : info->network[1].slot, info->network_count < 2 ? 0 : info->network[1].mac[0], info->network_count < 2 ? 0 : info->network[1].mac[1], info->network_count < 2 ? 0 : info->network[1].mac[2], info->network_count < 2 ? 0 : info->network[1].mac[3], info->network_count < 2 ? 0 : info->network[1].mac[4], info->network_count < 2 ? 0 : info->network[1].mac[5], info->network_count < 2 ? 0 : info->network[1].mac[6], info->network_count < 2 ? 0 : info->network[1].mac[7],
|
||||
info->network_count < 3 ? "" : info->network[2].slot, info->network_count < 3 ? 0 : info->network[2].mac[0], info->network_count < 3 ? 0 : info->network[2].mac[1], info->network_count < 3 ? 0 : info->network[2].mac[2], info->network_count < 3 ? 0 : info->network[2].mac[3], info->network_count < 3 ? 0 : info->network[2].mac[4], info->network_count < 3 ? 0 : info->network[2].mac[5], info->network_count < 3 ? 0 : info->network[2].mac[6], info->network_count < 3 ? 0 : info->network[2].mac[7],
|
||||
info->network_count < 4 ? "" : info->network[3].slot, info->network_count < 4 ? 0 : info->network[3].mac[0], info->network_count < 4 ? 0 : info->network[3].mac[1], info->network_count < 4 ? 0 : info->network[3].mac[2], info->network_count < 4 ? 0 : info->network[3].mac[3], info->network_count < 4 ? 0 : info->network[3].mac[4], info->network_count < 4 ? 0 : info->network[3].mac[5], info->network_count < 4 ? 0 : info->network[3].mac[6], info->network_count < 4 ? 0 : info->network[3].mac[7],
|
||||
info->cpu.vendor, info->cpu.brand, info->cpu.model, info->cpu.family, info->cpu.mhz, info->cpu.page_size,
|
||||
info->cpu.cache[0].size, info->cpu.cache[0].line_size,
|
||||
info->cpu.cache[1].size, info->cpu.cache[1].line_size,
|
||||
info->cpu.cache[2].size, info->cpu.cache[2].line_size,
|
||||
info->cpu.cache[3].size, info->cpu.cache[3].line_size,
|
||||
info->cpu.simd.sse, info->cpu.simd.avx256, info->cpu.simd.avx512 > 0 ? avx512[info->cpu.simd.avx512 - 1] : "0",
|
||||
info->gpu[0].name, info->gpu[0].vram,
|
||||
info->gpu_count < 2 ? "" : info->gpu[1].name, info->gpu_count < 2 ? 0 : info->gpu[1].vram,
|
||||
info->ram.memory
|
||||
);
|
||||
}
|
||||
|
||||
void get_system_info(SystemInfo* info)
|
||||
{
|
||||
get_os_info(&info->os);
|
||||
get_mainboard_info(&info->mainboard);
|
||||
info->network_count = get_network_info(info->network);
|
||||
get_cpu_info(&info->cpu);
|
||||
get_ram_info(&info->ram);
|
||||
info->gpu_count = get_gpu_info(info->gpu);
|
||||
}
|
||||
|
||||
#endif
|
||||
15
utils/SystemUtils.h
Normal file
15
utils/SystemUtils.h
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
/**
|
||||
* Jingga
|
||||
*
|
||||
* @copyright Jingga
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
#ifndef TOS_UTILS_SYSTEM_UTILS_H
|
||||
#define TOS_UTILS_SYSTEM_UTILS_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue
Block a user