diff options
| author | fusion32 <marcopuzziello@gmail.com> | 2025-05-18 18:54:23 -0300 |
|---|---|---|
| committer | fusion32 <marcopuzziello@gmail.com> | 2025-05-18 18:54:23 -0300 |
| commit | 7fe30185df21617cf44100f89db462cd4501050e (patch) | |
| tree | bc22eb6b6104094814628e2084f51d0129f9d83d | |
| parent | 1378f2c7ddbdc0e5f3b1b9adc68b6e53eb3e5bfd (diff) | |
| download | game-7fe30185df21617cf44100f89db462cd4501050e.tar.gz game-7fe30185df21617cf44100f89db462cd4501050e.zip | |
implement `matrix` and move containers into their own directory
| -rw-r--r-- | reference/game.c | 174 | ||||
| -rw-r--r-- | reference/types.hh | 34 | ||||
| -rw-r--r-- | src/containers/matrix.hh | 132 | ||||
| -rw-r--r-- | src/containers/priority_queue.hh (renamed from src/priority_queue.hh) | 0 | ||||
| -rw-r--r-- | src/containers/vector.hh (renamed from src/vector.hh) | 0 |
5 files changed, 132 insertions, 208 deletions
diff --git a/reference/game.c b/reference/game.c index 59bc8a5..a005445 100644 --- a/reference/game.c +++ b/reference/game.c @@ -16459,63 +16459,6 @@ void _GLOBAL__I_InstanceAttributeNames(void) return;
}
-// DWARF original prototype: void matrix3d(matrix3d<TSector*> * this, int xmin, int xmax, int ymin,
-// int ymax, int zmin, int zmax, TSector * init)
-
-void __thiscall
-matrix3d<TSector*>::matrix3d
- (matrix3d<TSector*> *this,int xmin,int xmax,int ymin,int ymax,int zmin,int zmax,
- TSector *init)
-
-{
- int iVar1;
- TSector **ppTVar2;
- int iVar3;
- int i;
- int iVar4;
-
- this->xmin = xmin;
- this->ymin = ymin;
- this->zmin = zmin;
- iVar4 = (xmax - xmin) + 1;
- this->dx = iVar4;
- iVar3 = (ymax - ymin) + 1;
- this->dy = iVar3;
- iVar1 = (zmax - zmin) + 1;
- this->dz = iVar1;
- if (((iVar4 < 1) || (iVar3 < 1)) || (iVar1 < 1)) {
- error("matrix3d: Ungueltige Feldgroesse %d..%d, %d..%d, %d..%d.\n",xmin,xmax,ymin,ymax,zmin,
- zmax);
- iVar4 = this->dx;
- if (iVar4 < 1) {
- this->dx = 1;
- iVar4 = 1;
- }
- iVar3 = this->dy;
- if (iVar3 < 1) {
- this->dy = 1;
- iVar3 = 1;
- }
- iVar1 = this->dz;
- if (iVar1 < 1) {
- this->dz = 1;
- iVar1 = 1;
- }
- }
- ppTVar2 = (TSector **)operator_new__(iVar4 * iVar3 * iVar1 * 4);
- iVar4 = 0;
- this->entry = ppTVar2;
- if (0 < this->dy * this->dx * this->dz) {
- do {
- this->entry[iVar4] = init;
- iVar4 = iVar4 + 1;
- } while (iVar4 < this->dy * this->dx * this->dz);
- }
- return;
-}
-
-
-
void __static_initialization_and_destruction_0(int __initialize_p,int __priority)
{
@@ -28294,43 +28237,6 @@ void _GLOBAL__I__Z7GetName6Object(void) return;
}
-
-
-// DWARF original prototype: void matrix(matrix<int> * this, int xmin, int xmax, int ymin, int ymax)
-
-void __thiscall matrix<int>::matrix(matrix<int> *this,int xmin,int xmax,int ymin,int ymax)
-
-{
- int iVar1;
- int *piVar2;
- int iVar3;
-
- iVar3 = (xmax - xmin) + 1;
- this->xmin = xmin;
- iVar1 = (ymax - ymin) + 1;
- this->ymin = ymin;
- this->dx = iVar3;
- this->dy = iVar1;
- if ((iVar3 < 1) || (iVar1 < 1)) {
- error("matrix: Ungueltige Feldgroesse %d..%d, %d..%d.\n",xmin,xmax,ymin,ymax);
- iVar3 = this->dx;
- if (iVar3 < 1) {
- this->dx = 1;
- iVar3 = 1;
- }
- iVar1 = this->dy;
- if (iVar1 < 1) {
- this->dy = 1;
- iVar1 = 1;
- }
- }
- piVar2 = (int *)operator_new__(iVar3 * iVar1 * 4);
- this->entry = piVar2;
- return;
-}
-
-
-
void RandomShuffle<int>(int *Buffer,int Size)
{
@@ -56434,40 +56340,6 @@ void __thiscall TCreature::AttackStimulus(TCreature *this,ulong param_1) return;
}
-// DWARF original prototype: void matrix(matrix<long_unsigned_int> * this, int xmin, int xmax, int
-// ymin, int ymax, ulong init)
-
-void __thiscall matrix<>::matrix(matrix<> *this,int xmin,int xmax,int ymin,int ymax,ulong init)
-
-{
- int iVar1;
- ulong *puVar2;
- int i;
- int iVar3;
-
- iVar3 = (xmax - xmin) + 1;
- iVar1 = (ymax - ymin) + 1;
- this->dy = iVar1;
- this->xmin = xmin;
- this->ymin = ymin;
- this->dx = iVar3;
- if ((iVar3 < 1) || (iVar1 < 1)) {
- error("matrix: Ungueltige Feldgroesse %d..%d, %d..%d.\n",xmin,xmax,ymin,ymax);
- this->dx = 1;
- this->dy = 1;
- }
- puVar2 = (ulong *)operator_new__(this->dy * this->dx * 4);
- iVar1 = 0;
- this->entry = puVar2;
- if (0 < this->dy * this->dx) {
- do {
- this->entry[iVar1] = init;
- iVar1 = iVar1 + 1;
- } while (iVar1 < this->dy * this->dx);
- }
- return;
-}
-
void __static_initialization_and_destruction_0(int __initialize_p,int __priority)
{
@@ -73694,52 +73566,6 @@ void _GLOBAL__I__ZN9TShortwayC2EP9TCreatureii(void) return;
}
-
-
-// DWARF original prototype: void matrix(matrix<TShortwayPoint> * this, int xmin, int xmax, int
-// ymin, int ymax)
-
-void __thiscall matrix<>::matrix(matrix<> *this,int xmin,int xmax,int ymin,int ymax)
-
-{
- int iVar1;
- TShortwayPoint *pTVar2;
- TShortwayPoint *pTVar3;
- int iVar4;
-
- iVar4 = (xmax - xmin) + 1;
- iVar1 = (ymax - ymin) + 1;
- this->xmin = xmin;
- this->ymin = ymin;
- this->dx = iVar4;
- this->dy = iVar1;
- if ((iVar4 < 1) || (iVar1 < 1)) {
- error("matrix: Ungueltige Feldgroesse %d..%d, %d..%d.\n",xmin,xmax,ymin,ymax);
- iVar4 = this->dx;
- if (iVar4 < 1) {
- this->dx = 1;
- iVar4 = 1;
- }
- iVar1 = this->dy;
- if (iVar1 < 1) {
- this->dy = 1;
- iVar1 = 1;
- }
- }
- iVar4 = iVar4 * iVar1;
- pTVar2 = (TShortwayPoint *)operator_new__(iVar4 * 0x1c);
- pTVar3 = pTVar2;
- while (iVar4 = iVar4 + -1, iVar4 != -1) {
- pTVar3->Waylength = -1;
- pTVar3->Heuristic = -1;
- pTVar3->Predecessor = (TShortwayPoint *)0x0;
- pTVar3->NextToExpand = (TShortwayPoint *)0x0;
- pTVar3 = pTVar3 + 1;
- }
- this->entry = pTVar2;
- return;
-}
-
void __static_initialization_and_destruction_0(int __initialize_p,int __priority)
{
diff --git a/reference/types.hh b/reference/types.hh index 82d001b..d79cf0c 100644 --- a/reference/types.hh +++ b/reference/types.hh @@ -515,14 +515,6 @@ struct THouse { int Help; }; -struct matrix<long_unsigned_int> { // Original name: matrix<long unsigned int> - int xmin; - int ymin; - int dx; - int dy; - ulong *entry; -}; - struct TWaitinglistEntry { struct TWaitinglistEntry *Next; char Name[30]; @@ -698,14 +690,6 @@ struct TShortwayPoint { struct TShortwayPoint *NextToExpand; }; -struct matrix<TShortwayPoint> { - int xmin; - int ymin; - int dx; - int dy; - struct TShortwayPoint *entry; -}; - struct TCronEntry { struct Object Obj; ulong RoundNr; @@ -766,16 +750,6 @@ struct TCondition { int Number; }; -struct matrix3d<TSector*> { - int xmin; - int ymin; - int zmin; - int dx; - int dy; - int dz; - struct TSector **entry; -}; - struct TSector { struct Object MapCon[32][32]; ulong TimeStamp; @@ -798,14 +772,6 @@ struct THelpDepot { int DepotNr; }; -struct matrix<int> { - int xmin; - int ymin; - int dx; - int dy; - int *entry; -}; - struct listIterator<storeunit<TPlayerIndexLeafNode,_100>_> { // Original name: listIterator<storeunit<TPlayerIndexLeafNode, 100> > struct listnode<storeunit<TPlayerIndexLeafNode,_100>_> *actNode; }; diff --git a/src/containers/matrix.hh b/src/containers/matrix.hh new file mode 100644 index 0000000..bf255ff --- /dev/null +++ b/src/containers/matrix.hh @@ -0,0 +1,132 @@ +#ifndef TIBIA_MATRIX_HH_ +#define TIBIA_MATRIX_HH_ 1 + +typedef<typename T> +struct matrix{ + // REGULAR FUNCTIONS + // ========================================================================= + matrix(int xmin, int xmax, int ymin, int ymax){ + int dx = (xmax - xmin) + 1; + int dy = (ymax - ymin) + 1; + + if(dx < 1 || dy < 1){ + error("matrix: Ungueltige Feldgroesse %d..%d, %d..%d.\n", xmin, xmax, ymin, ymax); + + if(dx < 1){ + dx = 1; + } + + if(dy < 1){ + dy = 1; + } + } + + this->xmin = xmin; + this->ymin = ymin; + this->dx = dx; + this->dy = dy; + this->entry = new T[dx * dy]; + } + + matrix(int xmin, int xmax, int ymin, int ymax, T init) : matrix(xmin, xmax, ymin, ymax) { + int count = this->dx * this->dy; + for(int i = 0; i < count; i += 1){ + this->entry[i] = init; + } + } + + // TODO(fusion): Probably missing some inlined destructor? + + T *at(int x, int y){ + int xoffset = x - this->xmin; + int yoffset = y - this->ymin; + if(xoffset < 0 || xoffset >= this->dx || yoffset < 0 || yoffset >= this->dy){ + error("matrix::operator(): Ungueltiger Index %d/%d.\n", x, y); + return &this->entry[0]; + }else{ + // TODO(fusion): Are we really storing this in row major order? + return &this->entry[yoffset * this->dx + xoffset]; + } + } + + // DATA + // ========================================================================= + int xmin; + int ymin; + int dx; + int dy; + T *entry; +}; + +typedef<typename T> +struct matrix3d{ + // REGULAR FUNCTIONS + // ========================================================================= + matrix3d(int xmin, int xmax, int ymin, int ymax, int zmin, int zmax){ + int dx = (xmax - xmin) + 1; + int dy = (ymax - ymin) + 1; + int dz = (zmax - zmin) + 1; + + if(dx < 1 || dy < 1 || dz < 1){ + error("matrix3d: Ungueltige Feldgroesse %d..%d, %d..%d, %d..%d.\n", + xmin, xmax, ymin, ymax, zmin, zmax); + + if(dx < 1){ + dx = 1; + } + + if(dy < 1){ + dy = 1; + } + + if(dz < 1){ + dz = 1; + } + } + + this->xmin = xmin; + this->ymin = ymin; + this->dx = dx; + this->dy = dy; + this->entry = new T[dx * dy]; + } + + matrix3d(int xmin, int xmax, int ymin, int ymax, int zmin, int zmax, T init) + : matrix(xmin, xmax, ymin, ymax, zmin, zmax) { + int count = this->dx * this->dy * this->dz; + for(int i = 0; i < count; i += 1){ + this->entry[i] = init; + } + } + + // TODO(fusion): Probably missing some inlined destructor? + + T *at(int x, int y, int z){ + int xoffset = x - this->xmin; + int yoffset = y - this->ymin; + int zoffset = z - this->zmin; + if(xoffset < 0 || xoffset >= this->dx + || yoffset < 0 || yoffset >= this->dy + || zoffset < 0 || zoffset >= this->dz){ + error("matrix3d::operator(): Ungueltiger Index %d/%d/%d.\n", x, y, z); + return &this->entry[0]; + }else{ + // TODO(fusion): Same as `matrix::at` on the XY plane. + return &this->entry[zoffset * this->dx * this->dy + + yoffset * this->dx + + xoffset]; + } + } + + // DATA + // ========================================================================= + int xmin; + int ymin; + int zmin; + int dx; + int dy; + int dz; + T *entry; +}; + +#endif //TIBIA_MATRIX_HH_ diff --git a/src/priority_queue.hh b/src/containers/priority_queue.hh index b48353e..b48353e 100644 --- a/src/priority_queue.hh +++ b/src/containers/priority_queue.hh diff --git a/src/vector.hh b/src/containers/vector.hh index 044ffe1..044ffe1 100644 --- a/src/vector.hh +++ b/src/containers/vector.hh |
