summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md5
-rw-r--r--gamefiles/main_d.scmbin0 -> 620154 bytes
-rw-r--r--gamefiles/main_freeroam.scmbin0 -> 1618 bytes
-rw-r--r--src/General.h7
-rw-r--r--src/RecordDataForChase.cpp5
-rw-r--r--src/RecordDataForChase.h7
-rw-r--r--src/RecordDataForGame.cpp4
-rw-r--r--src/Timer.cpp6
-rw-r--r--src/common.h81
-rw-r--r--src/config.h7
-rw-r--r--src/control/Record.cpp6
-rw-r--r--src/control/Record.h (renamed from src/RecordDataForGame.h)8
-rw-r--r--src/main.cpp15
-rw-r--r--src/math/Vector.cpp78
-rw-r--r--src/math/Vector.h169
-rw-r--r--src/render/Particle.cpp4
-rw-r--r--src/render/ParticleMgr.cpp (renamed from src/ParticleMgr.cpp)0
-rw-r--r--src/render/ParticleMgr.h (renamed from src/ParticleMgr.h)0
-rw-r--r--src/render/Sprite.cpp6
-rw-r--r--src/render/Sprite2d.cpp7
20 files changed, 114 insertions, 301 deletions
diff --git a/README.md b/README.md
index a07b2f11..5e020987 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,8 @@ such that we have a working game at all times.
Apparently you can download a binary of the latest version
[here](https://ci.appveyor.com/api/projects/aap/re3/artifacts/bin%2FReleaseCI%2Fre3.dll?branch=master).
+Re3 starts the script main_freeroam.scm by default. Make sure you copy it to your data directory.
+
# Strategy
A good approach is to start at the fringes of the code base,
@@ -43,6 +45,9 @@ CCollision
CCullZones
CTheZones
CPathFind
+CCam
+CParticle
+CParticleMgr
```
# Low hanging fruit
diff --git a/gamefiles/main_d.scm b/gamefiles/main_d.scm
new file mode 100644
index 00000000..7b46ca39
--- /dev/null
+++ b/gamefiles/main_d.scm
Binary files differ
diff --git a/gamefiles/main_freeroam.scm b/gamefiles/main_freeroam.scm
new file mode 100644
index 00000000..021b5c25
--- /dev/null
+++ b/gamefiles/main_freeroam.scm
Binary files differ
diff --git a/src/General.h b/src/General.h
index d67b1ff0..aa52bf4d 100644
--- a/src/General.h
+++ b/src/General.h
@@ -1,5 +1,4 @@
-
-
+#pragma once
class CGeneral
{
@@ -46,8 +45,8 @@ public:
{ return myrand() & 0xFFFF; }
// Probably don't want to ever reach high
static float GetRandomNumberInRange(float low, float high)
- { return low + (high - low)*(GetRandomNumber()/float(MY_RAND_MAX + 1)); }
+ { return low + (high - low)*(GetRandomNumber()/65536.0f); }
static Int32 GetRandomNumberInRange(Int32 low, Int32 high)
- { return low + (high - low)*(GetRandomNumber()/float(MY_RAND_MAX + 1)); }
+ { return low + (high - low)*(GetRandomNumber()/65536.0f); }
};
diff --git a/src/RecordDataForChase.cpp b/src/RecordDataForChase.cpp
deleted file mode 100644
index 6bff623e..00000000
--- a/src/RecordDataForChase.cpp
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.h"
-#include "RecordDataForChase.h"
-
-
-UInt8 &CRecordDataForChase::Status = *(UInt8*)0x95CDCE; \ No newline at end of file
diff --git a/src/RecordDataForChase.h b/src/RecordDataForChase.h
deleted file mode 100644
index 0dc72bed..00000000
--- a/src/RecordDataForChase.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-class CRecordDataForChase
-{
-public:
- static UInt8 &Status;
-}; \ No newline at end of file
diff --git a/src/RecordDataForGame.cpp b/src/RecordDataForGame.cpp
deleted file mode 100644
index 05b4223c..00000000
--- a/src/RecordDataForGame.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "common.h"
-#include "RecordDataForGame.h"
-
-UInt16 &CRecordDataForGame::RecordingState = *(UInt16 *)0x95CC24; \ No newline at end of file
diff --git a/src/Timer.cpp b/src/Timer.cpp
index 02dbf55a..35e569ac 100644
--- a/src/Timer.cpp
+++ b/src/Timer.cpp
@@ -1,10 +1,9 @@
+#include <Windows.h>
#include "common.h"
#include "patcher.h"
#include "DMAudio.h"
+#include "Record.h"
#include "Timer.h"
-#include "RecordDataForGame.h"
-#include "RecordDataForChase.h"
-#include <Windows.h>
uint32 &CTimer::m_snTimeInMilliseconds = *(uint32*)0x885B48;
uint32 &CTimer::m_snTimeInMillisecondsPauseMode = *(uint32*)0x5F7614;
@@ -229,4 +228,3 @@ STARTPATCHES
InjectHook(0x4AD4A0, CTimer::EndUserPause, PATCH_JUMP);
ENDPATCHES
#endif
-
diff --git a/src/common.h b/src/common.h
index 89c031fe..34214d42 100644
--- a/src/common.h
+++ b/src/common.h
@@ -18,32 +18,29 @@
#define rwVENDORID_ROCKSTAR 0x0253F2
-typedef uint8_t uint8;
-typedef int8_t int8;
-typedef uint16_t uint16;
-typedef int16_t int16;
-typedef uint32_t uint32;
-typedef int32_t int32;
+// Get rid of bullshit windows definitions, we're not running on an 8086
+#ifdef far
+#undef far
+#endif
+#ifdef near
+#undef near
+#endif
+
+typedef uint8_t uint8, UInt8;
+typedef int8_t int8, Int8;
+typedef uint16_t uint16, UInt16;
+typedef int16_t int16, Int16;
+typedef uint32_t uint32, UInt32;
+typedef int32_t int32, Int32;
typedef uintptr_t uintptr;
+typedef uint64_t uint64, UInt64;
+typedef int64_t int64, Int64;
-typedef char Int8;
-typedef unsigned char UInt8;
-typedef signed char SInt8;
-typedef short Int16;
-typedef unsigned short UInt16;
-typedef signed short SInt16;
-typedef int Int32;
-typedef unsigned int UInt32;
-typedef signed int SInt32;
-typedef float Float;
-typedef double Double;
-typedef Int8 Bool; //typedef bool Bool;
+typedef float Float;
+typedef double Double;
+typedef bool Bool;
typedef char Char;
-typedef __int64 Int64;
-typedef unsigned __int64 UInt64;
-typedef signed __int64 SInt64;
-
#define nil NULL
#include "config.h"
@@ -85,10 +82,10 @@ extern RsGlobalType &RsGlobal;
#define DEFAULT_SCREEN_HEIGHT (448)
#define SCREEN_WIDTH Float(RsGlobal.width)
#define SCREEN_HEIGHT Float(RsGlobal.height)
-#define SCREEN_STRETCH_X(a) Float( a * ( SCREEN_WIDTH / Float(DEFAULT_SCREEN_WIDTH) ) )
-#define SCREEN_STRETCH_Y(a) Float( a * ( SCREEN_HEIGHT / Float(DEFAULT_SCREEN_HEIGHT) ) )
-#define SCREEN_FROM_RIGHT(a) Float( SCREEN_WIDTH - SCREEN_STRETCH_X(a) )
-#define SCREEN_FROM_BOTTOM(a) Float( SCREEN_HEIGHT - SCREEN_STRETCH_Y(a) )
+#define SCREEN_STRETCH_X(a) Float((a) * (SCREEN_WIDTH / Float(DEFAULT_SCREEN_WIDTH)))
+#define SCREEN_STRETCH_Y(a) Float((a) * (SCREEN_HEIGHT / Float(DEFAULT_SCREEN_HEIGHT)))
+#define SCREEN_FROM_RIGHT(a) Float(SCREEN_WIDTH - SCREEN_STRETCH_X(a))
+#define SCREEN_FROM_BOTTOM(a) Float(SCREEN_HEIGHT - SCREEN_STRETCH_Y(a))
char *GetUserDirectory(void);
@@ -120,41 +117,29 @@ public:
CRGBA(void) { }
CRGBA(uint8 r, uint8 g, uint8 b, uint8 a) : r(r), g(g), b(b), a(a) { }
#ifdef RWCORE_H
- operator RwRGBA &(void)
- {
+ operator RwRGBA &(void) {
return rwRGBA;
}
- operator RwRGBA *(void)
- {
+ operator RwRGBA *(void) {
return &rwRGBA;
}
- operator RwRGBA (void) const
- {
+ operator RwRGBA (void) const {
return rwRGBA;
}
#endif
};
-// inline float clamp(float v, float min, float max){ return v<min ? min : v>max ? max : v; }
-
-inline float
-sq(float x) { return x*x; }
+#define clamp(v, low, high) ((v)<(low) ? (low) : (v)>(high) ? (high) : (v))
-#define SQR(x) ( x * x )
+inline float sq(float x) { return x*x; }
+#define SQR(x) ((x) * (x))
#define PI M_PI
#define DEGTORAD(x) ((x) * PI / 180.0f)
#define RADTODEG(x) ((x) * 180.0f / PI)
-
-#if USE_PS2_RAND == TRUE
-#define MY_RAND_MAX 65535
-#else
-#define MY_RAND_MAX 32767
-#endif
-
int myrand(void);
void mysrand(unsigned int seed);
@@ -167,10 +152,6 @@ void mysrand(unsigned int seed);
#define VALIDATE_SIZE(struc, size) static_assert(sizeof(struc) == size, "Invalid structure size of " #struc)
#define VALIDATE_OFFSET(struc, member, offset) static_assert(offsetof(struc, member) == offset, "The offset of " #member " in " #struc " is not " #offset "...")
-#define clamp(v, a, b) (max(min(v, b), a))
-//#define min(a, b) ((a) < (b) ? (a) : (b))
-//#define max(a, b) ((a) > (b) ? (a) : (b))
-
-#define PERCENT(x, p) ( ( Float(x) * ( Float(p) / 100.0f ) ) )
+#define PERCENT(x, p) ((Float(x) * (Float(p) / 100.0f)))
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
-#define BIT(num) (1<<(num)) \ No newline at end of file
+#define BIT(num) (1<<(num))
diff --git a/src/config.h b/src/config.h
index 8637814d..ccd81023 100644
--- a/src/config.h
+++ b/src/config.h
@@ -1,5 +1,4 @@
-#ifndef _CONFIG_H_
-#define _CONFIG_H_
+#pragma once
enum Config {
NUMCDIMAGES = 50, // was 12
@@ -52,7 +51,3 @@ enum Config {
NUMWEATHERS = 4,
NUMHOURS = 24,
};
-
-#define USE_PS2_RAND TRUE
-
-#endif
diff --git a/src/control/Record.cpp b/src/control/Record.cpp
new file mode 100644
index 00000000..8949da5e
--- /dev/null
+++ b/src/control/Record.cpp
@@ -0,0 +1,6 @@
+#include "common.h"
+#include "Record.h"
+
+UInt16 &CRecordDataForGame::RecordingState = *(UInt16*)0x95CC24;
+
+UInt8 &CRecordDataForChase::Status = *(UInt8*)0x95CDCE;
diff --git a/src/RecordDataForGame.h b/src/control/Record.h
index 5d007ce5..97a9663d 100644
--- a/src/RecordDataForGame.h
+++ b/src/control/Record.h
@@ -4,4 +4,10 @@ class CRecordDataForGame
{
public:
static UInt16 &RecordingState;
-}; \ No newline at end of file
+};
+
+class CRecordDataForChase
+{
+public:
+ static UInt8 &Status;
+};
diff --git a/src/main.cpp b/src/main.cpp
index 853308a1..955b33ed 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -24,37 +24,22 @@ void operator delete(void *ptr) noexcept { gtadelete(ptr); }
unsigned __int64 myrand_seed = 1;
-
-int _cwrand() // original codewarrior rand
-{
- return ((int (__cdecl *)())0x5A41D0)();
-}
-
int
myps2rand(void)
{
- return _cwrand();
myrand_seed = 0x5851F42D4C957F2D * myrand_seed + 1;
return ((myrand_seed >> 32) & 0x7FFFFFFF);
}
int myrand(void)
{
-#if USE_PS2_RAND == TRUE
return myps2rand();
-#else
- return _cwrand();
-#endif
}
void
mysrand(unsigned int seed)
{
-#if USE_PS2_RAND == TRUE
myrand_seed = seed;
-#else
- ;
-#endif
}
// platform stuff
diff --git a/src/math/Vector.cpp b/src/math/Vector.cpp
deleted file mode 100644
index d9cc590f..00000000
--- a/src/math/Vector.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-#include "common.h"
-#include "Vector.h"
-
-void CVector::Normalise()
-{
- float sq = MagnitudeSqr();
- if(sq > 0.0f){
- float invsqrt = 1.0f/sqrt(sq); // CMaths::RecipSqrt
- x *= invsqrt;
- y *= invsqrt;
- z *= invsqrt;
- }else
- x = 1.0f;
-}
-
-// operator +
-CVector operator + (CVector const &refLeft, CVector const &refRight)
-{
- return CVector(refLeft.x + refRight.x, refLeft.y + refRight.y, refLeft.z + refRight.z);
-}
-
-CVector operator + (CVector const &refLeft, float fRight)
-{
- return CVector(refLeft.x + fRight, refLeft.y + fRight, refLeft.z + fRight);
-}
-
-CVector operator + (float fLeft, CVector const &refRight)
-{
- return CVector(fLeft + refRight.x, fLeft + refRight.y, fLeft + refRight.z);
-}
-
-// operator -
-CVector operator - (CVector const &refLeft, CVector const &refRight)
-{
- return CVector(refLeft.x - refRight.x, refLeft.y - refRight.y, refLeft.z - refRight.z);
-}
-
-CVector operator - (CVector const &refLeft, float fRight)
-{
- return CVector(refLeft.x - fRight, refLeft.y - fRight, refLeft.z - fRight);
-}
-
-CVector operator - (float fLeft, CVector const &refRight)
-{
- return CVector(fLeft - refRight.x, fLeft - refRight.y, fLeft - refRight.z);
-}
-
-// operator *
-CVector operator * (CVector const &refLeft, CVector const &refRight)
-{
- return CVector(refLeft.x * refRight.x, refLeft.y * refRight.y, refLeft.z * refRight.z);
-}
-
-CVector operator * (CVector const &refLeft, float fRight)
-{
- return CVector(refLeft.x * fRight, refLeft.y * fRight, refLeft.z * fRight);
-}
-
-CVector operator * (float fLeft, CVector const &refRight)
-{
- return CVector(fLeft * refRight.x, fLeft * refRight.y, fLeft * refRight.z);
-}
-
-// operator /
-CVector operator / (CVector const &refLeft, CVector const &refRight)
-{
- return CVector(refLeft.x / refRight.x, refLeft.y / refRight.y, refLeft.z / refRight.z);
-}
-
-CVector operator / (CVector const &refLeft, float fRight)
-{
- return CVector(refLeft.x / fRight, refLeft.y / fRight, refLeft.z / fRight);
-}
-
-CVector operator / (float fLeft, CVector const &refRight)
-{
- return CVector(fLeft / refRight.x, fLeft / refRight.y, fLeft / refRight.z);
-} \ No newline at end of file
diff --git a/src/math/Vector.h b/src/math/Vector.h
index e45906c8..3dba07ca 100644
--- a/src/math/Vector.h
+++ b/src/math/Vector.h
@@ -6,128 +6,71 @@ public:
float x, y, z;
CVector(void) {}
CVector(float x, float y, float z) : x(x), y(y), z(z) {}
-// CVector(CVector &refVector) : x(refVector.x), y(refVector.y), z(refVector.z) { }
-// CVector(const CVector &refVector) : x(refVector.x), y(refVector.y), z(refVector.z) {}
-// CVector(CVector2D &refVector, float _z = 0.0f) : x(refVector.x), y(refVector.y), z(_z) {}
#ifdef RWCORE_H
- CVector(RwV3d const &v) : x(v.x), y(v.y), z(v.z) {}
+ CVector(const RwV3d &v) : x(v.x), y(v.y), z(v.z) {}
operator RwV3d (void) const {
RwV3d vecRw = { this->x, this->y, this->z };
return vecRw;
}
- operator RwV3d *(void)
- {
- return (RwV3d *)this;
+ operator RwV3d *(void) {
+ return (RwV3d*)this;
}
- operator RwV3d &(void)
- {
- return *((RwV3d *)this);
+ operator RwV3d &(void) {
+ return *((RwV3d*)this);
}
#endif
float Magnitude(void) const { return sqrt(x*x + y*y + z*z); }
float MagnitudeSqr(void) const { return x*x + y*y + z*z; }
float Magnitude2D(void) const { return sqrt(x*x + y*y); }
- void Normalise(void);
-
-
- // operator =
- inline CVector const& operator = (CVector const &refRight)
- {
- x = refRight.x;
- y = refRight.y;
- z = refRight.z;
- return *this;
- }
-
- inline CVector const& operator = (float fRight)
- {
- x = fRight;
- y = fRight;
- z = fRight;
- return *this;
- }
-
- // operator +=
- inline CVector const& operator += (CVector const &refRight)
- {
- x += refRight.x;
- y += refRight.y;
- z += refRight.z;
- return *this;
- }
-
- inline CVector const& operator += (float fRight)
- {
- x += fRight;
- y += fRight;
- z += fRight;
- return *this;
- }
-
- // operator -=
- inline CVector const& operator -= (CVector const &refRight)
- {
- x -= refRight.x;
- y -= refRight.y;
- z -= refRight.z;
- return *this;
+ void Normalise(void) {
+ float sq = MagnitudeSqr();
+ if(sq > 0.0f){
+ float invsqrt = 1.0f/sqrt(sq); // CMaths::RecipSqrt
+ x *= invsqrt;
+ y *= invsqrt;
+ z *= invsqrt;
+ }else
+ x = 1.0f;
}
-
- inline CVector const& operator -= (float fRight)
- {
- x -= fRight;
- y -= fRight;
- z -= fRight;
+
+ inline const CVector &operator+=(CVector const &right) {
+ x += right.x;
+ y += right.y;
+ z += right.z;
return *this;
}
-
- // operator *=
- inline CVector const& operator *= (CVector const &refRight)
- {
- x *= refRight.x;
- y *= refRight.y;
- z *= refRight.z;
+
+ inline const CVector &operator-=(CVector const &right) {
+ x -= right.x;
+ y -= right.y;
+ z -= right.z;
return *this;
}
-
- inline CVector const& operator *= (float fRight)
- {
- x *= fRight;
- y *= fRight;
- z *= fRight;
+
+ inline const CVector &operator*=(float right) {
+ x *= right;
+ y *= right;
+ z *= right;
return *this;
}
-
- // operator /=
- inline CVector const& operator /= (CVector const &refRight)
- {
- x /= refRight.x;
- y /= refRight.y;
- z /= refRight.z;
+
+ inline const CVector &operator/=(float right) {
+ x /= right;
+ y /= right;
+ z /= right;
return *this;
}
-
- inline CVector const& operator /= (float fRight)
- {
- x /= fRight;
- y /= fRight;
- z /= fRight;
- return *this;
+
+ inline CVector operator-() const {
+ return CVector(-x, -y, -z);
}
-
- inline CVector operator - () const
- {
- return CVector(-x, -y, -z);
- }
-
+
bool IsZero(void) { return x == 0.0f && y == 0.0f && z == 0.0f; }
};
-//extern CVector operator*(CMatrix const& matrix, CVector const& vector);
-
inline float
DotProduct(const CVector &v1, const CVector &v2)
{
@@ -143,22 +86,22 @@ CrossProduct(const CVector &v1, const CVector &v2)
v1.x*v2.y - v1.y*v2.x);
}
-// operator +
-extern CVector operator + (CVector const &refLeft, CVector const &refRight);
-extern CVector operator + (CVector const &refLeft, float fRight);
-extern CVector operator + (float fLeft, CVector const &refRight);
+inline CVector operator+(const CVector &left, const CVector &right)
+{
+ return CVector(left.x + right.x, left.y + right.y, left.z + right.z);
+}
+
+inline CVector operator-(const CVector &left, const CVector &right)
+{
+ return CVector(left.x - right.x, left.y - right.y, left.z - right.z);
+}
-// operator -
-extern CVector operator - (CVector const &refLeft, CVector const &refRight);
-extern CVector operator - (CVector const &refLeft, float fRight);
-extern CVector operator - (float fLeft, CVector const &refRight);
-
-// operator *
-extern CVector operator * (CVector const &refLeft, CVector const &refRight);
-extern CVector operator * (CVector const &refLeft, float fRight);
-extern CVector operator * (float fLeft, CVector const &refRight);
-
-// operator /
-extern CVector operator / (CVector const &refLeft, CVector const &refRight);
-extern CVector operator / (CVector const &refLeft, float fRight);
-extern CVector operator / (float fLeft, CVector const &refRight); \ No newline at end of file
+inline CVector operator*(const CVector &left, float right)
+{
+ return CVector(left.x * right, left.y * right, left.z * right);
+}
+
+inline CVector operator/(const CVector &left, float right)
+{
+ return CVector(left.x / right, left.y / right, left.z / right);
+}
diff --git a/src/render/Particle.cpp b/src/render/Particle.cpp
index aade3578..18ea4c6c 100644
--- a/src/render/Particle.cpp
+++ b/src/render/Particle.cpp
@@ -1229,7 +1229,9 @@ void CParticle::Update()
moveStep.z = point.point.z;
if ( psystem->m_Type == PARTICLE_DEBRIS2 )
{
- particle->m_vecVelocity *= CVector(0.8f, 0.8f, -0.4f);
+ particle->m_vecVelocity.x *= 0.8f;
+ particle->m_vecVelocity.y *= 0.8f;
+ particle->m_vecVelocity.z *= -0.4f;
if ( particle->m_vecVelocity.z < 0.005f )
particle->m_vecVelocity.z = 0.0f;
}
diff --git a/src/ParticleMgr.cpp b/src/render/ParticleMgr.cpp
index d259c4b4..d259c4b4 100644
--- a/src/ParticleMgr.cpp
+++ b/src/render/ParticleMgr.cpp
diff --git a/src/ParticleMgr.h b/src/render/ParticleMgr.h
index a2dcbdb5..a2dcbdb5 100644
--- a/src/ParticleMgr.h
+++ b/src/render/ParticleMgr.h
diff --git a/src/render/Sprite.cpp b/src/render/Sprite.cpp
index 509564ac..900b4dba 100644
--- a/src/render/Sprite.cpp
+++ b/src/render/Sprite.cpp
@@ -4,12 +4,6 @@
#include "Camera.h"
#include "Sprite.h"
-// Get rid of bullshit windows definitions, we're not running on an 8086
-#ifdef far
-#undef far
-#undef near
-#endif
-
float &CSprite::m_f2DNearScreenZ = *(float*)0x8F1ABC;
float &CSprite::m_f2DFarScreenZ = *(float*)0x8F2C94;
float &CSprite::m_fRecipNearClipPlane = *(float*)0x8F5FFC;
diff --git a/src/render/Sprite2d.cpp b/src/render/Sprite2d.cpp
index 2311a75e..ff6cd0db 100644
--- a/src/render/Sprite2d.cpp
+++ b/src/render/Sprite2d.cpp
@@ -4,12 +4,6 @@
#include "Camera.h"
#include "Sprite2d.h"
-// Get rid of bullshit windows definitions, we're not running on an 8086
-#ifdef far
-#undef far
-#undef near
-#endif
-
RwIm2DVertex *CSprite2d::maVertices = (RwIm2DVertex*)0x6E9168;
float &CSprite2d::RecipNearClip = *(float*)0x880DB4;
int32 &CSprite2d::mCurrentBank = *(int32*)0x8F1AF4;
@@ -18,7 +12,6 @@ int32 *CSprite2d::mCurrentSprite = (int32*)0x6F4500;
int32 *CSprite2d::mBankStart = (int32*)0x774BE8;
RwIm2DVertex *CSprite2d::maBankVertices = (RwIm2DVertex*)0x8429F8;
-
void
CSprite2d::SetRecipNearClip(void)
{