Change folder structure

This commit is contained in:
ABelliqueux 2021-06-23 19:25:12 +02:00
parent 45bb2f9d32
commit 8657f7bfc2
29 changed files with 2704 additions and 22931 deletions

View File

@ -1,14 +1,14 @@
TARGET = main
TYPE = ps-exe
SRCS = main.c \
pad.c \
math.c \
camera.c \
physics.c \
graphics.c \
psx.c \
space.c \
SRCS = src/main.c \
src/pad.c \
src/math.c \
src/camera.c \
src/physics.c \
src/graphics.c \
src/psx.c \
src/space.c \
levels/level0.c \
levels/level1.c \
../common/crt0/crt0.s \

View File

@ -37,10 +37,13 @@ Real-time 3D / 8bpp background / 4bpp background
You need to install [mkpsxiso](https://github.com/Lameguy64/mkpsxiso) and the [pcsx-redux emulator and Nugget+PsyQ SDK](https://github.com/ABelliqueux/nolibgs_hello_worlds#setting-up-the-sdk--modern-gcc--psyq-aka-nuggetpsyq) before
you can build the engine. Put `mkpsxiso` and `pcsx-redux` in your $PATH and you should be good to go.
1. Clone this repo in `(...)/pcsx-redux/src/mips/`
1. Clone this repo in `(...)/pcsx-redux/src/mips/` as a new project :
```bash
git clone https://github.com/ABelliqueux/3dcam-headers my-project
```
2. Navigate to that folder in a terminal :
```bash
cd /pcsx-redux/src/mips/3dcam-headers
cd /pcsx-redux/src/mips/my-project
```
3. Type `./isotest.sh`. This should compile the example, build an iso with `mkpsxiso` and launch it with `pcsx-redux`.
4. Install the [blender extension](https://github.com/ABelliqueux/blender_io_export_psx_mesh) to create your own levels.

View File

@ -1,4 +1,4 @@
BOOT=cdrom:\SCES_003.90;1
BOOT=cdrom:\SCES_313.37;1
TCB=4
EVENT=10
STACK=801FFFF0
STACK=801FFFF0

View File

@ -1,22 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<iso_project image_name="OverlayExample.bin" cue_sheet="OverlayExample.cue" no_xa="0">
<track type="data">
<identifiers
system = "PLAYSTATION"
application = "PLAYSTATION"
volume = "MYDISC"
volume_set = "MYDISC"
publisher = "JABY"
data_preparer = "MKPSXISO"
copyright = "COPYLEFT"
/>
<license file="LICENSEE.DAT"/>
<directory_tree>
<file name="system.cnf" type="data" source="config/OverlayExample.cnf"/>
<file name="SCES_003.90" type="data" source="main.ps-exe"/>
<file name="LEVEL0.bin" type="data" source="Overlay.lvl0" />
<file name="LEVEL1.bin" type="data" source="Overlay.lvl1" />
<dummy sectors="1024"/>
</directory_tree>
</track>
<track type="data">
<identifiers
system = "PLAYSTATION"
application = "PLAYSTATION"
volume = "MYDISC"
volume_set = "MYDISC"
publisher = "SCHNAPPY"
data_preparer = "MKPSXISO"
copyright = "COPYLEFT"
/>
<!--<license file="LICENSEE.DAT"/>-->
<directory_tree>
<file name="system.cnf" type="data" source="config/OverlayExample.cnf"/>
<file name="SCES_313.37" type="data" source="main.ps-exe"/>
<file name="LEVEL0.bin" type="data" source="Overlay.lvl0" />
<file name="LEVEL1.bin" type="data" source="Overlay.lvl1" />
<dummy sectors="1024"/>
</directory_tree>
</track>
</iso_project>

View File

@ -16,66 +16,65 @@ struct NODE;
struct QUAD;
typedef struct BODY {
VECTOR gForce;
VECTOR position;
SVECTOR velocity;
int mass;
int invMass;
VECTOR min;
VECTOR max;
int restitution;
} BODY;
VECTOR gForce;
VECTOR position;
SVECTOR velocity;
int mass;
int invMass;
VECTOR min;
VECTOR max;
int restitution;
} BODY;
typedef struct VANIM {
int nframes; // number of frames e.g 20
int nvert; // number of vertices e.g 21
int cursor; // anim cursor
int lerpCursor; // anim cursor
int dir; // playback direction (1 or -1)
int interpolate; // use lerp to interpolate keyframes
SVECTOR data[]; // vertex pos as SVECTORs e.g 20 * 21 SVECTORS
} VANIM;
int nframes; // number of frames e.g 20
int nvert; // number of vertices e.g 21
int cursor; // anim cursor
int lerpCursor; // anim cursor
int dir; // playback direction (1 or -1)
int interpolate; // use lerp to interpolate keyframes
SVECTOR data[]; // vertex pos as SVECTORs e.g 20 * 21 SVECTORS
} VANIM;
typedef struct PRIM {
VECTOR order;
int code; // Same as POL3/POL4 codes : Code (F3 = 1, FT3 = 2, G3 = 3,
VECTOR order;
int code; // Same as POL3/POL4 codes : Code (F3 = 1, FT3 = 2, G3 = 3,
// GT3 = 4) Code (F4 = 5, FT4 = 6, G4 = 7, GT4 = 8)
} PRIM;
} PRIM;
typedef struct MESH {
TMESH * tmesh;
PRIM * index;
TIM_IMAGE * tim;
unsigned long * tim_data;
MATRIX mat;
VECTOR pos;
SVECTOR rot;
short isRigidBody;
short isStaticBody;
short isPrism;
short isAnim;
short isActor;
short isLevel;
short isBG;
short isSprite;
long p;
long OTz;
BODY * body;
VANIM * anim;
struct NODE * node;
VECTOR pos2D;
} MESH;
TMESH * tmesh;
PRIM * index;
TIM_IMAGE * tim;
unsigned long * tim_data;
MATRIX mat;
VECTOR pos;
SVECTOR rot;
short isRigidBody;
short isStaticBody;
short isPrism;
short isAnim;
short isActor;
short isLevel;
short isBG;
short isSprite;
long p;
long OTz;
BODY * body;
VANIM * anim;
struct NODE * node;
VECTOR pos2D;
} MESH;
typedef struct QUAD {
VECTOR v0, v1;
VECTOR v2, v3;
} QUAD;
VECTOR v0, v1;
VECTOR v2, v3;
} QUAD;
typedef struct CAMPOS {
VECTOR pos;
SVECTOR rot;
} CAMPOS;
VECTOR pos;
SVECTOR rot;
} CAMPOS;
// Blender cam ~= PSX cam with these settings :
// NTSC - 320x240, PAL 320x256, pixel ratio 1:1,
@ -84,47 +83,48 @@ typedef struct CAMPOS {
// Lower values mean wider angle
typedef struct CAMANGLE {
CAMPOS * campos;
TIM_IMAGE * BGtim;
unsigned long * tim_data;
QUAD bw, fw;
int index;
MESH * objects[];
} CAMANGLE;
CAMPOS * campos;
TIM_IMAGE * BGtim;
unsigned long * tim_data;
QUAD bw, fw;
int index;
MESH * objects[];
} CAMANGLE;
typedef struct CAMPATH {
short len, cursor, pos;
VECTOR points[];
} CAMPATH;
short len, cursor, pos;
VECTOR points[];
} CAMPATH;
typedef struct SIBLINGS {
int index;
struct NODE * list[];
} SIBLINGS ;
int index;
struct NODE * list[];
} SIBLINGS ;
typedef struct CHILDREN {
int index;
MESH * list[];
} CHILDREN ;
int index;
MESH * list[];
} CHILDREN ;
typedef struct NODE {
MESH * plane;
SIBLINGS * siblings;
CHILDREN * objects;
CHILDREN * rigidbodies;
} NODE;
MESH * plane;
SIBLINGS * siblings;
CHILDREN * objects;
CHILDREN * rigidbodies;
} NODE;
typedef struct LEVEL {
MATRIX * cmat;
MATRIX * lgtmat;
MESH ** meshes;
int * meshes_length;
MESH * actorPtr;
MESH * levelPtr;
MESH * propPtr;
CAMANGLE * camPtr;
CAMPATH * camPath;
CAMANGLE ** camAngles;
NODE * curNode;
MESH * meshPlan; // This one is temporary
} LEVEL;
CVECTOR * BGc;
MATRIX * cmat;
MATRIX * lgtmat;
MESH ** meshes;
int * meshes_length;
MESH * actorPtr;
MESH * levelPtr;
MESH * propPtr;
CAMANGLE * camPtr;
CAMPATH * camPath;
CAMANGLE ** camAngles;
NODE * curNode;
MESH * meshPlan; // This one is temporary
} LEVEL;

30
include/camera.h Normal file
View File

@ -0,0 +1,30 @@
#pragma once
#include <sys/types.h>
#include <libgte.h>
// Camera modes
#define ACTOR 0
#define ROTATE 1
#define FIXED 2
#define TRACK 3
#define FLYCAM 4
#define FOLLOW 5
typedef struct{
int x, xv; // x: current value += xv : new value
int y, yv; // x,y,z, vx, vy, vz are in PSX units (ONE == 4096)
int z, zv;
int pan, panv;
int tilt, tiltv;
int rol;
VECTOR pos;
SVECTOR rot;
SVECTOR dvs;
MATRIX mat;
} CAMERA;
void getCameraXZ(int * x, int * z, int actorX, int actorZ, int angle, int distance);
void getCameraXZY(int * x, int * z, int * y, int actorX, int actorZ, int actorY, int angle, int angleX, int distance);
void getCameraZY( int * z, int * y, int actorZ, int actorY, int angleX, int distance);
void applyCamera(CAMERA * cam);
void setCameraPos(CAMERA * camera, VECTOR pos, SVECTOR rot);

52
include/defines.h Normal file
View File

@ -0,0 +1,52 @@
#define VMODE 0 // 0 == NTSC, 1 == PAL
#define VSYNC 0
#define SCREENXRES 320
#define SCREENYRES 240
#define CENTERX SCREENXRES/2
#define CENTERY SCREENYRES/2
#define FOV CENTERX
#define CLEAR_COLOR_R 0
#define CLEAR_COLOR_G 0
#define CLEAR_COLOR_B 0
// Debug Font
#define FNT_VRAM_X 960
#define FNT_VRAM_Y 256
#define FNT_SCR_X 16
#define FNT_SCR_Y 192
#define FNT_SCR_W 240
#define FNT_SCR_H 32
#define FNT_SCR_BG 0
#define FNT_SCR_MAX_CHAR 256
// Ordering table
#define OT2LEN 8
#define OTLEN 768
#define PRIMBUFFLEN 4096 * sizeof(POLY_GT4) // Maximum number of POLY_GT3 primitives
// Fog
#define FOG_NEAR 1300
#define FOG_FAR 1600
// Physics
#define GRAVITY 10
#define SCALE 4
// Pad codes defines
// Applied on PADL
#define PadSelect ( 1 )
#define PadStart ( 1 << 3 )
// Up, Right, Down, Left will be used on PADL (left side of pad )and PADR (right side of pad)
#define PadUp ( 1 << 4 )
#define PadRight ( 1 << 5 )
#define PadDown ( 1 << 6 )
#define PadLeft ( 1 << 7 )
#define PadR3 ( 1 << 2 )
#define PadL3 ( 1 << 1 )
// Triggers applied on PADR
#define PadShldL1 ( 1 << 2 )
#define PadShldL2 ( 1 )
#define PadShldR1 ( 1 << 3 )
#define PadShldR2 ( 1 << 1 )

9
include/graphics.h Normal file
View File

@ -0,0 +1,9 @@
#pragma once
#include "../include/camera.h"
#include "../include/physics.h"
#include "../include/defines.h"
// Drawing
void transformMesh(CAMERA * camera, MESH * meshes);
void drawPoly(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw);
void drawBG(CAMANGLE * camPtr, char ** nextpri, u_long * otdisc, char * db);

27
include/macros.h Normal file
View File

@ -0,0 +1,27 @@
// MACROS
// swap(x, y, buffer)
#define SWAP(a,b,c) {(c)=(a); (a)=(b); (b)=(c);}
// dotproduct of two vectors
#define dotProduct(v0, v1) \
(v0).vx * (v1).vx + \
(v0).vy * (v1).vy + \
(v0).vz * (v1).vz
// min value
#define min(a,b) \
(a)-(b)>0?(b):(a)
// max
#define max(a,b) \
(a)-(b)>0?(a):(b)
// substract vector
#define subVector(v0, v1) \
(v0).vx - (v1).vx, \
(v0).vy - (v1).vy, \
(v0).vz - (v1).vz
#define normalizeVector(v) \
((v)->vx << 12) >> 8, \
((v)->vy << 12) >> 8, \
((v)->vz << 12) >> 8

35
include/math.h Normal file
View File

@ -0,0 +1,35 @@
#pragma once
#include <stddef.h>
#include <stdint.h>
#include <libgte.h>
#include "../include/macros.h"
// Precalculated arctan values
#include "../src/atan.c"
// fixed point math
int32_t dMul(int32_t a, int32_t b);
uint32_t lerpU(uint32_t start, uint32_t dest, unsigned pos);
int32_t lerpS(int32_t start, int32_t dest, unsigned pos);
int32_t lerpD(int32_t start, int32_t dest, int32_t pos);
long long lerpL(long long start, long long dest, long long pos);
// Sin/Cos Table
void generateTable(void);
int ncos(u_int t);
int nsin(u_int t);
// Atan table
long long patan(long x, long y);
// Sqrt
u_int psqrt(u_int n);
// Lerps
int lerp(int start, int end, int factor); // FIXME : not working as it should
SVECTOR SVlerp(SVECTOR start, SVECTOR end, int factor); // FIXME
long long easeIn(long long i);
int easeOut(int i);
//~ int easeInOut(int i, int div);
VECTOR getVectorTo(VECTOR actor, VECTOR target);

32
include/pad.h Normal file
View File

@ -0,0 +1,32 @@
#pragma once
// Structure for storing processed controller data
typedef struct
{
int xpos, ypos; // Stored position for sprite(s)
int xpos2, ypos2; // controlled by this controller.
unsigned char status; // These 8 values are obtained
unsigned char type; // directly from the controller
unsigned char button1; // buffer we installed with InitPAD.
unsigned char button2;
unsigned char analog0;
unsigned char analog1;
unsigned char analog2;
unsigned char analog3;
} Controller_Data;
// All-purpose controller data buffer
typedef struct
{
unsigned char pad[34]; // 8-bytes w/o Multi-Tap, 34-bytes w/Multi-Tap
} Controller_Buffer;
// Structure for RAW hardware-based light gun position values
typedef struct
{
unsigned short v_count; // Y-axis (vertical scan counter)
unsigned short h_count; // H-axis (horizontal pixel clock value)
} Gun_Position;
void get_digital_direction( Controller_Data *c, int buttondata );
void read_controller( Controller_Data *c, unsigned char *buf, int port );

19
include/pcdrv.h Normal file
View File

@ -0,0 +1,19 @@
#pragma once
#include <sys/types.h>
#include <stdio.h>
#define OPEN 0
#define CLOSE 1
#define SEEK 2
#define READ 3
#define WRITE 4
#define CREATE 5
#define LOAD 6
int waitForSIODone( int * flag );
void PCload( u_long * loadAddress, u_short * flagAddress, const char * filename );
int PCopen(const char * filename, int attributes );
int PCcreate(const char * filename, int attributes );
int PCclose( int fd );
int PCseek( int fd, int offset, int accessMode );
int PCread( int fd, int len, char * buffer );

15
include/physics.h Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <sys/types.h>
#include <libgte.h>
#include <libgpu.h>
#include "../include/defines.h"
#include "../include/macros.h"
#include "../custom_types.h"
short checkLineW( VECTOR * pointA, VECTOR * pointB, MESH * mesh );
short checkLineS( VECTOR * pointA, VECTOR * pointB, MESH * mesh );
VECTOR getIntCollision(BODY one, BODY two);
VECTOR getExtCollision(BODY one, BODY two);
void ResolveCollision( BODY * one, BODY * two );
VECTOR angularMom(BODY body);
void applyAcceleration(BODY * actor);

21
include/psx.h Normal file
View File

@ -0,0 +1,21 @@
#pragma once
#include <sys/types.h>
#include <stdio.h>
#include <libgte.h>
#include <libetc.h>
#include <libgpu.h>
#include <libapi.h>
#include <libcd.h>
#include "../include/defines.h"
#include "../custom_types.h"
// PSX setup
void init(DISPENV disp[2], DRAWENV draw[2], short db, MATRIX * cmat, CVECTOR * BG, VECTOR * BK );
void ScrRst(void);
void display(DISPENV * disp, DRAWENV * draw, u_long * otdisc, char * primbuff, char ** nextprim, char * db);
// Utils
void LvlPtrSet( LEVEL * curLevel, LEVEL * level );
int LoadLevelCD(const char*const LevelName, u_long * LoadAddress);
void SwitchLevel( LEVEL * curLevel, LEVEL * loadLevel);
void LoadTexture(u_long * tim, TIM_IMAGE * tparam);

9
include/space.h Normal file
View File

@ -0,0 +1,9 @@
#pragma once
#include <sys/types.h>
#include <libgte.h>
#include <libgpu.h>
#include "../include/defines.h"
int cliptest3(short * v1);
void worldToScreen( VECTOR * worldPos, VECTOR * screenPos );
void screenToWorld( VECTOR * screenPos, VECTOR * worldPos );

File diff suppressed because it is too large Load Diff

View File

@ -4,17 +4,9 @@
extern LEVEL level0;
extern CAMPOS level0_camPos_camPath;
extern CVECTOR level0_BGc;;
extern CAMPOS level0_camPos_camPath_001;
extern CAMPOS level0_camPos_camPath_002;
extern CAMPOS level0_camPos_camPath_003;
extern CAMPOS level0_camPos_camPath_004;
extern CAMPOS level0_camPos_camPath_005;
extern CAMPOS level0_camPos_Camera;
extern CAMPATH level0_camPath;
@ -26,8 +18,6 @@ extern SVECTOR modelCube_mesh[];
extern SVECTOR level0_modelCube_normal[];
extern SVECTOR level0_modelCube_uv[];
extern CVECTOR level0_modelCube_color[];
extern PRIM level0_modelCube_index[];
@ -36,355 +26,37 @@ extern BODY level0_modelCube_body;
extern TMESH level0_modelCube;
extern unsigned long _binary_TIM_cat_tim_start[];
extern unsigned long _binary_TIM_cat_tim_end[];
extern unsigned long _binary_TIM_cat_tim_length;
extern TIM_IMAGE level0_tim_cat;
extern MESH level0_meshCube;
extern SVECTOR modelCylindre_mesh[];
extern SVECTOR modelPlane_mesh[];
extern SVECTOR level0_modelCylindre_normal[];
extern SVECTOR level0_modelPlane_normal[];
extern SVECTOR level0_modelCylindre_uv[];
extern CVECTOR level0_modelPlane_color[];
extern CVECTOR level0_modelCylindre_color[];
extern PRIM level0_modelPlane_index[];
extern PRIM level0_modelCylindre_index[];
extern BODY level0_modelPlane_body;
extern VANIM level0_modelCylindre_anim;
extern TMESH level0_modelPlane;
extern BODY level0_modelCylindre_body;
extern MESH level0_meshPlane;
extern TMESH level0_modelCylindre;
extern unsigned long _binary_TIM_home_tim_start[];
extern unsigned long _binary_TIM_home_tim_end[];
extern unsigned long _binary_TIM_home_tim_length;
extern TIM_IMAGE level0_tim_home;
extern MESH level0_meshCylindre;
extern SVECTOR modelgnd_mesh[];
extern SVECTOR level0_modelgnd_normal[];
extern SVECTOR level0_modelgnd_uv[];
extern CVECTOR level0_modelgnd_color[];
extern PRIM level0_modelgnd_index[];
extern BODY level0_modelgnd_body;
extern TMESH level0_modelgnd;
extern MESH level0_meshgnd;
extern SVECTOR modelgnd_001_mesh[];
extern SVECTOR level0_modelgnd_001_normal[];
extern SVECTOR level0_modelgnd_001_uv[];
extern CVECTOR level0_modelgnd_001_color[];
extern PRIM level0_modelgnd_001_index[];
extern BODY level0_modelgnd_001_body;
extern TMESH level0_modelgnd_001;
extern MESH level0_meshgnd_001;
extern SVECTOR modelgnd_003_mesh[];
extern SVECTOR level0_modelgnd_003_normal[];
extern SVECTOR level0_modelgnd_003_uv[];
extern CVECTOR level0_modelgnd_003_color[];
extern PRIM level0_modelgnd_003_index[];
extern BODY level0_modelgnd_003_body;
extern TMESH level0_modelgnd_003;
extern MESH level0_meshgnd_003;
extern SVECTOR modelgnd_002_mesh[];
extern SVECTOR level0_modelgnd_002_normal[];
extern SVECTOR level0_modelgnd_002_uv[];
extern CVECTOR level0_modelgnd_002_color[];
extern PRIM level0_modelgnd_002_index[];
extern BODY level0_modelgnd_002_body;
extern TMESH level0_modelgnd_002;
extern MESH level0_meshgnd_002;
extern SVECTOR modelLara_mesh[];
extern SVECTOR level0_modelLara_normal[];
extern SVECTOR level0_modelLara_uv[];
extern CVECTOR level0_modelLara_color[];
extern PRIM level0_modelLara_index[];
extern BODY level0_modelLara_body;
extern TMESH level0_modelLara;
extern unsigned long _binary_TIM_lara_tim_start[];
extern unsigned long _binary_TIM_lara_tim_end[];
extern unsigned long _binary_TIM_lara_tim_length;
extern TIM_IMAGE level0_tim_lara;
extern MESH level0_meshLara;
extern SVECTOR modelobject_mesh[];
extern SVECTOR level0_modelobject_normal[];
extern SVECTOR level0_modelobject_uv[];
extern CVECTOR level0_modelobject_color[];
extern PRIM level0_modelobject_index[];
extern BODY level0_modelobject_body;
extern TMESH level0_modelobject;
extern MESH level0_meshobject;
extern SVECTOR modelPlan_mesh[];
extern SVECTOR level0_modelPlan_normal[];
extern SVECTOR level0_modelPlan_uv[];
extern CVECTOR level0_modelPlan_color[];
extern PRIM level0_modelPlan_index[];
extern BODY level0_modelPlan_body;
extern TMESH level0_modelPlan;
extern MESH level0_meshPlan;
extern SVECTOR modelSphere_mesh[];
extern SVECTOR level0_modelSphere_normal[];
extern SVECTOR level0_modelSphere_uv[];
extern CVECTOR level0_modelSphere_color[];
extern PRIM level0_modelSphere_index[];
extern BODY level0_modelSphere_body;
extern TMESH level0_modelSphere;
extern MESH level0_meshSphere;
extern SVECTOR modelSphere_001_mesh[];
extern SVECTOR level0_modelSphere_001_normal[];
extern SVECTOR level0_modelSphere_001_uv[];
extern CVECTOR level0_modelSphere_001_color[];
extern PRIM level0_modelSphere_001_index[];
extern BODY level0_modelSphere_001_body;
extern TMESH level0_modelSphere_001;
extern MESH level0_meshSphere_001;
extern SVECTOR modelwall_mesh[];
extern SVECTOR level0_modelwall_normal[];
extern SVECTOR level0_modelwall_uv[];
extern CVECTOR level0_modelwall_color[];
extern PRIM level0_modelwall_index[];
extern BODY level0_modelwall_body;
extern TMESH level0_modelwall;
extern MESH level0_meshwall;
extern SVECTOR modelwall_001_mesh[];
extern SVECTOR level0_modelwall_001_normal[];
extern SVECTOR level0_modelwall_001_uv[];
extern CVECTOR level0_modelwall_001_color[];
extern PRIM level0_modelwall_001_index[];
extern BODY level0_modelwall_001_body;
extern TMESH level0_modelwall_001;
extern MESH level0_meshwall_001;
extern SVECTOR modelwall_002_mesh[];
extern SVECTOR level0_modelwall_002_normal[];
extern SVECTOR level0_modelwall_002_uv[];
extern CVECTOR level0_modelwall_002_color[];
extern PRIM level0_modelwall_002_index[];
extern BODY level0_modelwall_002_body;
extern TMESH level0_modelwall_002;
extern MESH level0_meshwall_002;
extern SVECTOR modelwall_003_mesh[];
extern SVECTOR level0_modelwall_003_normal[];
extern SVECTOR level0_modelwall_003_uv[];
extern CVECTOR level0_modelwall_003_color[];
extern PRIM level0_modelwall_003_index[];
extern BODY level0_modelwall_003_body;
extern TMESH level0_modelwall_003;
extern MESH level0_meshwall_003;
extern MESH * level0_meshes[15];
extern MESH * level0_meshes[2];
extern int level0_meshes_length;
extern unsigned long _binary_TIM_bg_camPath_tim_start[];
extern CAMANGLE level0_camAngle_Camera;
extern unsigned long _binary_TIM_bg_camPath_tim_end[];
extern CAMANGLE * level0_camAngles[0];
extern unsigned long _binary_TIM_bg_camPath_tim_length;
extern SIBLINGS level0_nodePlane_siblings;
extern TIM_IMAGE tim_bg_camPath;
extern CHILDREN level0_nodePlane_objects;
extern CAMANGLE level0_camAngle_camPath;
extern CHILDREN level0_nodePlane_rigidbodies;
extern unsigned long _binary_TIM_bg_camPath_001_tim_start[];
extern unsigned long _binary_TIM_bg_camPath_001_tim_end[];
extern unsigned long _binary_TIM_bg_camPath_001_tim_length;
extern TIM_IMAGE tim_bg_camPath_001;
extern CAMANGLE level0_camAngle_camPath_001;
extern unsigned long _binary_TIM_bg_camPath_002_tim_start[];
extern unsigned long _binary_TIM_bg_camPath_002_tim_end[];
extern unsigned long _binary_TIM_bg_camPath_002_tim_length;
extern TIM_IMAGE tim_bg_camPath_002;
extern CAMANGLE level0_camAngle_camPath_002;
extern unsigned long _binary_TIM_bg_camPath_003_tim_start[];
extern unsigned long _binary_TIM_bg_camPath_003_tim_end[];
extern unsigned long _binary_TIM_bg_camPath_003_tim_length;
extern TIM_IMAGE tim_bg_camPath_003;
extern CAMANGLE level0_camAngle_camPath_003;
extern unsigned long _binary_TIM_bg_camPath_004_tim_start[];
extern unsigned long _binary_TIM_bg_camPath_004_tim_end[];
extern unsigned long _binary_TIM_bg_camPath_004_tim_length;
extern TIM_IMAGE tim_bg_camPath_004;
extern CAMANGLE level0_camAngle_camPath_004;
extern unsigned long _binary_TIM_bg_camPath_005_tim_start[];
extern unsigned long _binary_TIM_bg_camPath_005_tim_end[];
extern unsigned long _binary_TIM_bg_camPath_005_tim_length;
extern TIM_IMAGE tim_bg_camPath_005;
extern CAMANGLE level0_camAngle_camPath_005;
extern CAMANGLE * level0_camAngles[6];
extern SIBLINGS level0_nodegnd_siblings;
extern CHILDREN level0_nodegnd_objects;
extern CHILDREN level0_nodegnd_rigidbodies;
extern NODE level0_nodegnd;
extern SIBLINGS level0_nodegnd_001_siblings;
extern CHILDREN level0_nodegnd_001_objects;
extern CHILDREN level0_nodegnd_001_rigidbodies;
extern NODE level0_nodegnd_001;
extern SIBLINGS level0_nodegnd_002_siblings;
extern CHILDREN level0_nodegnd_002_objects;
extern CHILDREN level0_nodegnd_002_rigidbodies;
extern NODE level0_nodegnd_002;
extern SIBLINGS level0_nodegnd_003_siblings;
extern CHILDREN level0_nodegnd_003_objects;
extern CHILDREN level0_nodegnd_003_rigidbodies;
extern NODE level0_nodegnd_003;
extern NODE level0_nodePlane;
extern MESH * level0_actorPtr;
@ -396,10 +68,5 @@ extern CAMANGLE * level0_camPtr;
extern NODE * level0_curNode;
extern NODE level0_nodegnd;
extern NODE level0_nodePlane;
extern NODE level0_nodegnd_001;
extern NODE level0_nodegnd_002;
extern NODE level0_nodegnd_003;

File diff suppressed because it is too large Load Diff

View File

@ -1,347 +0,0 @@
#pragma once
#include "../custom_types.h"
extern LEVEL level1;
extern CAMPOS level1_camPos_camPath;
extern CAMPOS level1_camPos_camPath_001;
extern CAMPOS level1_camPos_camPath_002;
extern CAMPOS level1_camPos_camPath_003;
extern CAMPOS level1_camPos_camPath_004;
extern CAMPOS level1_camPos_camPath_005;
extern CAMPATH level1_camPath;
extern MATRIX level1_lgtmat;
extern MATRIX level1_cmat;
extern SVECTOR modelCube_mesh[];
extern SVECTOR level1_modelCube_normal[];
extern SVECTOR level1_modelCube_uv[];
extern CVECTOR level1_modelCube_color[];
extern PRIM level1_modelCube_index[];
extern BODY level1_modelCube_body;
extern TMESH level1_modelCube;
extern unsigned long _binary_TIM_cat_tim_start[];
extern unsigned long _binary_TIM_cat_tim_end[];
extern unsigned long _binary_TIM_cat_tim_length;
extern TIM_IMAGE level1_tim_cat;
extern MESH level1_meshCube;
extern SVECTOR modelCylindre_mesh[];
extern SVECTOR level1_modelCylindre_normal[];
extern SVECTOR level1_modelCylindre_uv[];
extern CVECTOR level1_modelCylindre_color[];
extern PRIM level1_modelCylindre_index[];
extern VANIM level1_modelCylindre_anim;
extern BODY level1_modelCylindre_body;
extern TMESH level1_modelCylindre;
extern unsigned long _binary_TIM_home_tim_start[];
extern unsigned long _binary_TIM_home_tim_end[];
extern unsigned long _binary_TIM_home_tim_length;
extern TIM_IMAGE level1_tim_home;
extern MESH level1_meshCylindre;
extern SVECTOR modelgnd_mesh[];
extern SVECTOR level1_modelgnd_normal[];
extern SVECTOR level1_modelgnd_uv[];
extern CVECTOR level1_modelgnd_color[];
extern PRIM level1_modelgnd_index[];
extern BODY level1_modelgnd_body;
extern TMESH level1_modelgnd;
extern MESH level1_meshgnd;
extern SVECTOR modelgnd_001_mesh[];
extern SVECTOR level1_modelgnd_001_normal[];
extern SVECTOR level1_modelgnd_001_uv[];
extern CVECTOR level1_modelgnd_001_color[];
extern PRIM level1_modelgnd_001_index[];
extern BODY level1_modelgnd_001_body;
extern TMESH level1_modelgnd_001;
extern MESH level1_meshgnd_001;
extern SVECTOR modelgnd_003_mesh[];
extern SVECTOR level1_modelgnd_003_normal[];
extern SVECTOR level1_modelgnd_003_uv[];
extern CVECTOR level1_modelgnd_003_color[];
extern PRIM level1_modelgnd_003_index[];
extern BODY level1_modelgnd_003_body;
extern TMESH level1_modelgnd_003;
extern MESH level1_meshgnd_003;
extern SVECTOR modelgnd_002_mesh[];
extern SVECTOR level1_modelgnd_002_normal[];
extern SVECTOR level1_modelgnd_002_uv[];
extern CVECTOR level1_modelgnd_002_color[];
extern PRIM level1_modelgnd_002_index[];
extern BODY level1_modelgnd_002_body;
extern TMESH level1_modelgnd_002;
extern MESH level1_meshgnd_002;
extern SVECTOR modelLara_mesh[];
extern SVECTOR level1_modelLara_normal[];
extern SVECTOR level1_modelLara_uv[];
extern CVECTOR level1_modelLara_color[];
extern PRIM level1_modelLara_index[];
extern BODY level1_modelLara_body;
extern TMESH level1_modelLara;
extern unsigned long _binary_TIM_lara_tim_start[];
extern unsigned long _binary_TIM_lara_tim_end[];
extern unsigned long _binary_TIM_lara_tim_length;
extern TIM_IMAGE level1_tim_lara;
extern MESH level1_meshLara;
extern SVECTOR modelobject_mesh[];
extern SVECTOR level1_modelobject_normal[];
extern SVECTOR level1_modelobject_uv[];
extern CVECTOR level1_modelobject_color[];
extern PRIM level1_modelobject_index[];
extern BODY level1_modelobject_body;
extern TMESH level1_modelobject;
extern MESH level1_meshobject;
extern SVECTOR modelPlan_mesh[];
extern SVECTOR level1_modelPlan_normal[];
extern SVECTOR level1_modelPlan_uv[];
extern CVECTOR level1_modelPlan_color[];
extern PRIM level1_modelPlan_index[];
extern BODY level1_modelPlan_body;
extern TMESH level1_modelPlan;
extern MESH level1_meshPlan;
extern SVECTOR modelSphere_mesh[];
extern SVECTOR level1_modelSphere_normal[];
extern SVECTOR level1_modelSphere_uv[];
extern CVECTOR level1_modelSphere_color[];
extern PRIM level1_modelSphere_index[];
extern BODY level1_modelSphere_body;
extern TMESH level1_modelSphere;
extern MESH level1_meshSphere;
extern SVECTOR modelSphere_001_mesh[];
extern SVECTOR level1_modelSphere_001_normal[];
extern SVECTOR level1_modelSphere_001_uv[];
extern CVECTOR level1_modelSphere_001_color[];
extern PRIM level1_modelSphere_001_index[];
extern BODY level1_modelSphere_001_body;
extern TMESH level1_modelSphere_001;
extern MESH level1_meshSphere_001;
extern SVECTOR modelwall_mesh[];
extern SVECTOR level1_modelwall_normal[];
extern SVECTOR level1_modelwall_uv[];
extern CVECTOR level1_modelwall_color[];
extern PRIM level1_modelwall_index[];
extern BODY level1_modelwall_body;
extern TMESH level1_modelwall;
extern MESH level1_meshwall;
extern SVECTOR modelwall_001_mesh[];
extern SVECTOR level1_modelwall_001_normal[];
extern SVECTOR level1_modelwall_001_uv[];
extern CVECTOR level1_modelwall_001_color[];
extern PRIM level1_modelwall_001_index[];
extern BODY level1_modelwall_001_body;
extern TMESH level1_modelwall_001;
extern MESH level1_meshwall_001;
extern SVECTOR modelwall_002_mesh[];
extern SVECTOR level1_modelwall_002_normal[];
extern SVECTOR level1_modelwall_002_uv[];
extern CVECTOR level1_modelwall_002_color[];
extern PRIM level1_modelwall_002_index[];
extern BODY level1_modelwall_002_body;
extern TMESH level1_modelwall_002;
extern MESH level1_meshwall_002;
extern SVECTOR modelwall_003_mesh[];
extern SVECTOR level1_modelwall_003_normal[];
extern SVECTOR level1_modelwall_003_uv[];
extern CVECTOR level1_modelwall_003_color[];
extern PRIM level1_modelwall_003_index[];
extern BODY level1_modelwall_003_body;
extern TMESH level1_modelwall_003;
extern MESH level1_meshwall_003;
extern MESH * level1_meshes[15];
extern int level1_meshes_length;
extern CAMANGLE level1_camAngle_camPath_001;
extern CAMANGLE * level1_camAngles[0];
extern SIBLINGS level1_nodegnd_siblings;
extern CHILDREN level1_nodegnd_objects;
extern CHILDREN level1_nodegnd_rigidbodies;
extern NODE level1_nodegnd;
extern SIBLINGS level1_nodegnd_001_siblings;
extern CHILDREN level1_nodegnd_001_objects;
extern CHILDREN level1_nodegnd_001_rigidbodies;
extern NODE level1_nodegnd_001;
extern SIBLINGS level1_nodegnd_002_siblings;
extern CHILDREN level1_nodegnd_002_objects;
extern CHILDREN level1_nodegnd_002_rigidbodies;
extern NODE level1_nodegnd_002;
extern SIBLINGS level1_nodegnd_003_siblings;
extern CHILDREN level1_nodegnd_003_objects;
extern CHILDREN level1_nodegnd_003_rigidbodies;
extern NODE level1_nodegnd_003;
extern MESH * level1_actorPtr;
extern MESH * level1_levelPtr;
extern MESH * level1_propPtr;
extern CAMANGLE * level1_camPtr;
extern NODE * level1_curNode;
extern NODE level1_nodegnd;
extern NODE level1_nodegnd_001;
extern NODE level1_nodegnd_002;
extern NODE level1_nodegnd_003;

272
src/atan.c Normal file
View File

@ -0,0 +1,272 @@
// Arctan base table
static int AtanBaseTable[8] = {
0x0000,
-0x4000,
-0xFFFF,
0xC000,
-0x8000,
0x4000,
0x8000,
-0xC000,
};
// Arctan angle table
static short AtanAngleTable[0x802] = {
0x0000, 0x0005, 0x000A, 0x000F, 0x0014, 0x0019, 0x001F, 0x0024,
0x0029, 0x002E, 0x0033, 0x0038, 0x003D, 0x0042, 0x0047, 0x004C,
0x0051, 0x0057, 0x005C, 0x0061, 0x0066, 0x006B, 0x0070, 0x0075,
0x007A, 0x007F, 0x0084, 0x008A, 0x008F, 0x0094, 0x0099, 0x009E,
0x00A3, 0x00A8, 0x00AD, 0x00B2, 0x00B7, 0x00BC, 0x00C2, 0x00C7,
0x00CC, 0x00D1, 0x00D6, 0x00DB, 0x00E0, 0x00E5, 0x00EA, 0x00EF,
0x00F4, 0x00FA, 0x00FF, 0x0104, 0x0109, 0x010E, 0x0113, 0x0118,
0x011D, 0x0122, 0x0127, 0x012C, 0x0131, 0x0137, 0x013C, 0x0141,
0x0146, 0x014B, 0x0150, 0x0155, 0x015A, 0x015F, 0x0164, 0x0169,
0x016F, 0x0174, 0x0179, 0x017E, 0x0183, 0x0188, 0x018D, 0x0192,
0x0197, 0x019C, 0x01A1, 0x01A6, 0x01AC, 0x01B1, 0x01B6, 0x01BB,
0x01C0, 0x01C5, 0x01CA, 0x01CF, 0x01D4, 0x01D9, 0x01DE, 0x01E3,
0x01E9, 0x01EE, 0x01F3, 0x01F8, 0x01FD, 0x0202, 0x0207, 0x020C,
0x0211, 0x0216, 0x021B, 0x0220, 0x0226, 0x022B, 0x0230, 0x0235,
0x023A, 0x023F, 0x0244, 0x0249, 0x024E, 0x0253, 0x0258, 0x025D,
0x0262, 0x0268, 0x026D, 0x0272, 0x0277, 0x027C, 0x0281, 0x0286,
0x028B, 0x0290, 0x0295, 0x029A, 0x029F, 0x02A4, 0x02A9, 0x02AF,
0x02B4, 0x02B9, 0x02BE, 0x02C3, 0x02C8, 0x02CD, 0x02D2, 0x02D7,
0x02DC, 0x02E1, 0x02E6, 0x02EB, 0x02F0, 0x02F6, 0x02FB, 0x0300,
0x0305, 0x030A, 0x030F, 0x0314, 0x0319, 0x031E, 0x0323, 0x0328,
0x032D, 0x0332, 0x0337, 0x033C, 0x0341, 0x0347, 0x034C, 0x0351,
0x0356, 0x035B, 0x0360, 0x0365, 0x036A, 0x036F, 0x0374, 0x0379,
0x037E, 0x0383, 0x0388, 0x038D, 0x0392, 0x0397, 0x039C, 0x03A2,
0x03A7, 0x03AC, 0x03B1, 0x03B6, 0x03BB, 0x03C0, 0x03C5, 0x03CA,
0x03CF, 0x03D4, 0x03D9, 0x03DE, 0x03E3, 0x03E8, 0x03ED, 0x03F2,
0x03F7, 0x03FC, 0x0401, 0x0407, 0x040C, 0x0411, 0x0416, 0x041B,
0x0420, 0x0425, 0x042A, 0x042F, 0x0434, 0x0439, 0x043E, 0x0443,
0x0448, 0x044D, 0x0452, 0x0457, 0x045C, 0x0461, 0x0466, 0x046B,
0x0470, 0x0475, 0x047A, 0x047F, 0x0484, 0x0489, 0x048E, 0x0494,
0x0499, 0x049E, 0x04A3, 0x04A8, 0x04AD, 0x04B2, 0x04B7, 0x04BC,
0x04C1, 0x04C6, 0x04CB, 0x04D0, 0x04D5, 0x04DA, 0x04DF, 0x04E4,
0x04E9, 0x04EE, 0x04F3, 0x04F8, 0x04FD, 0x0502, 0x0507, 0x050C,
0x0511, 0x0516, 0x051B, 0x0520, 0x0525, 0x052A, 0x052F, 0x0534,
0x0539, 0x053E, 0x0543, 0x0548, 0x054D, 0x0552, 0x0557, 0x055C,
0x0561, 0x0566, 0x056B, 0x0570, 0x0575, 0x057A, 0x057F, 0x0584,
0x0589, 0x058E, 0x0593, 0x0598, 0x059D, 0x05A2, 0x05A7, 0x05AC,
0x05B1, 0x05B6, 0x05BB, 0x05C0, 0x05C5, 0x05CA, 0x05CF, 0x05D4,
0x05D9, 0x05DE, 0x05E3, 0x05E8, 0x05ED, 0x05F2, 0x05F7, 0x05FC,
0x0601, 0x0606, 0x060B, 0x0610, 0x0615, 0x061A, 0x061F, 0x0624,
0x0629, 0x062E, 0x0633, 0x0638, 0x063D, 0x0642, 0x0647, 0x064C,
0x0651, 0x0656, 0x065B, 0x0660, 0x0665, 0x066A, 0x066E, 0x0673,
0x0678, 0x067D, 0x0682, 0x0687, 0x068C, 0x0691, 0x0696, 0x069B,
0x06A0, 0x06A5, 0x06AA, 0x06AF, 0x06B4, 0x06B9, 0x06BE, 0x06C3,
0x06C8, 0x06CD, 0x06D2, 0x06D7, 0x06DC, 0x06E1, 0x06E5, 0x06EA,
0x06EF, 0x06F4, 0x06F9, 0x06FE, 0x0703, 0x0708, 0x070D, 0x0712,
0x0717, 0x071C, 0x0721, 0x0726, 0x072B, 0x0730, 0x0735, 0x0739,
0x073E, 0x0743, 0x0748, 0x074D, 0x0752, 0x0757, 0x075C, 0x0761,
0x0766, 0x076B, 0x0770, 0x0775, 0x077A, 0x077E, 0x0783, 0x0788,
0x078D, 0x0792, 0x0797, 0x079C, 0x07A1, 0x07A6, 0x07AB, 0x07B0,
0x07B5, 0x07B9, 0x07BE, 0x07C3, 0x07C8, 0x07CD, 0x07D2, 0x07D7,
0x07DC, 0x07E1, 0x07E6, 0x07EB, 0x07EF, 0x07F4, 0x07F9, 0x07FE,
0x0803, 0x0808, 0x080D, 0x0812, 0x0817, 0x081C, 0x0820, 0x0825,
0x082A, 0x082F, 0x0834, 0x0839, 0x083E, 0x0843, 0x0848, 0x084C,
0x0851, 0x0856, 0x085B, 0x0860, 0x0865, 0x086A, 0x086F, 0x0873,
0x0878, 0x087D, 0x0882, 0x0887, 0x088C, 0x0891, 0x0896, 0x089A,
0x089F, 0x08A4, 0x08A9, 0x08AE, 0x08B3, 0x08B8, 0x08BD, 0x08C1,
0x08C6, 0x08CB, 0x08D0, 0x08D5, 0x08DA, 0x08DF, 0x08E3, 0x08E8,
0x08ED, 0x08F2, 0x08F7, 0x08FC, 0x0901, 0x0905, 0x090A, 0x090F,
0x0914, 0x0919, 0x091E, 0x0922, 0x0927, 0x092C, 0x0931, 0x0936,
0x093B, 0x093F, 0x0944, 0x0949, 0x094E, 0x0953, 0x0958, 0x095C,
0x0961, 0x0966, 0x096B, 0x0970, 0x0975, 0x0979, 0x097E, 0x0983,
0x0988, 0x098D, 0x0992, 0x0996, 0x099B, 0x09A0, 0x09A5, 0x09AA,
0x09AE, 0x09B3, 0x09B8, 0x09BD, 0x09C2, 0x09C6, 0x09CB, 0x09D0,
0x09D5, 0x09DA, 0x09DE, 0x09E3, 0x09E8, 0x09ED, 0x09F2, 0x09F6,
0x09FB, 0x0A00, 0x0A05, 0x0A0A, 0x0A0E, 0x0A13, 0x0A18, 0x0A1D,
0x0A22, 0x0A26, 0x0A2B, 0x0A30, 0x0A35, 0x0A39, 0x0A3E, 0x0A43,
0x0A48, 0x0A4D, 0x0A51, 0x0A56, 0x0A5B, 0x0A60, 0x0A64, 0x0A69,
0x0A6E, 0x0A73, 0x0A77, 0x0A7C, 0x0A81, 0x0A86, 0x0A8B, 0x0A8F,
0x0A94, 0x0A99, 0x0A9E, 0x0AA2, 0x0AA7, 0x0AAC, 0x0AB1, 0x0AB5,
0x0ABA, 0x0ABF, 0x0AC4, 0x0AC8, 0x0ACD, 0x0AD2, 0x0AD7, 0x0ADB,
0x0AE0, 0x0AE5, 0x0AE9, 0x0AEE, 0x0AF3, 0x0AF8, 0x0AFC, 0x0B01,
0x0B06, 0x0B0B, 0x0B0F, 0x0B14, 0x0B19, 0x0B1E, 0x0B22, 0x0B27,
0x0B2C, 0x0B30, 0x0B35, 0x0B3A, 0x0B3F, 0x0B43, 0x0B48, 0x0B4D,
0x0B51, 0x0B56, 0x0B5B, 0x0B60, 0x0B64, 0x0B69, 0x0B6E, 0x0B72,
0x0B77, 0x0B7C, 0x0B80, 0x0B85, 0x0B8A, 0x0B8F, 0x0B93, 0x0B98,
0x0B9D, 0x0BA1, 0x0BA6, 0x0BAB, 0x0BAF, 0x0BB4, 0x0BB9, 0x0BBD,
0x0BC2, 0x0BC7, 0x0BCB, 0x0BD0, 0x0BD5, 0x0BD9, 0x0BDE, 0x0BE3,
0x0BE7, 0x0BEC, 0x0BF1, 0x0BF5, 0x0BFA, 0x0BFF, 0x0C03, 0x0C08,
0x0C0D, 0x0C11, 0x0C16, 0x0C1B, 0x0C1F, 0x0C24, 0x0C29, 0x0C2D,
0x0C32, 0x0C37, 0x0C3B, 0x0C40, 0x0C45, 0x0C49, 0x0C4E, 0x0C53,
0x0C57, 0x0C5C, 0x0C60, 0x0C65, 0x0C6A, 0x0C6E, 0x0C73, 0x0C78,
0x0C7C, 0x0C81, 0x0C86, 0x0C8A, 0x0C8F, 0x0C93, 0x0C98, 0x0C9D,
0x0CA1, 0x0CA6, 0x0CAB, 0x0CAF, 0x0CB4, 0x0CB8, 0x0CBD, 0x0CC2,
0x0CC6, 0x0CCB, 0x0CCF, 0x0CD4, 0x0CD9, 0x0CDD, 0x0CE2, 0x0CE6,
0x0CEB, 0x0CF0, 0x0CF4, 0x0CF9, 0x0CFD, 0x0D02, 0x0D07, 0x0D0B,
0x0D10, 0x0D14, 0x0D19, 0x0D1E, 0x0D22, 0x0D27, 0x0D2B, 0x0D30,
0x0D34, 0x0D39, 0x0D3E, 0x0D42, 0x0D47, 0x0D4B, 0x0D50, 0x0D54,
0x0D59, 0x0D5E, 0x0D62, 0x0D67, 0x0D6B, 0x0D70, 0x0D74, 0x0D79,
0x0D7D, 0x0D82, 0x0D87, 0x0D8B, 0x0D90, 0x0D94, 0x0D99, 0x0D9D,
0x0DA2, 0x0DA6, 0x0DAB, 0x0DAF, 0x0DB4, 0x0DB9, 0x0DBD, 0x0DC2,
0x0DC6, 0x0DCB, 0x0DCF, 0x0DD4, 0x0DD8, 0x0DDD, 0x0DE1, 0x0DE6,
0x0DEA, 0x0DEF, 0x0DF3, 0x0DF8, 0x0DFC, 0x0E01, 0x0E05, 0x0E0A,
0x0E0F, 0x0E13, 0x0E18, 0x0E1C, 0x0E21, 0x0E25, 0x0E2A, 0x0E2E,
0x0E33, 0x0E37, 0x0E3C, 0x0E40, 0x0E45, 0x0E49, 0x0E4E, 0x0E52,
0x0E56, 0x0E5B, 0x0E5F, 0x0E64, 0x0E68, 0x0E6D, 0x0E71, 0x0E76,
0x0E7A, 0x0E7F, 0x0E83, 0x0E88, 0x0E8C, 0x0E91, 0x0E95, 0x0E9A,
0x0E9E, 0x0EA3, 0x0EA7, 0x0EAC, 0x0EB0, 0x0EB4, 0x0EB9, 0x0EBD,
0x0EC2, 0x0EC6, 0x0ECB, 0x0ECF, 0x0ED4, 0x0ED8, 0x0EDC, 0x0EE1,
0x0EE5, 0x0EEA, 0x0EEE, 0x0EF3, 0x0EF7, 0x0EFC, 0x0F00, 0x0F04,
0x0F09, 0x0F0D, 0x0F12, 0x0F16, 0x0F1B, 0x0F1F, 0x0F23, 0x0F28,
0x0F2C, 0x0F31, 0x0F35, 0x0F3A, 0x0F3E, 0x0F42, 0x0F47, 0x0F4B,
0x0F50, 0x0F54, 0x0F58, 0x0F5D, 0x0F61, 0x0F66, 0x0F6A, 0x0F6E,
0x0F73, 0x0F77, 0x0F7C, 0x0F80, 0x0F84, 0x0F89, 0x0F8D, 0x0F91,
0x0F96, 0x0F9A, 0x0F9F, 0x0FA3, 0x0FA7, 0x0FAC, 0x0FB0, 0x0FB5,
0x0FB9, 0x0FBD, 0x0FC2, 0x0FC6, 0x0FCA, 0x0FCF, 0x0FD3, 0x0FD7,
0x0FDC, 0x0FE0, 0x0FE5, 0x0FE9, 0x0FED, 0x0FF2, 0x0FF6, 0x0FFA,
0x0FFF, 0x1003, 0x1007, 0x100C, 0x1010, 0x1014, 0x1019, 0x101D,
0x1021, 0x1026, 0x102A, 0x102E, 0x1033, 0x1037, 0x103B, 0x1040,
0x1044, 0x1048, 0x104D, 0x1051, 0x1055, 0x105A, 0x105E, 0x1062,
0x1067, 0x106B, 0x106F, 0x1073, 0x1078, 0x107C, 0x1080, 0x1085,
0x1089, 0x108D, 0x1092, 0x1096, 0x109A, 0x109E, 0x10A3, 0x10A7,
0x10AB, 0x10B0, 0x10B4, 0x10B8, 0x10BC, 0x10C1, 0x10C5, 0x10C9,
0x10CE, 0x10D2, 0x10D6, 0x10DA, 0x10DF, 0x10E3, 0x10E7, 0x10EB,
0x10F0, 0x10F4, 0x10F8, 0x10FD, 0x1101, 0x1105, 0x1109, 0x110E,
0x1112, 0x1116, 0x111A, 0x111F, 0x1123, 0x1127, 0x112B, 0x1130,
0x1134, 0x1138, 0x113C, 0x1140, 0x1145, 0x1149, 0x114D, 0x1151,
0x1156, 0x115A, 0x115E, 0x1162, 0x1166, 0x116B, 0x116F, 0x1173,
0x1177, 0x117C, 0x1180, 0x1184, 0x1188, 0x118C, 0x1191, 0x1195,
0x1199, 0x119D, 0x11A1, 0x11A6, 0x11AA, 0x11AE, 0x11B2, 0x11B6,
0x11BB, 0x11BF, 0x11C3, 0x11C7, 0x11CB, 0x11CF, 0x11D4, 0x11D8,
0x11DC, 0x11E0, 0x11E4, 0x11E9, 0x11ED, 0x11F1, 0x11F5, 0x11F9,
0x11FD, 0x1202, 0x1206, 0x120A, 0x120E, 0x1212, 0x1216, 0x121A,
0x121F, 0x1223, 0x1227, 0x122B, 0x122F, 0x1233, 0x1237, 0x123C,
0x1240, 0x1244, 0x1248, 0x124C, 0x1250, 0x1254, 0x1259, 0x125D,
0x1261, 0x1265, 0x1269, 0x126D, 0x1271, 0x1275, 0x127A, 0x127E,
0x1282, 0x1286, 0x128A, 0x128E, 0x1292, 0x1296, 0x129A, 0x129F,
0x12A3, 0x12A7, 0x12AB, 0x12AF, 0x12B3, 0x12B7, 0x12BB, 0x12BF,
0x12C3, 0x12C7, 0x12CC, 0x12D0, 0x12D4, 0x12D8, 0x12DC, 0x12E0,
0x12E4, 0x12E8, 0x12EC, 0x12F0, 0x12F4, 0x12F8, 0x12FC, 0x1301,
0x1305, 0x1309, 0x130D, 0x1311, 0x1315, 0x1319, 0x131D, 0x1321,
0x1325, 0x1329, 0x132D, 0x1331, 0x1335, 0x1339, 0x133D, 0x1341,
0x1345, 0x1349, 0x134D, 0x1351, 0x1355, 0x135A, 0x135E, 0x1362,
0x1366, 0x136A, 0x136E, 0x1372, 0x1376, 0x137A,