Adds LoadGeneralParameters function

This commit is contained in:
Jeff Harris 2020-01-10 14:56:03 -08:00
parent 2ae8c4bc8d
commit 7d1789a6ef
30 changed files with 2415 additions and 1771 deletions

View File

@ -16,7 +16,8 @@ clean:
test: build
@echo "Building tests"
@$(MAKE) -C test build
test/build/c1tests
@cp -r test/assets/DATA test/build
@(cd test/build && ./c1tests)
run: build
@echo "Running dethrace"

View File

@ -40,8 +40,6 @@ br_error BrV1dbBegin() {
return 4103;
}
printf("BrV1dbBegin\n");
BrMemSet(&v1db, 0, sizeof(br_v1db_state));
v1db.active = 1;
BrRegistryNew(&v1db.reg_models);

View File

@ -12,8 +12,8 @@ DEPS := $(OBJS:.o=.d)
INC_DIRS := $(shell find $(SRC_DIR) -type d) $(BR_SRC_DIR)
INC_FLAGS := $(addprefix -I,$(INC_DIRS))
CFLAGS ?= $(INC_FLAGS) -Wno-return-type -Wno-missing-declarations -Werror=implicit-function-declaration
LDFLAGS ?= -lm
CFLAGS ?= $(INC_FLAGS) -g -Wno-return-type -Wno-missing-declarations -Werror=implicit-function-declaration
LDFLAGS ?= -lm -fno-pie
.PHONY: clean build test

View File

@ -1,14 +1,16 @@
#ifndef _DISPLAYS_H_
#define _DISPLAYS_H_
#include "dr_types.h"
#include "br_types.h"
#include "dr_types.h"
extern int gDim_amount;
// Offset: 0
// Size: 56
// EAX: pStr
// EDX: pFudge_colon
void GetTimerString(char *pStr, int pFudge_colon);
void GetTimerString(char* pStr, int pFudge_colon);
// Offset: 56
// Size: 116
@ -39,7 +41,7 @@ int HeadupActive(int pIndex);
// EDX: pX
// EBX: pY
// ECX: pFont
void DRPixelmapText(br_pixelmap *pPixelmap, int pX, int pY, tDR_font *pFont, char *pText, int pRight_edge);
void DRPixelmapText(br_pixelmap* pPixelmap, int pX, int pY, tDR_font* pFont, char* pText, int pRight_edge);
// Offset: 1032
// Size: 550
@ -47,7 +49,7 @@ void DRPixelmapText(br_pixelmap *pPixelmap, int pX, int pY, tDR_font *pFont, cha
// EDX: pX
// EBX: pY
// ECX: pFont
void DRPixelmapCleverText2(br_pixelmap *pPixelmap, int pX, int pY, tDR_font *pFont, signed char *pText, int pRight_edge);
void DRPixelmapCleverText2(br_pixelmap* pPixelmap, int pX, int pY, tDR_font* pFont, signed char* pText, int pRight_edge);
// Offset: 1584
// Size: 248
@ -55,11 +57,11 @@ void DRPixelmapCleverText2(br_pixelmap *pPixelmap, int pX, int pY, tDR_font *pFo
// EDX: pLeft
// EBX: pTop
// ECX: pRight
void DeviouslyDimRectangle(br_pixelmap *pPixelmap, int pLeft, int pTop, int pRight, int pBottom, int pKnock_out_corners);
void DeviouslyDimRectangle(br_pixelmap* pPixelmap, int pLeft, int pTop, int pRight, int pBottom, int pKnock_out_corners);
// Offset: 1832
// Size: 461
void DimRectangle(br_pixelmap *pPixelmap, int pLeft, int pTop, int pRight, int pBottom, int pKnock_out_corners);
void DimRectangle(br_pixelmap* pPixelmap, int pLeft, int pTop, int pRight, int pBottom, int pKnock_out_corners);
// Offset: 2296
// Size: 352
@ -82,7 +84,7 @@ void DubreyBar(int pX_index, int pY, int pColour);
// EDX: pLevel
// EBX: pName
// ECX: pBar_colour
void DoPSPowerHeadup(int pY, int pLevel, char *pName, int pBar_colour);
void DoPSPowerHeadup(int pY, int pLevel, char* pName, int pBar_colour);
// Offset: 3168
// Size: 163
@ -102,13 +104,13 @@ int FindAHeadupHoleWoofBarkSoundsABitRude(int pSlot_index);
// Size: 144
// EAX: pFont
// EDX: pText
int DRTextWidth(tDR_font *pFont, char *pText);
int DRTextWidth(tDR_font* pFont, char* pText);
// Offset: 5952
// Size: 206
// EAX: pFont
// EDX: pText
int DRTextCleverWidth(tDR_font *pFont, signed char *pText);
int DRTextCleverWidth(tDR_font* pFont, signed char* pText);
// Offset: 6160
// Size: 98
@ -116,17 +118,17 @@ int DRTextCleverWidth(tDR_font *pFont, signed char *pText);
// EDX: pX
// EBX: pY
// ECX: pFont
void DRPixelmapCentredText(br_pixelmap *pPixelmap, int pX, int pY, tDR_font *pFont, char *pText);
void DRPixelmapCentredText(br_pixelmap* pPixelmap, int pX, int pY, tDR_font* pFont, char* pText);
// Offset: 6260
// Size: 77
// EAX: pText
int IsHeadupTextClever(signed char *pText);
int IsHeadupTextClever(signed char* pText);
// Offset: 6340
// Size: 562
// EAX: pHeadup
int MungeHeadupWidth(tHeadup *pHeadup);
int MungeHeadupWidth(tHeadup* pHeadup);
// Offset: 6904
// Size: 605
@ -134,7 +136,7 @@ int MungeHeadupWidth(tHeadup *pHeadup);
// EDX: pFlash_rate
// EBX: pLifetime
// ECX: pFont_index
int NewTextHeadupSlot2(int pSlot_index, int pFlash_rate, int pLifetime, int pFont_index, char *pText, int pQueue_it);
int NewTextHeadupSlot2(int pSlot_index, int pFlash_rate, int pLifetime, int pFont_index, char* pText, int pQueue_it);
// Offset: 7512
// Size: 71
@ -142,7 +144,7 @@ int NewTextHeadupSlot2(int pSlot_index, int pFlash_rate, int pLifetime, int pFon
// EDX: pFlash_rate
// EBX: pLifetime
// ECX: pFont_index
int NewTextHeadupSlot(int pSlot_index, int pFlash_rate, int pLifetime, int pFont_index, char *pText);
int NewTextHeadupSlot(int pSlot_index, int pFlash_rate, int pLifetime, int pFont_index, char* pText);
// Offset: 7584
// Size: 496
@ -172,7 +174,7 @@ void MoveHeadupTo(int pHeadup_index, int pNew_x, int pNew_y);
// Size: 83
// EAX: pHeadup_index
// EDX: pNew_text
void ChangeHeadupText(int pHeadup_index, char *pNew_text);
void ChangeHeadupText(int pHeadup_index, char* pNew_text);
// Offset: 8964
// Size: 199
@ -193,7 +195,7 @@ void DoDamageScreen(tU32 pThe_time);
// Offset: 9664
// Size: 404
void PoshDrawLine(float pAngle, br_pixelmap *pDestn, int pX1, int pY1, int pX2, int pY2, int pColour);
void PoshDrawLine(float pAngle, br_pixelmap* pDestn, int pX1, int pY1, int pX2, int pY2, int pColour);
// Offset: 10068
// Size: 3133
@ -213,7 +215,7 @@ void ChangingView();
// Size: 445
// EAX: pAmount
// EDX: pPrefix_text
void EarnCredits2(int pAmount, char *pPrefix_text);
void EarnCredits2(int pAmount, char* pPrefix_text);
// Offset: 14600
// Size: 50
@ -236,7 +238,7 @@ void AwardTime(tU32 pTime);
// EDX: pLeft
// EBX: pTop
// ECX: pRight
void DrawRectangle(br_pixelmap *pPixelmap, int pLeft, int pTop, int pRight, int pBottom, int pColour);
void DrawRectangle(br_pixelmap* pPixelmap, int pLeft, int pTop, int pRight, int pBottom, int pColour);
// Offset: 15208
// Size: 178
@ -244,7 +246,7 @@ void DrawRectangle(br_pixelmap *pPixelmap, int pLeft, int pTop, int pRight, int
// EDX: pLeft
// EBX: pTop
// ECX: pRight
void DrawRRectangle(br_pixelmap *pPixelmap, int pLeft, int pTop, int pRight, int pBottom, int pColour);
void DrawRRectangle(br_pixelmap* pPixelmap, int pLeft, int pTop, int pRight, int pBottom, int pColour);
// Offset: 15388
// Size: 620
@ -252,7 +254,7 @@ void DrawRRectangle(br_pixelmap *pPixelmap, int pLeft, int pTop, int pRight, int
// EDX: pText
// EBX: pPixelmap
// ECX: pLeft
void OoerrIveGotTextInMeBoxMissus(int pFont_index, char *pText, br_pixelmap *pPixelmap, int pLeft, int pTop, int pRight, int pBottom, int pCentred);
void OoerrIveGotTextInMeBoxMissus(int pFont_index, char* pText, br_pixelmap* pPixelmap, int pLeft, int pTop, int pRight, int pBottom, int pCentred);
// Offset: 16008
// Size: 117
@ -260,7 +262,7 @@ void OoerrIveGotTextInMeBoxMissus(int pFont_index, char *pText, br_pixelmap *pPi
// EDX: pX
// EBX: pY
// ECX: pColour
void TransBrPixelmapText(br_pixelmap *pPixelmap, int pX, int pY, br_uint_32 pColour, br_font *pFont, signed char *pText);
void TransBrPixelmapText(br_pixelmap* pPixelmap, int pX, int pY, br_uint_32 pColour, br_font* pFont, signed char* pText);
// Offset: 16128
// Size: 250
@ -268,7 +270,7 @@ void TransBrPixelmapText(br_pixelmap *pPixelmap, int pX, int pY, br_uint_32 pCol
// EDX: pX
// EBX: pY
// ECX: pFont
void TransDRPixelmapText(br_pixelmap *pPixelmap, int pX, int pY, tDR_font *pFont, char *pText, int pRight_edge);
void TransDRPixelmapText(br_pixelmap* pPixelmap, int pX, int pY, tDR_font* pFont, char* pText, int pRight_edge);
// Offset: 16380
// Size: 250
@ -276,6 +278,6 @@ void TransDRPixelmapText(br_pixelmap *pPixelmap, int pX, int pY, tDR_font *pFont
// EDX: pX
// EBX: pY
// ECX: pFont
void TransDRPixelmapCleverText(br_pixelmap *pPixelmap, int pX, int pY, tDR_font *pFont, char *pText, int pRight_edge);
void TransDRPixelmapCleverText(br_pixelmap* pPixelmap, int pX, int pY, tDR_font* pFont, char* pText, int pRight_edge);
#endif

View File

@ -1,7 +1,9 @@
#ifndef _GLOBVRKM_H_
#define _GLOBVRKM_H_
#include "dr_types.h"
#include "br_types.h"
#include "dr_types.h"
extern float gRecovery_cost[3];
#endif

View File

@ -1,8 +1,10 @@
#ifndef _GRAPHICS_H_
#define _GRAPHICS_H_
#include "dr_types.h"
#include "br_types.h"
#include "dr_types.h"
extern br_scalar gAmbient_adjustment;
// Offset: 0
// Size: 44
@ -20,7 +22,7 @@ void ResetLollipopQueue();
// Size: 124
// EAX: pActor
// EDX: pIndex
int AddToLollipopQueue(br_actor *pActor, int pIndex);
int AddToLollipopQueue(br_actor* pActor, int pIndex);
// Offset: 256
// Size: 237
@ -32,7 +34,7 @@ void RenderLollipops();
// EDX: pX1
// EBX: pY1
// ECX: pX2
void DRDrawLine(br_pixelmap *pDestn, int pX1, int pY1, int pX2, int pY2, int pColour);
void DRDrawLine(br_pixelmap* pDestn, int pX1, int pY1, int pX2, int pY2, int pColour);
// Offset: 604
// Size: 90
@ -40,7 +42,7 @@ void DRDrawLine(br_pixelmap *pDestn, int pX1, int pY1, int pX2, int pY2, int pCo
// EDX: pX
// EBX: pY
// ECX: pY_pitch
void DrawDigitAt(br_pixelmap *gImage, int pX, int pY, int pY_pitch, int pValue);
void DrawDigitAt(br_pixelmap* gImage, int pX, int pY, int pY_pitch, int pValue);
// Offset: 696
// Size: 156
@ -48,12 +50,12 @@ void DrawDigitAt(br_pixelmap *gImage, int pX, int pY, int pY_pitch, int pValue);
// EDX: pX
// EBX: pY
// ECX: pX_pitch
void DrawNumberAt(br_pixelmap *gImage, int pX, int pY, int pX_pitch, int pY_pitch, int pValue, int pDigit_count, int pLeading_zeroes);
void DrawNumberAt(br_pixelmap* gImage, int pX, int pY, int pX_pitch, int pY_pitch, int pValue, int pDigit_count, int pLeading_zeroes);
// Offset: 852
// Size: 350
// EAX: pPalette
void BuildColourTable(br_pixelmap *pPalette);
void BuildColourTable(br_pixelmap* pPalette);
// Offset: 1204
// Size: 44
@ -63,14 +65,14 @@ void ClearConcussion();
// Size: 137
// EAX: pSource
// EDX: pCount
tS8* SkipLines(tS8 *pSource, int pCount);
tS8* SkipLines(tS8* pSource, int pCount);
// Offset: 1388
// Size: 126
// EAX: pDst
// EDX: pSrc
// EBX: pN
void CopyWords(char *pDst, char *pSrc, int pN);
void CopyWords(char* pDst, char* pSrc, int pN);
// Offset: 1516
// Size: 606
@ -78,7 +80,7 @@ void CopyWords(char *pDst, char *pSrc, int pN);
// EDX: pDest_x
// EBX: pOffset_x
// ECX: pDest_y
void Copy8BitStripImageTo16Bit(br_pixelmap *pDest, br_int_16 pDest_x, br_int_16 pOffset_x, br_int_16 pDest_y, br_int_16 pOffset_y, tS8 *pSource, br_int_16 pSource_x, br_int_16 pSource_y, br_uint_16 pWidth, br_uint_16 pHeight);
void Copy8BitStripImageTo16Bit(br_pixelmap* pDest, br_int_16 pDest_x, br_int_16 pOffset_x, br_int_16 pDest_y, br_int_16 pOffset_y, tS8* pSource, br_int_16 pSource_x, br_int_16 pSource_y, br_uint_16 pWidth, br_uint_16 pHeight);
// Offset: 2124
// Size: 651
@ -86,7 +88,7 @@ void Copy8BitStripImageTo16Bit(br_pixelmap *pDest, br_int_16 pDest_x, br_int_16
// EDX: pDest_x
// EBX: pOffset_x
// ECX: pDest_y
void CopyStripImage(br_pixelmap *pDest, br_int_16 pDest_x, br_int_16 pOffset_x, br_int_16 pDest_y, br_int_16 pOffset_y, tS8 *pSource, br_int_16 pSource_x, br_int_16 pSource_y, br_uint_16 pWidth, br_uint_16 pHeight);
void CopyStripImage(br_pixelmap* pDest, br_int_16 pDest_x, br_int_16 pOffset_x, br_int_16 pDest_y, br_int_16 pOffset_y, tS8* pSource, br_int_16 pSource_x, br_int_16 pSource_y, br_uint_16 pWidth, br_uint_16 pHeight);
// Offset: 2776
// Size: 507
@ -117,24 +119,24 @@ void ScreenLarger();
// EAX: pPalette
// EDX: pFirst_colour
// EBX: pCount
void DRSetPaletteEntries(br_pixelmap *pPalette, int pFirst_colour, int pCount);
void DRSetPaletteEntries(br_pixelmap* pPalette, int pFirst_colour, int pCount);
// Offset: 4144
// Size: 128
// EAX: pThe_palette
// EDX: pSet_current_palette
void DRSetPalette3(br_pixelmap *pThe_palette, int pSet_current_palette);
void DRSetPalette3(br_pixelmap* pThe_palette, int pSet_current_palette);
// Offset: 4272
// Size: 140
// EAX: pThe_palette
// EDX: pSet_current_palette
void DRSetPalette2(br_pixelmap *pThe_palette, int pSet_current_palette);
void DRSetPalette2(br_pixelmap* pThe_palette, int pSet_current_palette);
// Offset: 4412
// Size: 50
// EAX: pThe_palette
void DRSetPalette(br_pixelmap *pThe_palette);
void DRSetPalette(br_pixelmap* pThe_palette);
// Offset: 4464
// Size: 415
@ -143,7 +145,7 @@ void InitializePalettes();
// Offset: 4880
// Size: 66
// EAX: pPal_name
void SwitchToPalette(char *pPal_name);
void SwitchToPalette(char* pPal_name);
// Offset: 4948
// Size: 104
@ -191,7 +193,7 @@ void SufferFromConcussion(float pSeriousness);
// EDX: pDepth_buffer
// EBX: pCamera
// ECX: pCamera_to_world
void ProcessNonTrackActors(br_pixelmap *pRender_buffer, br_pixelmap *pDepth_buffer, br_actor *pCamera, br_matrix34 *pCamera_to_world, br_matrix34 *pOld_camera_matrix);
void ProcessNonTrackActors(br_pixelmap* pRender_buffer, br_pixelmap* pDepth_buffer, br_actor* pCamera, br_matrix34* pCamera_to_world, br_matrix34* pOld_camera_matrix);
// Offset: 7188
// Size: 119
@ -204,14 +206,14 @@ int OppositeColour(int pColour);
// EDX: pTime
// EBX: pTrans
// ECX: pPos
void DrawMapBlip(tCar_spec *pCar, tU32 pTime, br_matrix34 *pTrans, br_vector3 *pPos, int pColour);
void DrawMapBlip(tCar_spec* pCar, tU32 pTime, br_matrix34* pTrans, br_vector3* pPos, int pColour);
// Offset: 9112
// Size: 257
// EAX: pTime
// EDX: pPos
// EBX: pColour
void DrawMapSmallBlip(tU32 pTime, br_vector3 *pPos, int pColour);
void DrawMapSmallBlip(tU32 pTime, br_vector3* pPos, int pColour);
// Offset: 9372
// Size: 651
@ -219,19 +221,19 @@ void DrawMapSmallBlip(tU32 pTime, br_vector3 *pPos, int pColour);
// EDX: pCar
// EBX: p1
// ECX: p2
void MungeClipPlane(br_vector3 *pLight, tCar_spec *pCar, br_vector3 *p1, br_vector3 *p2, br_scalar pY_offset);
void MungeClipPlane(br_vector3* pLight, tCar_spec* pCar, br_vector3* p1, br_vector3* p2, br_scalar pY_offset);
// Offset: 10024
// Size: 180
// EAX: pCar
// EDX: pLight
// EBX: pIndex_1
void TryThisEdge(tCar_spec *pCar, br_vector3 *pLight, int pIndex_1, br_scalar pSign_1, int pIndex_2, br_scalar pSign_2, int pPoint_index_1, int pPoint_index_2, br_scalar pY_offset);
void TryThisEdge(tCar_spec* pCar, br_vector3* pLight, int pIndex_1, br_scalar pSign_1, int pIndex_2, br_scalar pSign_2, int pPoint_index_1, int pPoint_index_2, br_scalar pY_offset);
// Offset: 10204
// Size: 104
// EAX: pPos
br_scalar DistanceFromPlane(br_vector3 *pPos, br_scalar pA, br_scalar pB, br_scalar pC, br_scalar pD);
br_scalar DistanceFromPlane(br_vector3* pPos, br_scalar pA, br_scalar pB, br_scalar pC, br_scalar pD);
// Offset: 10308
// Size: 84
@ -247,7 +249,7 @@ void EnableLights();
// EDX: pWorld
// EBX: pTrack_spec
// ECX: pCamera
void ProcessShadow(tCar_spec *pCar, br_actor *pWorld, tTrack_spec *pTrack_spec, br_actor *pCamera, br_matrix34 *pCamera_to_world_transform, br_scalar pDistance_factor);
void ProcessShadow(tCar_spec* pCar, br_actor* pWorld, tTrack_spec* pTrack_spec, br_actor* pCamera, br_matrix34* pCamera_to_world_transform, br_scalar pDistance_factor);
// Offset: 15140
// Size: 519
@ -255,7 +257,7 @@ void ProcessShadow(tCar_spec *pCar, br_actor *pWorld, tTrack_spec *pTrack_spec,
// EDX: pTrack_spec
// EBX: pCamera
// ECX: pCamera_to_world_transform
void RenderShadows(br_actor *pWorld, tTrack_spec *pTrack_spec, br_actor *pCamera, br_matrix34 *pCamera_to_world_transform);
void RenderShadows(br_actor* pWorld, tTrack_spec* pTrack_spec, br_actor* pCamera, br_matrix34* pCamera_to_world_transform);
// Offset: 15660
// Size: 247
@ -266,7 +268,7 @@ void FlashyMapCheckpoint(int pIndex, tU32 pTime);
// Offset: 15908
// Size: 252
// EAX: pPixelmap
int ConditionallyFillWithSky(br_pixelmap *pPixelmap);
int ConditionallyFillWithSky(br_pixelmap* pPixelmap);
// Offset: 16160
// Size: 3751
@ -293,7 +295,7 @@ void ResetPalette();
// Size: 65
// EAX: pPtr
// EDX: pDarken_amount
void Darken(tU8 *pPtr, unsigned int pDarken_amount);
void Darken(tU8* pPtr, unsigned int pDarken_amount);
// Offset: 20200
// Size: 194
@ -319,7 +321,7 @@ void EnsureRenderPalette();
// Offset: 20812
// Size: 248
// EAX: pPixmap_name
void SplashScreenWith(char *pPixmap_name);
void SplashScreenWith(char* pPixmap_name);
// Offset: 21060
// Size: 48
@ -327,7 +329,7 @@ void EnsurePaletteUp();
// Offset: 21108
// Size: 103
br_uint_32 AmbientificateMaterial(br_material *pMat, void *pArg);
br_uint_32 AmbientificateMaterial(br_material* pMat, void* pArg);
// Offset: 21212
// Size: 60
@ -343,14 +345,14 @@ void InitAmbience();
// EDX: pDest_x
// EBX: pDest_y
// ECX: pSource
void DRPixelmapRectangleMaskedCopy(br_pixelmap *pDest, br_int_16 pDest_x, br_int_16 pDest_y, br_pixelmap *pSource, br_int_16 pSource_x, br_int_16 pSource_y, br_int_16 pWidth, br_int_16 pHeight);
void DRPixelmapRectangleMaskedCopy(br_pixelmap* pDest, br_int_16 pDest_x, br_int_16 pDest_y, br_pixelmap* pSource, br_int_16 pSource_x, br_int_16 pSource_y, br_int_16 pWidth, br_int_16 pHeight);
// Offset: 22120
// Size: 86
// EAX: pDest_x
// EDX: pDest_y
// EBX: pSource
void DRMaskedStamp(br_int_16 pDest_x, br_int_16 pDest_y, br_pixelmap *pSource);
void DRMaskedStamp(br_int_16 pDest_x, br_int_16 pDest_y, br_pixelmap* pSource);
// Offset: 22208
// Size: 332
@ -358,7 +360,7 @@ void DRMaskedStamp(br_int_16 pDest_x, br_int_16 pDest_y, br_pixelmap *pSource);
// EDX: pDest_x
// EBX: pDest_y
// ECX: pSource
void DRPixelmapRectangleOnscreenCopy(br_pixelmap *pDest, br_int_16 pDest_x, br_int_16 pDest_y, br_pixelmap *pSource, br_int_16 pSource_x, br_int_16 pSource_y, br_int_16 pWidth, br_int_16 pHeight);
void DRPixelmapRectangleOnscreenCopy(br_pixelmap* pDest, br_int_16 pDest_x, br_int_16 pDest_y, br_pixelmap* pSource, br_int_16 pSource_x, br_int_16 pSource_y, br_int_16 pWidth, br_int_16 pHeight);
// Offset: 22540
// Size: 823
@ -366,7 +368,7 @@ void DRPixelmapRectangleOnscreenCopy(br_pixelmap *pDest, br_int_16 pDest_x, br_i
// EDX: pDest_x
// EBX: pDest_y
// ECX: pSource
void DRPixelmapRectangleShearedCopy(br_pixelmap *pDest, br_int_16 pDest_x, br_int_16 pDest_y, br_pixelmap *pSource, br_int_16 pSource_x, br_int_16 pSource_y, br_int_16 pWidth, br_int_16 pHeight, tX1616 pShear);
void DRPixelmapRectangleShearedCopy(br_pixelmap* pDest, br_int_16 pDest_x, br_int_16 pDest_y, br_pixelmap* pSource, br_int_16 pSource_x, br_int_16 pSource_y, br_int_16 pWidth, br_int_16 pHeight, tX1616 pShear);
// Offset: 23364
// Size: 341
@ -374,7 +376,7 @@ void DRPixelmapRectangleShearedCopy(br_pixelmap *pDest, br_int_16 pDest_x, br_in
// EDX: pDest_x
// EBX: pDest_y
// ECX: pSource
void DRPixelmapRectangleVScaledCopy(br_pixelmap *pDest, br_int_16 pDest_x, br_int_16 pDest_y, br_pixelmap *pSource, br_int_16 pSource_x, br_int_16 pSource_y, br_int_16 pWidth, br_int_16 pHeight);
void DRPixelmapRectangleVScaledCopy(br_pixelmap* pDest, br_int_16 pDest_x, br_int_16 pDest_y, br_pixelmap* pSource, br_int_16 pSource_x, br_int_16 pSource_y, br_int_16 pWidth, br_int_16 pHeight);
// Offset: 23708
// Size: 87
@ -411,7 +413,7 @@ void SaveTransient(int pIndex, int pX_coord, int pY_coord);
// Offset: 24592
// Size: 214
// EAX: pGib
void DrawCursorGiblet(tCursor_giblet *pGib);
void DrawCursorGiblet(tCursor_giblet* pGib);
// Offset: 24808
// Size: 743
@ -460,7 +462,7 @@ void InitDRFonts();
// EDX: pLeft
// EBX: pTop
// ECX: pTop_clip
void DrawDropImage(br_pixelmap *pImage, int pLeft, int pTop, int pTop_clip, int pBottom_clip, int pOffset);
void DrawDropImage(br_pixelmap* pImage, int pLeft, int pTop, int pTop_clip, int pBottom_clip, int pOffset);
// Offset: 28956
// Size: 161
@ -468,7 +470,7 @@ void DrawDropImage(br_pixelmap *pImage, int pLeft, int pTop, int pTop_clip, int
// EDX: pLeft
// EBX: pTop
// ECX: pTop_clip
void DropInImageFromTop(br_pixelmap *pImage, int pLeft, int pTop, int pTop_clip, int pBottom_clip);
void DropInImageFromTop(br_pixelmap* pImage, int pLeft, int pTop, int pTop_clip, int pBottom_clip);
// Offset: 29120
// Size: 150
@ -476,7 +478,7 @@ void DropInImageFromTop(br_pixelmap *pImage, int pLeft, int pTop, int pTop_clip,
// EDX: pLeft
// EBX: pTop
// ECX: pTop_clip
void DropOutImageThruBottom(br_pixelmap *pImage, int pLeft, int pTop, int pTop_clip, int pBottom_clip);
void DropOutImageThruBottom(br_pixelmap* pImage, int pLeft, int pTop, int pTop_clip, int pBottom_clip);
// Offset: 29272
// Size: 152
@ -484,7 +486,7 @@ void DropOutImageThruBottom(br_pixelmap *pImage, int pLeft, int pTop, int pTop_c
// EDX: pLeft
// EBX: pTop
// ECX: pTop_clip
void DropInImageFromBottom(br_pixelmap *pImage, int pLeft, int pTop, int pTop_clip, int pBottom_clip);
void DropInImageFromBottom(br_pixelmap* pImage, int pLeft, int pTop, int pTop_clip, int pBottom_clip);
// Offset: 29424
// Size: 161
@ -492,7 +494,7 @@ void DropInImageFromBottom(br_pixelmap *pImage, int pLeft, int pTop, int pTop_cl
// EDX: pLeft
// EBX: pTop
// ECX: pTop_clip
void DropOutImageThruTop(br_pixelmap *pImage, int pLeft, int pTop, int pTop_clip, int pBottom_clip);
void DropOutImageThruTop(br_pixelmap* pImage, int pLeft, int pTop, int pTop_clip, int pBottom_clip);
// Offset: 29588
// Size: 262
@ -500,7 +502,7 @@ void DropOutImageThruTop(br_pixelmap *pImage, int pLeft, int pTop, int pTop_clip
// EDX: pLeft
// EBX: pTop
// ECX: pPercentage
void DrawTellyLine(br_pixelmap *pImage, int pLeft, int pTop, int pPercentage);
void DrawTellyLine(br_pixelmap* pImage, int pLeft, int pTop, int pPercentage);
// Offset: 29852
// Size: 203
@ -508,21 +510,21 @@ void DrawTellyLine(br_pixelmap *pImage, int pLeft, int pTop, int pPercentage);
// EDX: pLeft
// EBX: pTop
// ECX: pPercentage
void DrawTellyImage(br_pixelmap *pImage, int pLeft, int pTop, int pPercentage);
void DrawTellyImage(br_pixelmap* pImage, int pLeft, int pTop, int pPercentage);
// Offset: 30056
// Size: 194
// EAX: pImage
// EDX: pLeft
// EBX: pTop
void TellyInImage(br_pixelmap *pImage, int pLeft, int pTop);
void TellyInImage(br_pixelmap* pImage, int pLeft, int pTop);
// Offset: 30252
// Size: 220
// EAX: pImage
// EDX: pLeft
// EBX: pTop
void TellyOutImage(br_pixelmap *pImage, int pLeft, int pTop);
void TellyOutImage(br_pixelmap* pImage, int pLeft, int pTop);
// Offset: 30472
// Size: 45
@ -543,7 +545,7 @@ void InitShadow();
// Offset: 31320
// Size: 140
br_uint_32 SaveShadeTable(br_pixelmap *pTable, void *pArg);
br_uint_32 SaveShadeTable(br_pixelmap* pTable, void* pArg);
// Offset: 31460
// Size: 71
@ -571,6 +573,6 @@ int SwitchToLoresMode();
// EDX: pSource
// EBX: pSource_width
// ECX: pSource_height
void DRPixelmapDoubledCopy(br_pixelmap *pDestn, br_pixelmap *pSource, int pSource_width, int pSource_height, int pX_offset, int pY_offset);
void DRPixelmapDoubledCopy(br_pixelmap* pDestn, br_pixelmap* pSource, int pSource_width, int pSource_height, int pX_offset, int pY_offset);
#endif

View File

@ -2,26 +2,26 @@
#include <time.h>
#include "pc-dos/dossys.h"
#include "common/globvars.h"
#include "common/errors.h"
#include "common/drmem.h"
#include "common/graphics.h"
#include "common/depth.h"
#include "common/displays.h"
#include "common/drdebug.h"
#include "common/drmem.h"
#include "common/errors.h"
#include "common/flicplay.h"
#include "common/globvars.h"
#include "common/grafdata.h"
#include "common/graphics.h"
#include "common/loading.h"
#include "common/netgame.h"
#include "common/replay.h"
#include "common/grafdata.h"
#include "common/flicplay.h"
#include "common/sound.h"
#include "common/displays.h"
#include "common/oil.h"
#include "common/pedestrn.h"
#include "common/powerup.h"
#include "common/raycast.h"
#include "common/depth.h"
#include "common/world.h"
#include "common/oil.h"
#include "common/replay.h"
#include "common/skidmark.h"
#include "common/pedestrn.h"
#include "common/sound.h"
#include "common/world.h"
#include "pc-dos/dossys.h"
#include "brender.h"
@ -35,7 +35,7 @@ int gRender_indent;
int gCredits_per_rank[3];
int gInitial_credits[3];
int gNet_mode_of_last_game;
br_material *gDefault_track_material;
br_material* gDefault_track_material;
// Offset: 0
// Size: 115
@ -80,7 +80,7 @@ void InstallFindFailedHooks() {
// Offset: 1992
// Size: 158
void AllocateStandardLamp() {
br_actor *lamp;
br_actor* lamp;
int i;
}
@ -123,82 +123,83 @@ void Init2DStuff() {
// Size: 671
// EAX: pArgc
// EDX: pArgv
void InitialiseApplication(int pArgc, char **pArgv) {
gProgram_state.sausage_eater_mode = gSausage_override;
DrDebugLog(gSausage_override, *pArgv);
if (gAustere_override || PDDoWeLeadAnAustereExistance() != 0) {
gAusterity_mode = 1;
}
srand(time(NULL));
BrV1dbBeginWrapper_Float();
CreateStainlessClasses();
InitWobbleStuff();
LoadGeneralParameters();
DefaultNetName();
strcpy(gProgram_state.player_name[0], "MAX DAMAGE");
strcpy(gProgram_state.player_name[1], "DIE ANNA");
RestoreOptions();
LoadKeyMapping();
if (!PDInitScreenVars(pArgc, pArgv)) {
FatalError(0);
}
CalcGrafDataIndex();
InitializeBRenderEnvironment();
InitDRFonts();
InitBRFonts();
LoadMiscStrings();
LoadInRegistees();
FinishLoadingGeneral();
InitializePalettes();
AustereWarning();
LoadInterfaceStrings();
InitializeActionReplay();
FlicPaletteAllocate();
InitInterfaceLoadState();
InitTransientBitmaps();
InitSound();
InitHeadups();
gDefault_track_material = BrMaterialAllocate("gDefault_track_material");
//TODO:
//BYTE2(gDefault_track_material->map_transform.m[2][1]) = -29;
//BYTE3(gDefault_track_material->map_transform.m[2][1]) = 1;
BrMaterialAdd(gDefault_track_material);
InitShadow();
InitFlics();
AllocateStandardLamp();
InitAmbience();
LoadOpponents();
LoadPowerups();
LoadRaces(gRace_list, &gNumber_of_races, -1);
RevertPalette();
InitRayCasting();
InitDepthEffects();
InitialiseStorageSpace(&gOur_car_storage_space, 40, 2, 40, 30);
InitialiseStorageSpace(&gTheir_cars_storage_space, 300, 50, 500, 200);
InitialiseStorageSpace(&gPedestrians_storage_space, 500, 10, 0, 0);
InitialiseStorageSpace(&gTrack_storage_space, 400, 50, 400, 1000);
InitOilSpills();
if (gAustere_time) {
while (PDGetTotalTime() - gAustere_time < 2000) {
}
}
ClearEntireScreen();
InitSkids();
InitPeds();
gProgram_state.cars_available[42] = 0;
gCD_is_in_drive = TestForOriginalCarmaCDinDrive();
SwitchToLoresMode();
DrDebugLog(0, "AFTER APPLICATION INITIALISATION");
void InitialiseApplication(int pArgc, char** pArgv) {
gProgram_state.sausage_eater_mode = gSausage_override;
DrDebugLog(gSausage_override, *pArgv);
if (gAustere_override || PDDoWeLeadAnAustereExistance() != 0) {
gAusterity_mode = 1;
}
srand(time(NULL));
BrV1dbBeginWrapper_Float();
CreateStainlessClasses();
InitWobbleStuff();
LoadGeneralParameters();
DefaultNetName();
strcpy(gProgram_state.player_name[0], "MAX DAMAGE");
strcpy(gProgram_state.player_name[1], "DIE ANNA");
RestoreOptions();
LoadKeyMapping();
if (!PDInitScreenVars(pArgc, pArgv)) {
FatalError(0);
}
CalcGrafDataIndex();
InitializeBRenderEnvironment();
InitDRFonts();
InitBRFonts();
LoadMiscStrings();
LoadInRegistees();
FinishLoadingGeneral();
InitializePalettes();
AustereWarning();
LoadInterfaceStrings();
InitializeActionReplay();
FlicPaletteAllocate();
InitInterfaceLoadState();
InitTransientBitmaps();
InitSound();
InitHeadups();
gDefault_track_material = BrMaterialAllocate("gDefault_track_material");
//TODO:
//BYTE2(gDefault_track_material->map_transform.m[2][1]) = -29;
//BYTE3(gDefault_track_material->map_transform.m[2][1]) = 1;
BrMaterialAdd(gDefault_track_material);
InitShadow();
InitFlics();
AllocateStandardLamp();
InitAmbience();
LoadOpponents();
LoadPowerups();
LoadRaces(gRace_list, &gNumber_of_races, -1);
RevertPalette();
InitRayCasting();
InitDepthEffects();
InitialiseStorageSpace(&gOur_car_storage_space, 40, 2, 40, 30);
InitialiseStorageSpace(&gTheir_cars_storage_space, 300, 50, 500, 200);
InitialiseStorageSpace(&gPedestrians_storage_space, 500, 10, 0, 0);
InitialiseStorageSpace(&gTrack_storage_space, 400, 50, 400, 1000);
InitOilSpills();
if (gAustere_time) {
while (PDGetTotalTime() - gAustere_time < 2000) {
}
}
ClearEntireScreen();
InitSkids();
InitPeds();
gProgram_state.cars_available[42] = 0;
gCD_is_in_drive = TestForOriginalCarmaCDinDrive();
SwitchToLoresMode();
DrDebugLog(0, "AFTER APPLICATION INITIALISATION");
}
// Offset: 6004
// Size: 64
// EAX: pArgc
// EDX: pArgv
void InitialiseDeathRace(int pArgc, char **pArgv) {
void InitialiseDeathRace(int pArgc, char** pArgv) {
PDInitialiseSystem();
InitialiseApplication(pArgc, pArgv);
//dword_112DF8 = 1; // never checked by game
}
@ -228,7 +229,7 @@ void DisposeTrack() {
// Offset: 6788
// Size: 97
// EAX: pMaterial
void CopyMaterialColourFromIndex(br_material *pMaterial) {
void CopyMaterialColourFromIndex(br_material* pMaterial) {
}
// Offset: 6888
@ -251,4 +252,3 @@ int GetScreenSize() {
// EAX: pNew_size
void SetScreenSize(int pNew_size) {
}

View File

@ -1,8 +1,12 @@
#ifndef _INIT_H_
#define _INIT_H_
#include "dr_types.h"
#include "br_types.h"
#include "dr_types.h"
extern int gCredits_per_rank[3];
extern int gInitial_credits[3];
extern int gInitial_rank;
// Offset: 0
// Size: 115
@ -64,13 +68,13 @@ void Init2DStuff();
// Size: 671
// EAX: pArgc
// EDX: pArgv
void InitialiseApplication(int pArgc, char **pArgv);
void InitialiseApplication(int pArgc, char** pArgv);
// Offset: 6004
// Size: 64
// EAX: pArgc
// EDX: pArgv
void InitialiseDeathRace(int pArgc, char **pArgv);
void InitialiseDeathRace(int pArgc, char** pArgv);
// Offset: 6068
// Size: 427
@ -92,7 +96,7 @@ void DisposeTrack();
// Offset: 6788
// Size: 97
// EAX: pMaterial
void CopyMaterialColourFromIndex(br_material *pMaterial);
void CopyMaterialColourFromIndex(br_material* pMaterial);
// Offset: 6888
// Size: 1230

View File

@ -1,9 +1,24 @@
#include "loading.h"
#include <stdio.h>
#include <string.h>
#include "displays.h"
#include "errors.h"
#include "globvars.h"
#include "globvrkm.h"
#include "graphics.h"
#include "init.h"
#include "newgame.h"
#include "opponent.h"
#include "pc-dos/dossys.h"
#include "pedestrn.h"
#include "sound.h"
#include "utility.h"
#include "world.h"
#define HITHER_MULTIPLIER 2.0f
#define AMBIENT_MULTIPLIER 0.0099999998f
char* gWheel_actor_names[6];
int gFunk_groove_flags[30];
@ -13,7 +28,7 @@ char* gDrivable_car_names[6];
char* gYour_car_names[2][6];
char gDef_def_water_screen_name[32];
tHeadup_info gHeadup_image_info[31];
int gAllow_open_to_fail;
int gAllow_open_to_fail = 1;
br_material* gDestn_screen_mat;
br_material* gSource_screen_mat;
char* gRaces_file_names[9];
@ -182,6 +197,146 @@ void LoadGeneralParameters() {
int temp;
char s[256];
char* str;
PathCat(the_path, gApplication_path, "ACTORS");
PathCat(the_path, the_path, "PROG.ACT");
f = fopen(the_path, "rb");
if (f) {
fgets(s, 255, f);
fclose(f);
for (i = 0; i < strlen(gDecode_string); i++) {
gDecode_string[i] -= 50;
}
// trim trailing CRLF etc
while (s[0] != '\0' && s[strlen(s) - 1] < 0x20) {
s[strlen(s) - 1] = 0;
}
if (strcmp(s, gDecode_string) == 0) {
gDecode_thing = 0;
printf("Expecting decrypted text files!\n");
}
for (i = 0; i < strlen(gDecode_string); i++) {
gDecode_string[i] -= 50;
}
}
PathCat(the_path, gApplication_path, "GENERAL.TXT");
f = DRfopen(the_path, "rt");
if (!f) {
FatalError(8);
}
gCamera_hither = GetAFloat(f) * HITHER_MULTIPLIER;
gCamera_yon = GetAFloat(f);
gCamera_angle = GetAFloat(f);
gAmbient_adjustment = GetAFloat(f) * AMBIENT_MULTIPLIER;
gDim_amount = GetAnInt(f);
gInitial_rank = GetAnInt(f);
GetThreeInts(f, &gInitial_credits[0], &gInitial_credits[1], &gInitial_credits[2]);
GetThreeInts(f, &gCredits_per_rank[0], &gCredits_per_rank[1], &gCredits_per_rank[2]);
gCar_crush_min_fold = GetAFloat(f);
gCar_crush_max_fold = GetAFloat(f);
gCar_crush_wibble = GetAFloat(f);
gCar_crush_limit_deviant = GetAFloat(f);
gCar_crush_split_chance = GetAFloat(f);
gCar_crush_softness = GetAFloat(f);
GetThreeFloats(f, &gRepair_cost[0], &gRepair_cost[1], &gRepair_cost[2]);
GetThreeFloats(f, &gRecovery_cost[0], &gRecovery_cost[1], &gRecovery_cost[2]);
GetThreeInts(f, &gPed_time_value[0], &gPed_time_value[1], &gPed_time_value[2]);
if (gProgram_state.sausage_eater_mode) {
for (i = 0; i < 7; i++) {
GetALineAndDontArgue(f, s);
}
GetThreeFloats(f, gCar_time_value, &gCar_time_value[1], &gCar_time_value[2]);
GetThreeFloats(f, gCar_cred_value, &gCar_cred_value[1], &gCar_cred_value[2]);
GetThreeInts(f, gWasted_time, &gWasted_time[1], &gWasted_time[2]);
GetThreeInts(f, gWasted_creds, &gWasted_creds[1], &gWasted_creds[2]);
GetThreeInts(f, gRoll_over_time, &gRoll_over_time[1], &gRoll_over_time[2]);
GetThreeInts(f, gRoll_over_creds, &gRoll_over_creds[1], &gRoll_over_creds[2]);
GetThreeInts(f, gCheck_point_cash, &gCheck_point_cash[1], &gCheck_point_cash[2]);
} else {
GetThreeFloats(f, gCar_time_value, &gCar_time_value[1], &gCar_time_value[2]);
GetThreeFloats(f, gCar_cred_value, &gCar_cred_value[1], &gCar_cred_value[2]);
GetThreeInts(f, gWasted_time, &gWasted_time[1], &gWasted_time[2]);
GetThreeInts(f, gWasted_creds, &gWasted_creds[1], &gWasted_creds[2]);
GetThreeInts(f, gRoll_over_time, &gRoll_over_time[1], &gRoll_over_time[2]);
GetThreeInts(f, gRoll_over_creds, &gRoll_over_creds[1], &gRoll_over_creds[2]);
GetThreeInts(f, gCheck_point_cash, &gCheck_point_cash[1], &gCheck_point_cash[2]);
for (i = 0; i < 7; i++) {
GetALineAndDontArgue(f, s);
}
}
GetThreeInts(f, gJump_start_fine, &gJump_start_fine[1], &gJump_start_fine[2]);
GetThreeInts(f, gPoints_per_second, &gPoints_per_second[1], &gPoints_per_second[2]);
GetThreeInts(f, gCunning_stunt_bonus, &gCunning_stunt_bonus[1], &gCunning_stunt_bonus[2]);
GetAString(f, gBasic_car_names[0]);
GetAString(f, gBasic_car_names[1]);
gKnobbled_frame_period = GetAnInt(f);
if (gKnobbled_frame_period) {
gKnobbled_frame_period = 1000 / gKnobbled_frame_period;
}
gOpponent_nastyness_frigger = GetAFloat(f);
ParseSpecialVolume(f, &gDefault_default_water_spec_vol, gDef_def_water_screen_name);
GetALineAndDontArgue(f, s);
str = strtok(s, "\t ,/");
for (i = 0; i < 5; i++) {
sscanf(str, "%d", &gInitial_net_credits[i]);
str = strtok(NULL, "\t ,/");
}
gTag_start_time = 1000 * GetAnInt(f);
gFox_start_time = 1000 * GetAnInt(f);
GetALineAndDontArgue(f, s);
str = strtok(s, "\t ,/");
for (i = 0; i < 7; i++) {
sscanf(str, "%f", &gNet_repair_cost[i]);
str = strtok(NULL, "\t ,/");
}
GetALineAndDontArgue(f, s);
str = strtok(s, "\t ,/");
for (i = 0; i < 7; i++) {
sscanf(str, "%f", &gNet_recovery_cost[i]);
str = strtok(NULL, "\t ,/");
}
GetALineAndDontArgue(f, s);
str = strtok(s, "\t ,/");
for (i = 0; i < 7; i++) {
sscanf(str, "%f", &gNet_softness[i]);
str = strtok(NULL, "\t ,/");
}
GetALineAndDontArgue(f, s);
str = strtok(s, "\t ,/");
for (i = 0; i < 7; i++) {
sscanf(str, "%f", &gNet_offensive[i]);
str = strtok(NULL, "\t ,/");
}
GetALineAndDontArgue(f, s);
str = strtok(s, "\t ,/");
for (i = 0; i < 7; i++) {
sscanf(str, "%d", &gNet_target[i]);
str = strtok(NULL, "\t ,/");
}
gMin_respawn_time = 1000 * GetAnInt(f);
gRespawn_variance = 1000 * GetAnInt(f);
gDemo_rank = GetAnInt(f);
gDemo_armour = GetAnInt(f);
gDemo_power = GetAnInt(f);
gDemo_offensive = GetAnInt(f);
for (i = 0; i < 5; i++) {
gDemo_opponents[i] = GetAnInt(f);
}
gGravity_multiplier = GetAFloat(f);
gZombie_factor = GetAFloat(f);
gCut_delay_1 = GetAFloat(f);
gCut_delay_2 = GetAFloat(f);
gCut_delay_3 = GetAFloat(f);
gCut_delay_4 = 1.0f;
fclose(f);
}
// Offset: 3472
@ -822,6 +977,11 @@ int GetAnInt(FILE* pF) {
char s[256];
char* str;
int result;
GetALineAndDontArgue(pF, s);
str = strtok(s, "\t ,/");
sscanf(str, "%d", &result);
return result;
}
// Offset: 33828
@ -831,6 +991,11 @@ float GetAFloat(FILE* pF) {
char s[256];
char* str;
float result;
GetALineAndDontArgue(pF, s);
str = strtok(s, "\t ,/");
sscanf(str, "%f", &result);
return result;
}
// Offset: 33932
@ -850,6 +1015,12 @@ float GetAFloatPercent(FILE* pF) {
void GetPairOfFloats(FILE* pF, float* pF1, float* pF2) {
char s[256];
char* str;
GetALineAndDontArgue(pF, s);
str = strtok(s, "\t ,/");
sscanf(str, "%f", pF1);
str = strtok(NULL, "\t ,/");
sscanf(str, "%f", pF2);
}
// Offset: 34172
@ -861,6 +1032,14 @@ void GetPairOfFloats(FILE* pF, float* pF1, float* pF2) {
void GetThreeFloats(FILE* pF, float* pF1, float* pF2, float* pF3) {
char s[256];
char* str;
GetALineAndDontArgue(pF, s);
str = strtok(s, "\t ,/");
sscanf(str, "%f", pF1);
str = strtok(NULL, "\t ,/");
sscanf(str, "%f", pF2);
str = strtok(NULL, "\t ,/");
sscanf(str, "%f", pF3);
}
// Offset: 34344
@ -871,6 +1050,12 @@ void GetThreeFloats(FILE* pF, float* pF1, float* pF2, float* pF3) {
void GetPairOfInts(FILE* pF, int* pF1, int* pF2) {
char s[256];
char* str;
GetALineAndDontArgue(pF, s);
str = strtok(s, "\t ,/");
sscanf(str, "%d", pF1);
str = strtok(NULL, "\t ,/");
sscanf(str, "%d", pF2);
}
// Offset: 34476
@ -882,6 +1067,14 @@ void GetPairOfInts(FILE* pF, int* pF1, int* pF2) {
void GetThreeInts(FILE* pF, int* pF1, int* pF2, int* pF3) {
char s[256];
char* str;
GetALineAndDontArgue(pF, s);
str = strtok(s, "\t ,/");
sscanf(str, "%d", pF1);
str = strtok(NULL, "\t ,/");
sscanf(str, "%d", pF2);
str = strtok(NULL, "\t ,/");
sscanf(str, "%d", pF3);
}
// Offset: 34648
@ -904,12 +1097,23 @@ void GetThreeIntsAndAString(FILE* pF, int* pF1, int* pF2, int* pF3, char* pS) {
void GetFourInts(FILE* pF, int* pF1, int* pF2, int* pF3, int* pF4) {
char s[256];
char* str;
GetALineAndDontArgue(pF, s);
str = strtok(s, "\t ,/");
sscanf(str, "%d", pF1);
str = strtok(NULL, "\t ,/");
sscanf(str, "%d", pF2);
str = strtok(NULL, "\t ,/");
sscanf(str, "%d", pF3);
str = strtok(NULL, "\t ,/");
sscanf(str, "%d", pF4);
}
// Offset: 35056
// Size: 51
// EAX: pF
br_scalar GetAScalar(FILE* pF) {
return GetAFloat(pF);
}
// Offset: 35108
@ -1000,6 +1204,10 @@ void GetThreeFloatPercents(FILE* pF, float* pF1, float* pF2, float* pF3) {
void GetAString(FILE* pF, char* pString) {
char s[256];
char* str;
GetALineAndDontArgue(pF, s);
str = strtok(s, "\t ,/");
strcpy(pString, str);
}
// Offset: 36396
@ -1048,8 +1256,89 @@ FILE* OldDRfopen(char* pFilename, char* pMode) {
tPath_name CD_dir;
tPath_name path_file;
tPath_name source_check;
static int source_exists;
static int source_exists = 1;
int len;
int c;
fp = fopen(pFilename, pMode);
if (fp) {
len = strlen(pFilename) + 1;
if (gDecode_thing != 0) {
if (strcmp(&pFilename[len - 4], ".TXT") != 0
&& strcmp(&pFilename[len - 12], "DKEYMAP0.TXT") != 0
&& strcmp(&pFilename[len - 12], "DKEYMAP1.TXT") != 0
&& strcmp(&pFilename[len - 12], "DKEYMAP2.TXT") != 0
&& strcmp(&pFilename[len - 12], "DKEYMAP3.TXT") != 0
&& strcmp(&pFilename[len - 12], "KEYMAP_0.TXT") != 0
&& strcmp(&pFilename[len - 12], "KEYMAP_1.TXT") != 0
&& strcmp(&pFilename[len - 12], "KEYMAP_2.TXT") != 0
&& strcmp(&pFilename[len - 12], "KEYMAP_3.TXT") != 0
&& strcmp(&pFilename[len - 11], "OPTIONS.TXT") != 0
&& strcmp(&pFilename[len - 12], "KEYNAMES.TXT") != 0
&& strcmp(&pFilename[len - 10], "KEYMAP.TXT") != 0
&& strcmp(&pFilename[len - 9], "PATHS.TXT") != 0
&& strcmp(&pFilename[len - 11], "PRATCAM.TXT") != 0) {
c = fgetc(fp);
if (c != gDecode_thing) {
fclose(fp);
return NULL;
}
ungetc(c, fp);
return fp;
}
}
}
if (gCD_fully_installed) {
return fp;
}
if (source_exists == 1) {
strcpy(path_file, "DATA");
strcat(path_file, gDir_separator);
strcat(path_file, "PATHS.TXT");
if (!PDCheckDriveExists(path_file)) {
source_exists = 0;
return NULL;
}
test1 = fopen(path_file, "rt");
if (!test1) {
source_exists = 0;
return NULL;
}
GetALineAndDontArgue(test1, source_check);
strcat(source_check, gDir_separator);
strcat(source_check, "DATA");
strcat(source_check, gDir_separator);
strcat(source_check, "GENERAL.TXT");
fclose(test1);
if (PDCheckDriveExists(source_check)) {
source_exists++;
} else {
PDFatalError("Carmageddon CD not in drive.");
if (gCD_fully_installed) {
source_exists = 0;
}
}
}
if (!source_exists) {
return fp;
}
data_dir = strstr(pFilename, "DATA");
if (data_dir != NULL) {
if (GetCDPathFromPathsTxtFile(CD_dir)) {
strcat(CD_dir, gDir_separator);
strcat(CD_dir, data_dir);
if (PDCheckDriveExists(CD_dir)) {
fp = fopen(CD_dir, pMode);
}
}
}
return fp;
}
// Offset: 38332
@ -1070,6 +1359,20 @@ FILE* DRfopen(char* pFilename, char* pMode) {
FILE* result;
tPath_name CD_dir;
char msg[336];
result = OldDRfopen(pFilename, pMode);
if (!result && !gAllow_open_to_fail) {
if (GetCDPathFromPathsTxtFile(CD_dir) && !PDCheckDriveExists(CD_dir)) {
if (gMisc_strings[0]) {
PDFatalError(GetMiscString(243));
} else {
PDFatalError("Could not find the Carmageddon CD");
}
sprintf(msg, "DRfopen( \"%s\", \"%s\" ) failed", pFilename, pMode);
PDFatalError(msg);
}
}
return result;
}
// Offset: 38604
@ -1083,6 +1386,7 @@ int GetCDPathFromPathsTxtFile(char* pPath_name) {
if (!got_it_already) {
sprintf(paths_txt, "%s%s%s", gApplication_path, gDir_separator, "PATHS.TXT");
printf("%s\n", paths_txt);
paths_txt_fp = fopen(paths_txt, "rt");
if (!paths_txt_fp) {
return 0;

View File

@ -1,23 +1,25 @@
#include "newgame.h"
char *gBasic_car_names[2];
char x[] = "xxxxxxxx.TXT";
char y[] = "yyyyyyyy.TXT";
char* gBasic_car_names[2] = { x, y };
tNet_game_options gNet_settings[8];
tRadio_bastards gRadio_bastards[11];
tJoinable_game gGames_to_join[6];
tNet_game_options *gOptions;
tNet_game_options* gOptions;
int gNet_target[7];
int gLast_graph_sel;
tInterface_spec *gThe_interface_spec;
tInterface_spec* gThe_interface_spec;
tNet_sequence_type gNet_race_sequence;
tNet_game_type gLast_game_type;
int gCurrent_net_game_count;
tU32 gAnne_flic_data_length;
int gShifted_default_yet;
int gNet_storage_allocated;
tU8 *gFrank_flic_data;
char *gNet_name;
tU8* gFrank_flic_data;
char* gNet_name;
tU32 gFrank_flic_data_length;
tU8 *gAnne_flic_data;
tU8* gAnne_flic_data;
int gLast_net_choose_box;
int gCurrent_game_selection;
int gRace_index;
@ -44,7 +46,7 @@ void FrankAnneStart2() {
// EDX: pCurrent_choice
// EBX: pString
// ECX: pMax_length
void GetPlayerName(int pStarting_to_type, int pCurrent_choice, char *pString, int *pMax_length) {
void GetPlayerName(int pStarting_to_type, int pCurrent_choice, char* pString, int* pMax_length) {
}
// Offset: 688
@ -94,7 +96,7 @@ int DoOnePlayerStart() {
// Size: 263
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NewNetGameUp(int *pCurrent_choice, int *pCurrent_mode) {
int NewNetGameUp(int* pCurrent_choice, int* pCurrent_mode) {
int new_sel;
int i;
}
@ -103,7 +105,7 @@ int NewNetGameUp(int *pCurrent_choice, int *pCurrent_mode) {
// Size: 263
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NewNetGameDown(int *pCurrent_choice, int *pCurrent_mode) {
int NewNetGameDown(int* pCurrent_choice, int* pCurrent_mode) {
int new_sel;
int i;
}
@ -120,7 +122,7 @@ void DisposeJoinableGame(int pIndex) {
// EDX: pY_index
// EBX: pFont_index
// ECX: pText
void DrawAnItem(int pX, int pY_index, int pFont_index, char *pText) {
void DrawAnItem(int pX, int pY_index, int pFont_index, char* pText) {
}
// Offset: 2292
@ -141,8 +143,8 @@ void DrawGames(int pCurrent_choice, int pCurrent_mode) {
int x_coord;
int y_coord;
char s[256];
char *s2;
char *s3;
char* s2;
char* s3;
}
// Offset: 4236
@ -160,7 +162,7 @@ void DisposeJoinList(int pExemption) {
// Offset: 4420
// Size: 227
// EAX: pGame
void AddToJoinList(tNet_game_details *pGame) {
void AddToJoinList(tNet_game_details* pGame) {
int i;
int slot_to_use;
tU32 this_game_ID;
@ -182,7 +184,7 @@ void NewNetStart2() {
// EDX: pCurrent_choice
// EBX: pString
// ECX: pMax_length
void NewNetGetName(int pStarting_to_type, int pCurrent_choice, char *pString, int *pMax_length) {
void NewNetGetName(int pStarting_to_type, int pCurrent_choice, char* pString, int* pMax_length) {
}
// Offset: 4888
@ -198,13 +200,13 @@ int NewNetDone(int pCurrent_choice, int pCurrent_mode, int pGo_ahead, int pEscap
// Size: 72
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NewNetGoAhead(int *pCurrent_choice, int *pCurrent_mode) {
int NewNetGoAhead(int* pCurrent_choice, int* pCurrent_mode) {
}
// Offset: 5032
// Size: 287
// EAX: pGame_to_join
tJoin_or_host_result JoinOrHostGame(tNet_game_details **pGame_to_join) {
tJoin_or_host_result JoinOrHostGame(tNet_game_details** pGame_to_join) {
static tFlicette flicker_on[2];
static tFlicette flicker_off[2];
static tFlicette push[2];
@ -217,13 +219,13 @@ tJoin_or_host_result JoinOrHostGame(tNet_game_details **pGame_to_join) {
// Offset: 5320
// Size: 223
// EAX: pGame_options
void GetNetOptions(tNet_game_options *pGame_options) {
void GetNetOptions(tNet_game_options* pGame_options) {
}
// Offset: 5544
// Size: 234
// EAX: pGame_options
void SetNetOptions(tNet_game_options *pGame_options) {
void SetNetOptions(tNet_game_options* pGame_options) {
}
// Offset: 5780
@ -301,7 +303,7 @@ void NetCheckboxChanged(int pIndex) {
// Size: 153
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NetOptLeft(int *pCurrent_choice, int *pCurrent_mode) {
int NetOptLeft(int* pCurrent_choice, int* pCurrent_mode) {
int new_value;
}
@ -309,7 +311,7 @@ int NetOptLeft(int *pCurrent_choice, int *pCurrent_mode) {
// Size: 157
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NetOptRight(int *pCurrent_choice, int *pCurrent_mode) {
int NetOptRight(int* pCurrent_choice, int* pCurrent_mode) {
int new_value;
}
@ -317,14 +319,14 @@ int NetOptRight(int *pCurrent_choice, int *pCurrent_mode) {
// Size: 148
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NetOptUp(int *pCurrent_choice, int *pCurrent_mode) {
int NetOptUp(int* pCurrent_choice, int* pCurrent_mode) {
}
// Offset: 7300
// Size: 148
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NetOptDown(int *pCurrent_choice, int *pCurrent_mode) {
int NetOptDown(int* pCurrent_choice, int* pCurrent_mode) {
}
// Offset: 7448
@ -333,14 +335,14 @@ int NetOptDown(int *pCurrent_choice, int *pCurrent_mode) {
// EDX: pCurrent_mode
// EBX: pX_offset
// ECX: pY_offset
int NetRadioClick(int *pCurrent_choice, int *pCurrent_mode, int pX_offset, int pY_offset) {
int NetRadioClick(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset) {
int i;
}
// Offset: 7664
// Size: 142
void RevertToDefaults() {
FILE *f;
FILE* f;
tNet_game_options net_options;
int i;
}
@ -348,7 +350,7 @@ void RevertToDefaults() {
// Offset: 7808
// Size: 156
void DefaultNetSettings() {
FILE *f;
FILE* f;
int i;
}
@ -356,7 +358,7 @@ void DefaultNetSettings() {
// Size: 98
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NetOptGoAhead(int *pCurrent_choice, int *pCurrent_mode) {
int NetOptGoAhead(int* pCurrent_choice, int* pCurrent_mode) {
}
// Offset: 8064
@ -388,7 +390,7 @@ void DrawNetOptBox(int pCurrent_choice, int pCurrent_mode) {
// Offset: 8448
// Size: 111
// EAX: pGame_options
void DoNetOptions(tNet_game_options *pGame_options) {
void DoNetOptions(tNet_game_options* pGame_options) {
static tFlicette flicker_on[14];
static tFlicette flicker_off[14];
static tFlicette push[14];
@ -400,7 +402,7 @@ void DoNetOptions(tNet_game_options *pGame_options) {
// Size: 190
// EAX: pGame_type
// EDX: pGame_options
void SetOptions(tNet_game_type pGame_type, tNet_game_options *pGame_options) {
void SetOptions(tNet_game_type pGame_type, tNet_game_options* pGame_options) {
}
// Offset: 8992
@ -412,7 +414,7 @@ void DrawNetChooseInitial() {
// Size: 250
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NetChooseGoAhead(int *pCurrent_choice, int *pCurrent_mode) {
int NetChooseGoAhead(int* pCurrent_choice, int* pCurrent_mode) {
}
// Offset: 9288
@ -440,7 +442,7 @@ void EraseAGraphBox(int pIndex) {
// EDX: pCurrent_mode
void DrawNetChoose(int pCurrent_choice, int pCurrent_mode) {
char s[256];
tU32 *k;
tU32* k;
int i;
}
@ -448,14 +450,14 @@ void DrawNetChoose(int pCurrent_choice, int pCurrent_mode) {
// Size: 61
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NetChooseLR(int *pCurrent_choice, int *pCurrent_mode) {
int NetChooseLR(int* pCurrent_choice, int* pCurrent_mode) {
}
// Offset: 10356
// Size: 190
// EAX: pGame_type
// EDX: pGame_options
void SetGameTarget(tNet_game_type *pGame_type, tNet_game_options *pGame_options) {
void SetGameTarget(tNet_game_type* pGame_type, tNet_game_options* pGame_options) {
}
// Offset: 10548
@ -463,7 +465,7 @@ void SetGameTarget(tNet_game_type *pGame_type, tNet_game_options *pGame_options)
// EAX: pGame_type
// EDX: pGame_options
// EBX: pRace_index
int NetGameChoices(tNet_game_type *pGame_type, tNet_game_options *pGame_options, int *pRace_index) {
int NetGameChoices(tNet_game_type* pGame_type, tNet_game_options* pGame_options, int* pRace_index) {
static tFlicette flicker_on[11];
static tFlicette flicker_off[11];
static tFlicette push[11];
@ -477,26 +479,26 @@ int NetGameChoices(tNet_game_type *pGame_type, tNet_game_options *pGame_options,
// EAX: pGame_type
// EDX: pGame_options
// EBX: pRace_index
void ReadNetGameChoices(tNet_game_type *pGame_type, tNet_game_options *pGame_options, int *pRace_index) {
void ReadNetGameChoices(tNet_game_type* pGame_type, tNet_game_options* pGame_options, int* pRace_index) {
}
// Offset: 11028
// Size: 56
// EAX: pRank
int ChooseStartRace(int *pRank) {
int ChooseStartRace(int* pRank) {
}
// Offset: 11084
// Size: 63
// EAX: pNet_game
void SetUpOtherNetThings(tNet_game_details *pNet_game) {
void SetUpOtherNetThings(tNet_game_details* pNet_game) {
}
// Offset: 11148
// Size: 97
// EAX: pNet_game
void RequestCarDetails(tNet_game_details *pNet_game) {
tNet_message *message;
void RequestCarDetails(tNet_game_details* pNet_game) {
tNet_message* message;
}
// Offset: 11248
@ -509,13 +511,13 @@ int PickARandomCar() {
// Offset: 11432
// Size: 54
// EAX: pNet_game
void PollCarDetails(tNet_game_details *pNet_game) {
void PollCarDetails(tNet_game_details* pNet_game) {
}
// Offset: 11488
// Size: 278
// EAX: pOptions
void SetNetAvailability(tNet_game_options *pOptions) {
void SetNetAvailability(tNet_game_options* pOptions) {
int i;
}
@ -525,7 +527,7 @@ void SetNetAvailability(tNet_game_options *pOptions) {
// EDX: pOptions
// EBX: pCar_index
// ECX: pIm_the_host_so_fuck_off
int ChooseNetCar(tNet_game_details *pNet_game, tNet_game_options *pOptions, int *pCar_index, int pIm_the_host_so_fuck_off) {
int ChooseNetCar(tNet_game_details* pNet_game, tNet_game_options* pOptions, int* pCar_index, int pIm_the_host_so_fuck_off) {
tS32 start_time;
int i;
int result;
@ -546,12 +548,11 @@ void DisposeNetStorageSpace() {
// Offset: 12344
// Size: 793
int DoMultiPlayerStart() {
tNet_game_details *game_to_join;
tNet_game_details* game_to_join;
char s[256];
char *s2;
char* s2;
tNet_game_type new_game_type;
tNet_game_options new_game_options;
int start_rank;
int car_index;
}

View File

@ -1,8 +1,31 @@
#ifndef _NEWGAME_H_
#define _NEWGAME_H_
#include "dr_types.h"
#include "br_types.h"
#include "dr_types.h"
extern char* gBasic_car_names[2];
extern tNet_game_options gNet_settings[8];
extern tRadio_bastards gRadio_bastards[11];
extern tJoinable_game gGames_to_join[6];
extern tNet_game_options* gOptions;
extern int gNet_target[7];
extern int gLast_graph_sel;
extern tInterface_spec* gThe_interface_spec;
extern tNet_sequence_type gNet_race_sequence;
extern tNet_game_type gLast_game_type;
extern int gCurrent_net_game_count;
extern tU32 gAnne_flic_data_length;
extern int gShifted_default_yet;
extern int gNet_storage_allocated;
extern tU8* gFrank_flic_data;
extern char* gNet_name;
extern tU32 gFrank_flic_data_length;
extern tU8* gAnne_flic_data;
extern int gLast_net_choose_box;
extern int gCurrent_game_selection;
extern int gRace_index;
extern int gRadio_selected;
// Offset: 0
// Size: 149
@ -22,7 +45,7 @@ void FrankAnneStart2();
// EDX: pCurrent_choice
// EBX: pString
// ECX: pMax_length
void GetPlayerName(int pStarting_to_type, int pCurrent_choice, char *pString, int *pMax_length);
void GetPlayerName(int pStarting_to_type, int pCurrent_choice, char* pString, int* pMax_length);
// Offset: 688
// Size: 203
@ -54,13 +77,13 @@ int DoOnePlayerStart();
// Size: 263
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NewNetGameUp(int *pCurrent_choice, int *pCurrent_mode);
int NewNetGameUp(int* pCurrent_choice, int* pCurrent_mode);
// Offset: 1832
// Size: 263
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NewNetGameDown(int *pCurrent_choice, int *pCurrent_mode);
int NewNetGameDown(int* pCurrent_choice, int* pCurrent_mode);
// Offset: 2096
// Size: 70
@ -73,7 +96,7 @@ void DisposeJoinableGame(int pIndex);
// EDX: pY_index
// EBX: pFont_index
// ECX: pText
void DrawAnItem(int pX, int pY_index, int pFont_index, char *pText);
void DrawAnItem(int pX, int pY_index, int pFont_index, char* pText);
// Offset: 2292
// Size: 119
@ -99,7 +122,7 @@ void DisposeJoinList(int pExemption);
// Offset: 4420
// Size: 227
// EAX: pGame
void AddToJoinList(tNet_game_details *pGame);
void AddToJoinList(tNet_game_details* pGame);
// Offset: 4648
// Size: 111
@ -115,7 +138,7 @@ void NewNetStart2();
// EDX: pCurrent_choice
// EBX: pString
// ECX: pMax_length
void NewNetGetName(int pStarting_to_type, int pCurrent_choice, char *pString, int *pMax_length);
void NewNetGetName(int pStarting_to_type, int pCurrent_choice, char* pString, int* pMax_length);
// Offset: 4888
// Size: 72
@ -129,22 +152,22 @@ int NewNetDone(int pCurrent_choice, int pCurrent_mode, int pGo_ahead, int pEscap
// Size: 72
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NewNetGoAhead(int *pCurrent_choice, int *pCurrent_mode);
int NewNetGoAhead(int* pCurrent_choice, int* pCurrent_mode);
// Offset: 5032
// Size: 287
// EAX: pGame_to_join
tJoin_or_host_result JoinOrHostGame(tNet_game_details **pGame_to_join);
tJoin_or_host_result JoinOrHostGame(tNet_game_details** pGame_to_join);
// Offset: 5320
// Size: 223
// EAX: pGame_options
void GetNetOptions(tNet_game_options *pGame_options);
void GetNetOptions(tNet_game_options* pGame_options);
// Offset: 5544
// Size: 234
// EAX: pGame_options
void SetNetOptions(tNet_game_options *pGame_options);
void SetNetOptions(tNet_game_options* pGame_options);
// Offset: 5780
// Size: 72
@ -209,25 +232,25 @@ void NetCheckboxChanged(int pIndex);
// Size: 153
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NetOptLeft(int *pCurrent_choice, int *pCurrent_mode);
int NetOptLeft(int* pCurrent_choice, int* pCurrent_mode);
// Offset: 6992
// Size: 157
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NetOptRight(int *pCurrent_choice, int *pCurrent_mode);
int NetOptRight(int* pCurrent_choice, int* pCurrent_mode);
// Offset: 7152
// Size: 148
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NetOptUp(int *pCurrent_choice, int *pCurrent_mode);
int NetOptUp(int* pCurrent_choice, int* pCurrent_mode);
// Offset: 7300
// Size: 148
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NetOptDown(int *pCurrent_choice, int *pCurrent_mode);
int NetOptDown(int* pCurrent_choice, int* pCurrent_mode);
// Offset: 7448
// Size: 213
@ -235,7 +258,7 @@ int NetOptDown(int *pCurrent_choice, int *pCurrent_mode);
// EDX: pCurrent_mode
// EBX: pX_offset
// ECX: pY_offset
int NetRadioClick(int *pCurrent_choice, int *pCurrent_mode, int pX_offset, int pY_offset);
int NetRadioClick(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset);
// Offset: 7664
// Size: 142
@ -249,7 +272,7 @@ void DefaultNetSettings();
// Size: 98
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NetOptGoAhead(int *pCurrent_choice, int *pCurrent_mode);
int NetOptGoAhead(int* pCurrent_choice, int* pCurrent_mode);
// Offset: 8064
// Size: 202
@ -276,13 +299,13 @@ void DrawNetOptBox(int pCurrent_choice, int pCurrent_mode);
// Offset: 8448
// Size: 111
// EAX: pGame_options
void DoNetOptions(tNet_game_options *pGame_options);
void DoNetOptions(tNet_game_options* pGame_options);
// Offset: 8560
// Size: 190
// EAX: pGame_type
// EDX: pGame_options
void SetOptions(tNet_game_type pGame_type, tNet_game_options *pGame_options);
void SetOptions(tNet_game_type pGame_type, tNet_game_options* pGame_options);
// Offset: 8992
// Size: 44
@ -292,7 +315,7 @@ void DrawNetChooseInitial();
// Size: 250
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NetChooseGoAhead(int *pCurrent_choice, int *pCurrent_mode);
int NetChooseGoAhead(int* pCurrent_choice, int* pCurrent_mode);
// Offset: 9288
// Size: 182
@ -320,42 +343,42 @@ void DrawNetChoose(int pCurrent_choice, int pCurrent_mode);
// Size: 61
// EAX: pCurrent_choice
// EDX: pCurrent_mode
int NetChooseLR(int *pCurrent_choice, int *pCurrent_mode);
int NetChooseLR(int* pCurrent_choice, int* pCurrent_mode);
// Offset: 10356
// Size: 190
// EAX: pGame_type
// EDX: pGame_options
void SetGameTarget(tNet_game_type *pGame_type, tNet_game_options *pGame_options);
void SetGameTarget(tNet_game_type* pGame_type, tNet_game_options* pGame_options);
// Offset: 10548
// Size: 383
// EAX: pGame_type
// EDX: pGame_options
// EBX: pRace_index
int NetGameChoices(tNet_game_type *pGame_type, tNet_game_options *pGame_options, int *pRace_index);
int NetGameChoices(tNet_game_type* pGame_type, tNet_game_options* pGame_options, int* pRace_index);
// Offset: 10932
// Size: 95
// EAX: pGame_type
// EDX: pGame_options
// EBX: pRace_index
void ReadNetGameChoices(tNet_game_type *pGame_type, tNet_game_options *pGame_options, int *pRace_index);
void ReadNetGameChoices(tNet_game_type* pGame_type, tNet_game_options* pGame_options, int* pRace_index);
// Offset: 11028
// Size: 56
// EAX: pRank
int ChooseStartRace(int *pRank);
int ChooseStartRace(int* pRank);
// Offset: 11084
// Size: 63
// EAX: pNet_game
void SetUpOtherNetThings(tNet_game_details *pNet_game);
void SetUpOtherNetThings(tNet_game_details* pNet_game);
// Offset: 11148
// Size: 97
// EAX: pNet_game
void RequestCarDetails(tNet_game_details *pNet_game);
void RequestCarDetails(tNet_game_details* pNet_game);
// Offset: 11248
// Size: 181
@ -364,12 +387,12 @@ int PickARandomCar();
// Offset: 11432
// Size: 54
// EAX: pNet_game
void PollCarDetails(tNet_game_details *pNet_game);
void PollCarDetails(tNet_game_details* pNet_game);
// Offset: 11488
// Size: 278
// EAX: pOptions
void SetNetAvailability(tNet_game_options *pOptions);
void SetNetAvailability(tNet_game_options* pOptions);
// Offset: 11768
// Size: 396
@ -377,7 +400,7 @@ void SetNetAvailability(tNet_game_options *pOptions);
// EDX: pOptions
// EBX: pCar_index
// ECX: pIm_the_host_so_fuck_off
int ChooseNetCar(tNet_game_details *pNet_game, tNet_game_options *pOptions, int *pCar_index, int pIm_the_host_so_fuck_off);
int ChooseNetCar(tNet_game_details* pNet_game, tNet_game_options* pOptions, int* pCar_index, int pIm_the_host_so_fuck_off);
// Offset: 12164
// Size: 115

View File

@ -1,20 +1,22 @@
#ifndef _OPPONENT_H_
#define _OPPONENT_H_
#include "dr_types.h"
#include "br_types.h"
#include "dr_types.h"
extern float gOpponent_nastyness_frigger;
// Offset: 0
// Size: 137
// EAX: pThe_actor
// EDX: pThe_vector
void PointActorAlongThisBloodyVector(br_actor *pThe_actor, br_vector3 *pThe_vector);
void PointActorAlongThisBloodyVector(br_actor* pThe_actor, br_vector3* pThe_vector);
// Offset: 140
// Size: 301
// EAX: pOpponent_spec
// EDX: pCommand
void ProcessCurrentObjective(tOpponent_spec *pOpponent_spec, tProcess_objective_command pCommand);
void ProcessCurrentObjective(tOpponent_spec* pOpponent_spec, tProcess_objective_command pCommand);
// Offset: 444
// Size: 190
@ -30,13 +32,13 @@ tS16 ReallocExtraPathSections(int pHow_many_then);
// Size: 186
// EAX: pFrom
// EDX: pTo
int PointVisibleFromHere(br_vector3 *pFrom, br_vector3 *pTo);
int PointVisibleFromHere(br_vector3* pFrom, br_vector3* pTo);
// Offset: 1012
// Size: 276
// EAX: pActor_coords
// EDX: pDistance
tS16 FindNearestPathNode(br_vector3 *pActor_coords, br_scalar *pDistance);
tS16 FindNearestPathNode(br_vector3* pActor_coords, br_scalar* pDistance);
// Offset: 1288
// Size: 66
@ -44,7 +46,7 @@ tS16 FindNearestPathNode(br_vector3 *pActor_coords, br_scalar *pDistance);
// EDX: pPath_direction
// EBX: pIntersect
// ECX: pDistance
tS16 FindNearestPathSection(br_vector3 *pActor_coords, br_vector3 *pPath_direction, br_vector3 *pIntersect, br_scalar *pDistance);
tS16 FindNearestPathSection(br_vector3* pActor_coords, br_vector3* pPath_direction, br_vector3* pIntersect, br_scalar* pDistance);
// Offset: 1356
// Size: 1187
@ -52,37 +54,37 @@ tS16 FindNearestPathSection(br_vector3 *pActor_coords, br_vector3 *pPath_directi
// EDX: pActor_coords
// EBX: pPath_direction
// ECX: pIntersect
tS16 FindNearestGeneralSection(tCar_spec *pPursuee, br_vector3 *pActor_coords, br_vector3 *pPath_direction, br_vector3 *pIntersect, br_scalar *pDistance);
tS16 FindNearestGeneralSection(tCar_spec* pPursuee, br_vector3* pActor_coords, br_vector3* pPath_direction, br_vector3* pIntersect, br_scalar* pDistance);
// Offset: 2544
// Size: 171
// EAX: pCar_spec
void DeadStopCar(tCar_spec *pCar_spec);
void DeadStopCar(tCar_spec* pCar_spec);
// Offset: 2716
// Size: 69
// EAX: pOpponent_spec
void TurnOpponentPhysicsOn(tOpponent_spec *pOpponent_spec);
void TurnOpponentPhysicsOn(tOpponent_spec* pOpponent_spec);
// Offset: 2788
// Size: 80
// EAX: pOpponent_spec
void TurnOpponentPhysicsOff(tOpponent_spec *pOpponent_spec);
void TurnOpponentPhysicsOff(tOpponent_spec* pOpponent_spec);
// Offset: 2868
// Size: 247
void NewObjective(tOpponent_spec *pOpponent_spec, tOpponent_objective_type pObjective_type, ...);
void NewObjective(tOpponent_spec* pOpponent_spec, tOpponent_objective_type pObjective_type, ...);
// Offset: 3116
// Size: 929
// EAX: pOpponent_spec
void CalcRaceRoute(tOpponent_spec *pOpponent_spec);
void CalcRaceRoute(tOpponent_spec* pOpponent_spec);
// Offset: 4048
// Size: 790
// EAX: pOpponent_spec
// EDX: pSections_to_add
void TopUpRandomRoute(tOpponent_spec *pOpponent_spec, int pSections_to_add);
void TopUpRandomRoute(tOpponent_spec* pOpponent_spec, int pSections_to_add);
// Offset: 4840
// Size: 942
@ -90,63 +92,63 @@ void TopUpRandomRoute(tOpponent_spec *pOpponent_spec, int pSections_to_add);
// EDX: pPerm_store
// EBX: pNum_of_perm_store_sections
// ECX: pTarget_section
int SearchForSection(tRoute_section *pTemp_store, tRoute_section *pPerm_store, int *pNum_of_perm_store_sections, tS16 pTarget_section, int pDepth, br_scalar pDistance_so_far, tOpponent_spec *pOpponent_spec);
int SearchForSection(tRoute_section* pTemp_store, tRoute_section* pPerm_store, int* pNum_of_perm_store_sections, tS16 pTarget_section, int pDepth, br_scalar pDistance_so_far, tOpponent_spec* pOpponent_spec);
// Offset: 5784
// Size: 796
// EAX: pOpponent_spec
// EDX: pPlayer
void CalcGetNearPlayerRoute(tOpponent_spec *pOpponent_spec, tCar_spec *pPlayer);
void CalcGetNearPlayerRoute(tOpponent_spec* pOpponent_spec, tCar_spec* pPlayer);
// Offset: 6580
// Size: 575
// EAX: pOpponent_spec
void CalcReturnToStartPointRoute(tOpponent_spec *pOpponent_spec);
void CalcReturnToStartPointRoute(tOpponent_spec* pOpponent_spec);
// Offset: 7156
// Size: 47
// EAX: pOpponent_spec
void ClearOpponentsProjectedRoute(tOpponent_spec *pOpponent_spec);
void ClearOpponentsProjectedRoute(tOpponent_spec* pOpponent_spec);
// Offset: 7204
// Size: 114
// EAX: pOpponent_spec
// EDX: pSection_no
// EBX: pDirection
int AddToOpponentsProjectedRoute(tOpponent_spec *pOpponent_spec, tS16 pSection_no, int pDirection);
int AddToOpponentsProjectedRoute(tOpponent_spec* pOpponent_spec, tS16 pSection_no, int pDirection);
// Offset: 7320
// Size: 177
// EAX: pOpponent_spec
// EDX: pPlaces
int ShiftOpponentsProjectedRoute(tOpponent_spec *pOpponent_spec, int pPlaces);
int ShiftOpponentsProjectedRoute(tOpponent_spec* pOpponent_spec, int pPlaces);
// Offset: 7500
// Size: 134
// EAX: pOpponent_spec
// EDX: pMilliseconds
void StunTheBugger(tOpponent_spec *pOpponent_spec, int pMilliseconds);
void StunTheBugger(tOpponent_spec* pOpponent_spec, int pMilliseconds);
// Offset: 7636
// Size: 47
// EAX: pOpponent_spec
void UnStunTheBugger(tOpponent_spec *pOpponent_spec);
void UnStunTheBugger(tOpponent_spec* pOpponent_spec);
// Offset: 7684
// Size: 436
// EAX: pOpponent_spec
// EDX: pCommand
void ProcessCompleteRace(tOpponent_spec *pOpponent_spec, tProcess_objective_command pCommand);
void ProcessCompleteRace(tOpponent_spec* pOpponent_spec, tProcess_objective_command pCommand);
// Offset: 8120
// Size: 337
// EAX: pPursuee
void StartRecordingTrail(tCar_spec *pPursuee);
void StartRecordingTrail(tCar_spec* pPursuee);
// Offset: 8460
// Size: 1039
// EAX: pPursuee
void RecordNextTrailNode(tCar_spec *pPursuee);
void RecordNextTrailNode(tCar_spec* pPursuee);
// Offset: 9500
// Size: 78
@ -154,102 +156,102 @@ void RecordNextTrailNode(tCar_spec *pPursuee);
// EDX: pPursuee
// EBX: pSection_v
// ECX: pIntersect
tS16 FindNearestTrailSection(tOpponent_spec *pOpponent_spec, tCar_spec *pPursuee, br_vector3 *pSection_v, br_vector3 *pIntersect, br_scalar *pDistance);
tS16 FindNearestTrailSection(tOpponent_spec* pOpponent_spec, tCar_spec* pPursuee, br_vector3* pSection_v, br_vector3* pIntersect, br_scalar* pDistance);
// Offset: 9580
// Size: 111
// EAX: pOpponent_spec
// EDX: pSection
tS16 CalcNextTrailSection(tOpponent_spec *pOpponent_spec, int pSection);
tS16 CalcNextTrailSection(tOpponent_spec* pOpponent_spec, int pSection);
// Offset: 9692
// Size: 2515
// EAX: pOpponent_spec
// EDX: pCommand
void ProcessPursueAndTwat(tOpponent_spec *pOpponent_spec, tProcess_objective_command pCommand);
void ProcessPursueAndTwat(tOpponent_spec* pOpponent_spec, tProcess_objective_command pCommand);
// Offset: 12208
// Size: 638
// EAX: pOpponent_spec
// EDX: pCommand
void ProcessRunAway(tOpponent_spec *pOpponent_spec, tProcess_objective_command pCommand);
void ProcessRunAway(tOpponent_spec* pOpponent_spec, tProcess_objective_command pCommand);
// Offset: 12848
// Size: 126
// EAX: pOpponent_spec
// EDX: pCommand
void ProcessWaitForSomeHaplessSod(tOpponent_spec *pOpponent_spec, tProcess_objective_command pCommand);
void ProcessWaitForSomeHaplessSod(tOpponent_spec* pOpponent_spec, tProcess_objective_command pCommand);
// Offset: 12976
// Size: 629
// EAX: pOpponent_spec
// EDX: pCommand
void ProcessReturnToStart(tOpponent_spec *pOpponent_spec, tProcess_objective_command pCommand);
void ProcessReturnToStart(tOpponent_spec* pOpponent_spec, tProcess_objective_command pCommand);
// Offset: 13608
// Size: 921
// EAX: pOpponent_spec
// EDX: pCommand
void ProcessLevitate(tOpponent_spec *pOpponent_spec, tProcess_objective_command pCommand);
void ProcessLevitate(tOpponent_spec* pOpponent_spec, tProcess_objective_command pCommand);
// Offset: 14532
// Size: 543
// EAX: pOpponent_spec
// EDX: pCommand
void ProcessGetNearPlayer(tOpponent_spec *pOpponent_spec, tProcess_objective_command pCommand);
void ProcessGetNearPlayer(tOpponent_spec* pOpponent_spec, tProcess_objective_command pCommand);
// Offset: 15076
// Size: 230
// EAX: pOpponent_spec
// EDX: pCommand
void ProcessFrozen(tOpponent_spec *pOpponent_spec, tProcess_objective_command pCommand);
void ProcessFrozen(tOpponent_spec* pOpponent_spec, tProcess_objective_command pCommand);
// Offset: 15308
// Size: 355
// EAX: pOpponent_spec
int HeadOnWithPlayerPossible(tOpponent_spec *pOpponent_spec);
int HeadOnWithPlayerPossible(tOpponent_spec* pOpponent_spec);
// Offset: 15664
// Size: 88
// EAX: pOpponent_spec
// EDX: pPursuee
int AlreadyPursuingCar(tOpponent_spec *pOpponent_spec, tCar_spec *pPursuee);
int AlreadyPursuingCar(tOpponent_spec* pOpponent_spec, tCar_spec* pPursuee);
// Offset: 15752
// Size: 97
// EAX: pOpponent_spec
int LastTwatteeAPlayer(tOpponent_spec *pOpponent_spec);
int LastTwatteeAPlayer(tOpponent_spec* pOpponent_spec);
// Offset: 15852
// Size: 97
// EAX: pOpponent_spec
int LastTwatterAPlayer(tOpponent_spec *pOpponent_spec);
int LastTwatterAPlayer(tOpponent_spec* pOpponent_spec);
// Offset: 15952
// Size: 130
// EAX: pOpponent_spec
void ObjectiveComplete(tOpponent_spec *pOpponent_spec);
void ObjectiveComplete(tOpponent_spec* pOpponent_spec);
// Offset: 16084
// Size: 542
// EAX: pOpponent_spec
void TeleportOpponentToNearestSafeLocation(tOpponent_spec *pOpponent_spec);
void TeleportOpponentToNearestSafeLocation(tOpponent_spec* pOpponent_spec);
// Offset: 16628
// Size: 4057
// EAX: pOpponent_spec
// EDX: pMust_choose_one
void ChooseNewObjective(tOpponent_spec *pOpponent_spec, int pMust_choose_one);
void ChooseNewObjective(tOpponent_spec* pOpponent_spec, int pMust_choose_one);
// Offset: 20688
// Size: 365
// EAX: pOpponent_spec
void ProcessThisOpponent(tOpponent_spec *pOpponent_spec);
void ProcessThisOpponent(tOpponent_spec* pOpponent_spec);
// Offset: 21056
// Size: 256
// EAX: pPoint
int IsNetCarActive(br_vector3 *pPoint);
int IsNetCarActive(br_vector3* pPoint);
// Offset: 21312
// Size: 692
@ -262,53 +264,53 @@ void ForceRebuildActiveCarList();
// Offset: 22064
// Size: 138
// EAX: pOpponent_spec
void StartToCheat(tOpponent_spec *pOpponent_spec);
void StartToCheat(tOpponent_spec* pOpponent_spec);
// Offset: 22204
// Size: 138
// EAX: pOpponent_spec
void OiStopCheating(tOpponent_spec *pOpponent_spec);
void OiStopCheating(tOpponent_spec* pOpponent_spec);
// Offset: 22344
// Size: 326
// EAX: pOpponent_spec
int TeleportCopToStart(tOpponent_spec *pOpponent_spec);
int TeleportCopToStart(tOpponent_spec* pOpponent_spec);
// Offset: 22672
// Size: 139
// EAX: pOpponent_spec
void CalcDistanceFromHome(tOpponent_spec *pOpponent_spec);
void CalcDistanceFromHome(tOpponent_spec* pOpponent_spec);
// Offset: 22812
// Size: 767
// EAX: pOpponent_spec
// EDX: pMassage_count
int MassageOpponentPosition(tOpponent_spec *pOpponent_spec, int pMassage_count);
int MassageOpponentPosition(tOpponent_spec* pOpponent_spec, int pMassage_count);
// Offset: 23580
// Size: 821
// EAX: pOpponent_spec
int RematerialiseOpponentOnThisSection(tOpponent_spec *pOpponent_spec, br_scalar pSpeed, tS16 pSection_no);
int RematerialiseOpponentOnThisSection(tOpponent_spec* pOpponent_spec, br_scalar pSpeed, tS16 pSection_no);
// Offset: 24404
// Size: 482
// EAX: pOpponent_spec
int RematerialiseOpponentOnNearestSection(tOpponent_spec *pOpponent_spec, br_scalar pSpeed);
int RematerialiseOpponentOnNearestSection(tOpponent_spec* pOpponent_spec, br_scalar pSpeed);
// Offset: 24888
// Size: 2365
// EAX: pOpponent_spec
int RematerialiseOpponent(tOpponent_spec *pOpponent_spec, br_scalar pSpeed);
int RematerialiseOpponent(tOpponent_spec* pOpponent_spec, br_scalar pSpeed);
// Offset: 27256
// Size: 434
// EAX: pOpponent_spec
void CalcPlayerConspicuousness(tOpponent_spec *pOpponent_spec);
void CalcPlayerConspicuousness(tOpponent_spec* pOpponent_spec);
// Offset: 27692
// Size: 192
// EAX: pOpponent_spec
void CalcOpponentConspicuousnessWithAViewToCheatingLikeFuck(tOpponent_spec *pOpponent_spec);
void CalcOpponentConspicuousnessWithAViewToCheatingLikeFuck(tOpponent_spec* pOpponent_spec);
// Offset: 27884
// Size: 52
@ -323,7 +325,7 @@ void LoadCopCars();
// Offset: 28168
// Size: 2460
// EAX: pF
void LoadInOppoPaths(FILE *pF);
void LoadInOppoPaths(FILE* pF);
// Offset: 30628
// Size: 153
@ -341,7 +343,7 @@ void SetInitialCopPositions();
// Offset: 31988
// Size: 2545
// EAX: pRace_info
void InitOpponents(tRace_info *pRace_info);
void InitOpponents(tRace_info* pRace_info);
// Offset: 34536
// Size: 142
@ -355,7 +357,7 @@ void WakeUpOpponentsToTheFactThatTheStartHasBeenJumped(int pWhat_the_countdown_w
// Offset: 34992
// Size: 91
// EAX: pCar_spec
void ReportMurderToPoliceDepartment(tCar_spec *pCar_spec);
void ReportMurderToPoliceDepartment(tCar_spec* pCar_spec);
// Offset: 35084
// Size: 178
@ -377,7 +379,7 @@ char* GetDriverName(tVehicle_type pCategory, int pIndex);
// Offset: 35676
// Size: 240
// EAX: pCar_spec
tOpponent_spec* GetOpponentSpecFromCarSpec(tCar_spec *pCar_spec);
tOpponent_spec* GetOpponentSpecFromCarSpec(tCar_spec* pCar_spec);
// Offset: 35916
// Size: 113
@ -388,62 +390,62 @@ tCar_spec* GetCarSpecFromGlobalOppoIndex(int pIndex);
// Size: 95
// EAX: pOpponent_spec
// EDX: pSection_no
int GetOpponentsRealSection(tOpponent_spec *pOpponent_spec, int pSection_no);
int GetOpponentsRealSection(tOpponent_spec* pOpponent_spec, int pSection_no);
// Offset: 36128
// Size: 106
// EAX: pOpponent_spec
int GetOpponentsFirstSection(tOpponent_spec *pOpponent_spec);
int GetOpponentsFirstSection(tOpponent_spec* pOpponent_spec);
// Offset: 36236
// Size: 185
// EAX: pOpponent_spec
// EDX: pCurrent_section
int GetOpponentsNextSection(tOpponent_spec *pOpponent_spec, tS16 pCurrent_section);
int GetOpponentsNextSection(tOpponent_spec* pOpponent_spec, tS16 pCurrent_section);
// Offset: 36424
// Size: 239
// EAX: pOpponent_spec
// EDX: pSection
tS16 GetOpponentsSectionStartNode(tOpponent_spec *pOpponent_spec, tS16 pSection);
tS16 GetOpponentsSectionStartNode(tOpponent_spec* pOpponent_spec, tS16 pSection);
// Offset: 36664
// Size: 185
// EAX: pOpponent_spec
// EDX: pSection
tS16 GetOpponentsSectionFinishNode(tOpponent_spec *pOpponent_spec, tS16 pSection);
tS16 GetOpponentsSectionFinishNode(tOpponent_spec* pOpponent_spec, tS16 pSection);
// Offset: 36852
// Size: 284
// EAX: pOpponent_spec
// EDX: pSection
br_vector3* GetOpponentsSectionStartNodePoint(tOpponent_spec *pOpponent_spec, tS16 pSection);
br_vector3* GetOpponentsSectionStartNodePoint(tOpponent_spec* pOpponent_spec, tS16 pSection);
// Offset: 37136
// Size: 266
// EAX: pOpponent_spec
// EDX: pSection
br_vector3* GetOpponentsSectionFinishNodePoint(tOpponent_spec *pOpponent_spec, tS16 pSection);
br_vector3* GetOpponentsSectionFinishNodePoint(tOpponent_spec* pOpponent_spec, tS16 pSection);
// Offset: 37404
// Size: 165
// EAX: pOpponent_spec
// EDX: pSection
br_scalar GetOpponentsSectionWidth(tOpponent_spec *pOpponent_spec, tS16 pSection);
br_scalar GetOpponentsSectionWidth(tOpponent_spec* pOpponent_spec, tS16 pSection);
// Offset: 37572
// Size: 262
// EAX: pOpponent_spec
// EDX: pSection
// EBX: pTowards_finish
int GetOpponentsSectionMinSpeed(tOpponent_spec *pOpponent_spec, tS16 pSection, int pTowards_finish);
int GetOpponentsSectionMinSpeed(tOpponent_spec* pOpponent_spec, tS16 pSection, int pTowards_finish);
// Offset: 37836
// Size: 262
// EAX: pOpponent_spec
// EDX: pSection
// EBX: pTowards_finish
int GetOpponentsSectionMaxSpeed(tOpponent_spec *pOpponent_spec, tS16 pSection, int pTowards_finish);
int GetOpponentsSectionMaxSpeed(tOpponent_spec* pOpponent_spec, tS16 pSection, int pTowards_finish);
// Offset: 38100
// Size: 59
@ -453,19 +455,19 @@ void InitOpponentPsyche(int pOpponent_index);
// Offset: 38160
// Size: 108
// EAX: pOpponent_spec
void ClearTwattageOccurrenceVariables(tOpponent_spec *pOpponent_spec);
void ClearTwattageOccurrenceVariables(tOpponent_spec* pOpponent_spec);
// Offset: 38268
// Size: 86
// EAX: pA_car
// EDX: pAnother_car
void TwoCarsHitEachOther(tCar_spec *pA_car, tCar_spec *pAnother_car);
void TwoCarsHitEachOther(tCar_spec* pA_car, tCar_spec* pAnother_car);
// Offset: 38356
// Size: 1166
// EAX: pTwatter
// EDX: pTwattee
void RecordOpponentTwattageOccurrence(tCar_spec *pTwatter, tCar_spec *pTwattee);
void RecordOpponentTwattageOccurrence(tCar_spec* pTwatter, tCar_spec* pTwattee);
// Offset: 39524
// Size: 67
@ -503,7 +505,7 @@ void DeleteOrphanNodes();
// EAX: pInserted_node
// EDX: pSection_no
// EBX: pWhere
void InsertThisNodeInThisSectionHere(tS16 pInserted_node, tS16 pSection_no, br_vector3 *pWhere);
void InsertThisNodeInThisSectionHere(tS16 pInserted_node, tS16 pSection_no, br_vector3* pWhere);
// Offset: 42752
// Size: 254
@ -524,13 +526,13 @@ void RecalcNearestPathSectionWidth(br_scalar pAdjustment);
// EAX: pNegative_x_vector
// EDX: pStart
// EBX: pFinish
void CalcNegativeXVector(br_vector3 *pNegative_x_vector, br_vector3 *pStart, br_vector3 *pFinish, br_scalar pLength);
void CalcNegativeXVector(br_vector3* pNegative_x_vector, br_vector3* pStart, br_vector3* pFinish, br_scalar pLength);
// Offset: 44700
// Size: 162
// EAX: pModel
// EDX: pVertex_num
void MakeVertexAndOffsetIt(br_model *pModel, int pVertex_num, br_scalar pX, br_scalar pY, br_scalar pZ, br_vector3 *pOffset);
void MakeVertexAndOffsetIt(br_model* pModel, int pVertex_num, br_scalar pX, br_scalar pY, br_scalar pZ, br_vector3* pOffset);
// Offset: 44864
// Size: 134
@ -538,7 +540,7 @@ void MakeVertexAndOffsetIt(br_model *pModel, int pVertex_num, br_scalar pX, br_s
// EDX: pFace_num
// EBX: pV0
// ECX: pV1
void MakeFaceAndTextureIt(br_model *pModel, int pFace_num, int pV0, int pV1, int pV2, br_material *pMaterial);
void MakeFaceAndTextureIt(br_model* pModel, int pFace_num, int pV0, int pV1, int pV2, br_material* pMaterial);
// Offset: 45000
// Size: 942
@ -546,7 +548,7 @@ void MakeFaceAndTextureIt(br_model *pModel, int pFace_num, int pV0, int pV1, int
// EDX: pFirst_face
// EBX: pStart
// ECX: pFinish
void MakeSection(br_uint_16 pFirst_vertex, br_uint_16 pFirst_face, br_vector3 *pStart, br_vector3 *pFinish, br_scalar pWidth, br_material *pMaterial_centre_lt, br_material *pMaterial_centre_dk, br_material *pMaterial_edges_start_lt, br_material *pMaterial_edges_start_dk, br_material *pMaterial_edges_finish_lt, br_material *pMaterial_edges_finish_dk);
void MakeSection(br_uint_16 pFirst_vertex, br_uint_16 pFirst_face, br_vector3* pStart, br_vector3* pFinish, br_scalar pWidth, br_material* pMaterial_centre_lt, br_material* pMaterial_centre_dk, br_material* pMaterial_edges_start_lt, br_material* pMaterial_edges_start_dk, br_material* pMaterial_edges_finish_lt, br_material* pMaterial_edges_finish_dk);
// Offset: 45944
// Size: 1235
@ -554,20 +556,20 @@ void MakeSection(br_uint_16 pFirst_vertex, br_uint_16 pFirst_face, br_vector3 *p
// EDX: pFirst_face
// EBX: pPoint
// ECX: pMaterial_1
void MakeCube(br_uint_16 pFirst_vertex, br_uint_16 pFirst_face, br_vector3 *pPoint, br_material *pMaterial_1, br_material *pMaterial_2, br_material *pMaterial_3);
void MakeCube(br_uint_16 pFirst_vertex, br_uint_16 pFirst_face, br_vector3* pPoint, br_material* pMaterial_1, br_material* pMaterial_2, br_material* pMaterial_3);
// Offset: 47180
// Size: 88
// EAX: pFace_index_ptr
// EDX: pVertex_index_ptr
void CalcNumberOfFacesAndVerticesForOppoPathModel(br_uint_16 *pFace_index_ptr, br_uint_16 *pVertex_index_ptr);
void CalcNumberOfFacesAndVerticesForOppoPathModel(br_uint_16* pFace_index_ptr, br_uint_16* pVertex_index_ptr);
// Offset: 47268
// Size: 433
// EAX: pModel
// EDX: pNum_faces
// EBX: pNum_vertices
void ReallocModelFacesAndVertices(br_model *pModel, int pNum_faces, int pNum_vertices);
void ReallocModelFacesAndVertices(br_model* pModel, int pNum_faces, int pNum_vertices);
// Offset: 47704
// Size: 127

View File

@ -1,33 +1,37 @@
#ifndef _PEDESTRN_H_
#define _PEDESTRN_H_
#include "dr_types.h"
#include "br_types.h"
#include "dr_types.h"
extern int gMin_respawn_time;
extern int gRespawn_variance;
extern float gZombie_factor;
// Offset: 0
// Size: 152
// EAX: pModel
void PedModelUpdate(br_model *pModel, br_scalar x0, br_scalar y0, br_scalar x1, br_scalar y1, br_scalar x2, br_scalar y2, br_scalar x3, br_scalar y3);
void PedModelUpdate(br_model* pModel, br_scalar x0, br_scalar y0, br_scalar x1, br_scalar y1, br_scalar x2, br_scalar y2, br_scalar x3, br_scalar y3);
// Offset: 152
// Size: 98
// EAX: pActor
int ActorIsPedestrian(br_actor *pActor);
int ActorIsPedestrian(br_actor* pActor);
// Offset: 252
// Size: 79
// EAX: pActor
br_scalar PedHeightFromActor(br_actor *pActor);
br_scalar PedHeightFromActor(br_actor* pActor);
// Offset: 332
// Size: 52
// EAX: pActor
int GetPedestrianValue(br_actor *pActor);
int GetPedestrianValue(br_actor* pActor);
// Offset: 384
// Size: 88
// EAX: pActor
int PedestrianActorIsPerson(br_actor *pActor);
int PedestrianActorIsPerson(br_actor* pActor);
// Offset: 472
// Size: 87
@ -38,7 +42,7 @@ br_actor* GetPedestrianActor(int pIndex);
// Size: 97
// EAX: pActor
// EDX: pFlipped
br_pixelmap* GetPedestrianTexture(br_actor *pActor, int *pFlipped);
br_pixelmap* GetPedestrianTexture(br_actor* pActor, int* pFlipped);
// Offset: 660
// Size: 153
@ -51,11 +55,11 @@ void InitPedGibs();
// Offset: 1736
// Size: 240
// EAX: pActor
void SetPedMaterialForRender(br_actor *pActor);
void SetPedMaterialForRender(br_actor* pActor);
// Offset: 1976
// Size: 158
void PedCallBack(br_actor *pActor, br_model *pModel, br_material *pMaterial, void *pRender_data, br_uint_8 pStyle, int pOn_screen);
void PedCallBack(br_actor* pActor, br_model* pModel, br_material* pMaterial, void* pRender_data, br_uint_8 pStyle, int pOn_screen);
// Offset: 2136
// Size: 516
@ -64,12 +68,12 @@ void InitPeds();
// Offset: 2652
// Size: 275
// EAX: pActor
void MungeModelSize(br_actor *pActor, br_scalar pScaling_factor);
void MungeModelSize(br_actor* pActor, br_scalar pScaling_factor);
// Offset: 2928
// Size: 1468
// EAX: pPedestrian
int BurstPedestrian(tPedestrian_data *pPedestrian, float pSplattitudinalitude, int pAllow_explosion);
int BurstPedestrian(tPedestrian_data* pPedestrian, float pSplattitudinalitude, int pAllow_explosion);
// Offset: 4396
// Size: 137
@ -81,7 +85,7 @@ void ResetAllPedGibs();
// EDX: pSize
// EBX: pGib_index
// ECX: pPed_index
void AdjustPedGib(int pIndex, int pSize, int pGib_index, int pPed_index, br_matrix34 *pTrans);
void AdjustPedGib(int pIndex, int pSize, int pGib_index, int pPed_index, br_matrix34* pTrans);
// Offset: 4736
// Size: 810
@ -91,7 +95,7 @@ void MungePedGibs(tU32 pFrame_period);
// Offset: 5548
// Size: 267
// EAX: pPedestrian
void KillPedestrian(tPedestrian_data *pPedestrian);
void KillPedestrian(tPedestrian_data* pPedestrian);
// Offset: 5816
// Size: 302
@ -99,55 +103,55 @@ void KillPedestrian(tPedestrian_data *pPedestrian);
// EDX: pPixelmap
// EBX: pHeight
// ECX: pWidth
void CalcPedWidthNHeight(tPedestrian_data *pPedestrian, br_pixelmap *pPixelmap, br_scalar *pHeight, br_scalar *pWidth);
void CalcPedWidthNHeight(tPedestrian_data* pPedestrian, br_pixelmap* pPixelmap, br_scalar* pHeight, br_scalar* pWidth);
// Offset: 6120
// Size: 1942
// EAX: pPedestrian
int PedestrianNextInstruction(tPedestrian_data *pPedestrian, float pDanger_level, int pPosition_explicitly, int pMove_pc);
int PedestrianNextInstruction(tPedestrian_data* pPedestrian, float pDanger_level, int pPosition_explicitly, int pMove_pc);
// Offset: 8064
// Size: 464
// EAX: pPedestrian
// EDX: pAction_changed
void MungePedestrianSequence(tPedestrian_data *pPedestrian, int pAction_changed);
void MungePedestrianSequence(tPedestrian_data* pPedestrian, int pAction_changed);
// Offset: 8528
// Size: 166
// EAX: pPedestrian
void DetachPedFromCar(tPedestrian_data *pPedestrian);
void DetachPedFromCar(tPedestrian_data* pPedestrian);
// Offset: 8696
// Size: 117
// EAX: pPedestrian
void SetPedPos(tPedestrian_data *pPedestrian);
void SetPedPos(tPedestrian_data* pPedestrian);
// Offset: 8816
// Size: 59
// EAX: pActor
void DetachPedActorFromCar(br_actor *pActor);
void DetachPedActorFromCar(br_actor* pActor);
// Offset: 8876
// Size: 1317
// EAX: pPedestrian
void MungePedestrianFrames(tPedestrian_data *pPedestrian);
void MungePedestrianFrames(tPedestrian_data* pPedestrian);
// Offset: 10196
// Size: 1288
// EAX: pPedestrian
void MungePedModel(tPedestrian_data *pPedestrian);
void MungePedModel(tPedestrian_data* pPedestrian);
// Offset: 11484
// Size: 408
// EAX: pPedestrian
// EDX: pAction_index
// EBX: pRedo_frames_etc
void ChangeActionTo(tPedestrian_data *pPedestrian, int pAction_index, int pRedo_frames_etc);
void ChangeActionTo(tPedestrian_data* pPedestrian, int pAction_index, int pRedo_frames_etc);
// Offset: 11892
// Size: 589
// EAX: pPedestrian
int MungePedestrianAction(tPedestrian_data *pPedestrian, float pDanger_level);
int MungePedestrianAction(tPedestrian_data* pPedestrian, float pDanger_level);
// Offset: 12484
// Size: 105
@ -156,20 +160,20 @@ void MakeFlagWavingBastardWaveHisFlagWhichIsTheProbablyTheLastThingHeWillEverDo(
// Offset: 12592
// Size: 2334
// EAX: pPedestrian
void MungePedestrianPath(tPedestrian_data *pPedestrian, float pDanger_level, br_vector3 *pDanger_direction);
void MungePedestrianPath(tPedestrian_data* pPedestrian, float pDanger_level, br_vector3* pDanger_direction);
// Offset: 14928
// Size: 764
// EAX: pPedestrian
// EDX: pDanger_direction
float CalcPedestrianDangerLevel(tPedestrian_data *pPedestrian, br_vector3 *pDanger_direction);
float CalcPedestrianDangerLevel(tPedestrian_data* pPedestrian, br_vector3* pDanger_direction);
// Offset: 15692
// Size: 972
// EAX: pPedestrian
// EDX: pCar
// EBX: pCar_actor
tPed_hit_position MoveToEdgeOfCar(tPedestrian_data *pPedestrian, tCollision_info *pCar, br_actor *pCar_actor, br_scalar pPed_x, br_scalar pPed_z, br_scalar pCar_bounds_min_x, br_scalar pCar_bounds_max_x, br_scalar pCar_bounds_min_z, br_scalar pCar_bounds_max_z, br_vector3 *pMin_ped_bounds_car, br_vector3 *pMax_ped_bounds_car);
tPed_hit_position MoveToEdgeOfCar(tPedestrian_data* pPedestrian, tCollision_info* pCar, br_actor* pCar_actor, br_scalar pPed_x, br_scalar pPed_z, br_scalar pCar_bounds_min_x, br_scalar pCar_bounds_max_x, br_scalar pCar_bounds_min_z, br_scalar pCar_bounds_max_z, br_vector3* pMin_ped_bounds_car, br_vector3* pMax_ped_bounds_car);
// Offset: 16664
// Size: 101
@ -179,30 +183,30 @@ void CheckLastPed();
// Size: 319
// EAX: pCar
// EDX: pPed_car
int BloodyWheels(tCar_spec *pCar, br_vector3 *pPed_car, br_scalar pSize, br_vector3 *pPed_glob);
int BloodyWheels(tCar_spec* pCar, br_vector3* pPed_car, br_scalar pSize, br_vector3* pPed_glob);
// Offset: 17088
// Size: 142
// EAX: pPedestrian
// EDX: pCar
int FancyATossOffMate(tPedestrian_data *pPedestrian, tCollision_info *pCar, float pImpact_speed);
int FancyATossOffMate(tPedestrian_data* pPedestrian, tCollision_info* pCar, float pImpact_speed);
// Offset: 17232
// Size: 5870
// EAX: pPedestrian
void CheckPedestrianDeathScenario(tPedestrian_data *pPedestrian);
void CheckPedestrianDeathScenario(tPedestrian_data* pPedestrian);
// Offset: 23104
// Size: 769
// EAX: pPedestrian
// EDX: pIndex
void SendPedestrian(tPedestrian_data *pPedestrian, int pIndex);
void SendPedestrian(tPedestrian_data* pPedestrian, int pIndex);
// Offset: 23876
// Size: 1162
// EAX: pPedestrian
// EDX: pIndex
void DoPedestrian(tPedestrian_data *pPedestrian, int pIndex);
void DoPedestrian(tPedestrian_data* pPedestrian, int pIndex);
// Offset: 25040
// Size: 767
@ -210,13 +214,13 @@ void DoPedestrian(tPedestrian_data *pPedestrian, int pIndex);
// EDX: pAction_index
// EBX: pFrame_index
// ECX: pHit_points
void AdjustPedestrian(int pIndex, int pAction_index, int pFrame_index, int pHit_points, int pDone_initial, tU16 pParent, br_actor *pParent_actor, float pSpin_period, br_scalar pJump_magnitude, br_vector3 *pOffset, br_vector3 *pTrans);
void AdjustPedestrian(int pIndex, int pAction_index, int pFrame_index, int pHit_points, int pDone_initial, tU16 pParent, br_actor* pParent_actor, float pSpin_period, br_scalar pJump_magnitude, br_vector3* pOffset, br_vector3* pTrans);
// Offset: 25808
// Size: 194
// EAX: pFirst_vertex
// EDX: pPoint
void SquirtPathVertex(br_vertex *pFirst_vertex, br_vector3 *pPoint);
void SquirtPathVertex(br_vertex* pFirst_vertex, br_vector3* pPoint);
// Offset: 26004
// Size: 92
@ -225,13 +229,13 @@ void ResetAllPedestrians();
// Offset: 26096
// Size: 476
// EAX: pPedestrian
void GroundPedestrian(tPedestrian_data *pPedestrian);
void GroundPedestrian(tPedestrian_data* pPedestrian);
// Offset: 26572
// Size: 483
// EAX: pPedestrian
// EDX: pAnimate
void RevivePedestrian(tPedestrian_data *pPedestrian, int pAnimate);
void RevivePedestrian(tPedestrian_data* pPedestrian, int pAnimate);
// Offset: 27056
// Size: 1078
@ -250,7 +254,7 @@ int GetPedCount();
// Size: 260
// EAX: pIndex
// EDX: pPos
int GetPedPosition(int pIndex, br_vector3 *pPos);
int GetPedPosition(int pIndex, br_vector3* pPos);
// Offset: 28648
// Size: 2930
@ -258,7 +262,7 @@ int GetPedPosition(int pIndex, br_vector3 *pPos);
// EDX: pInstructions
// EBX: pInstruc_count
// ECX: pInit_instruc
void CreatePedestrian(FILE *pG, tPedestrian_instruction *pInstructions, int pInstruc_count, int pInit_instruc, int pRef_num, int pForce_read);
void CreatePedestrian(FILE* pG, tPedestrian_instruction* pInstructions, int pInstruc_count, int pInit_instruc, int pRef_num, int pForce_read);
// Offset: 31580
// Size: 73
@ -277,14 +281,14 @@ void ResetPedMaterial();
// EAX: pF
// EDX: pSubs_count
// EBX: pSubs_array
void LoadInPedestrians(FILE *pF, int pSubs_count, tPed_subs *pSubs_array);
void LoadInPedestrians(FILE* pF, int pSubs_count, tPed_subs* pSubs_array);
// Offset: 33608
// Size: 1313
// EAX: pInstructions
// EDX: pInstruc_count
// EBX: pInit_instruc
br_actor* BuildPedPaths(tPedestrian_instruction *pInstructions, int pInstruc_count, int pInit_instruc);
br_actor* BuildPedPaths(tPedestrian_instruction* pInstructions, int pInstruc_count, int pInit_instruc);
// Offset: 34924
// Size: 1161
@ -421,7 +425,7 @@ void DropInitPedPointAir();
// Offset: 38452
// Size: 77
br_uint_32 KillActorsModel(br_actor *pActor, void *pArg);
br_uint_32 KillActorsModel(br_actor* pActor, void* pArg);
// Offset: 38532
// Size: 154
@ -431,7 +435,7 @@ void DisposePedPaths();
// Size: 417
// EAX: pPed_index
// EDX: pPoint_index
void GetPedPos(int *pPed_index, int *pPoint_index);
void GetPedPos(int* pPed_index, int* pPoint_index);
// Offset: 39108
// Size: 105
@ -471,7 +475,7 @@ void DoPedReport();
// EDX: pDepth_buffer
// EBX: pCamera
// ECX: pCamera_to_world
void RenderProximityRays(br_pixelmap *pRender_screen, br_pixelmap *pDepth_buffer, br_actor *pCamera, br_matrix34 *pCamera_to_world, tU32 pTime);
void RenderProximityRays(br_pixelmap* pRender_screen, br_pixelmap* pDepth_buffer, br_actor* pCamera, br_matrix34* pCamera_to_world, tU32 pTime);
// Offset: 42256
// Size: 145
@ -486,7 +490,7 @@ void AdjustProxRay(int pRay_index, tU16 pCar_ID, tU16 pPed_index, tU32 pTime);
// EAX: pContents
// EDX: pMessage
// EBX: pReceive_time
void ReceivedPedestrian(tNet_contents *pContents, tNet_message *pMessage, tU32 pReceive_time);
void ReceivedPedestrian(tNet_contents* pContents, tNet_message* pMessage, tU32 pReceive_time);
// Offset: 43604
// Size: 115

View File

@ -1,30 +1,30 @@
#include "utility.h"
#include "loading.h"
#include "errors.h"
#include "dossys.h"
#include "errors.h"
#include "globvars.h"
#include "sound.h"
#include "loading.h"
#include "network.h"
#include "sound.h"
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
// Added >>
#define MIN_SERVICE_INTERVAL 200
// <<
tU32 gLong_key[] = { 0x5F991B6C, 0x135FCDB9, 0x0E2004CB, 0x0EA11C5E };
tU32 gOther_long_key[] = { 0x26D6A867, 0x1B45DDB6, 0x13227E32, 0x3794C215 };
tU32 gLong_key[] = { 0x5F991B6C, 0x135FCDB9, 0x0E2004CB, 0x0EA11C5E };
tU32 gOther_long_key[] = { 0x26D6A867, 0x1B45DDB6, 0x13227E32, 0x3794C215 };
char *gMisc_strings[250];
char* gMisc_strings[250];
int gIn_check_quit;
tU32 gLost_time;
int gEncryption_method = 1;
br_pixelmap *g16bit_palette;
br_pixelmap *gSource_for_16bit_palette;
int gEncryption_method = 0;
br_pixelmap* g16bit_palette;
br_pixelmap* gSource_for_16bit_palette;
// Offset: 0
// Size: 144
@ -32,21 +32,90 @@ int CheckQuit() {
int got_as_far_as_verify;
}
// Offset: 144
// Size: 50
double sqr(double pN) {
}
// Offset: 196
// Size: 542
// EAX: pS
void EncodeLine(char *pS) {
void EncodeLine(char* pS) {
int len;
int seed;
int i;
char *key;
char* key;
unsigned char c;
FILE *test;
FILE* test;
tPath_name test_path;
char temp[256];
len = strlen(pS);
key = (char*)gLong_key;
if (!gEncryption_method) {
strcpy(test_path, gApplication_path);
strcat(test_path, gDir_separator);
strcat(test_path, "GENERAL.TXT");
test = fopen(test_path, "rt");
if (test) {
fgets(temp, 256, test);
if (temp[0] != '@') {
gEncryption_method = 2;
} else {
gEncryption_method = 1;
EncodeLine(&temp[1]);
temp[7] = '\0';
if (strcmp(&temp[1], "0.01\t\t") != 0) {
gEncryption_method = 2;
}
}
fclose(test);
} else {
gEncryption_method = 2;
}
}
while (len > 0 && (pS[len - 1] == '\r' || pS[len - 1] == '\n')) {
--len;
pS[len] = 0;
}
seed = len % 16;
for (i = 0; i < len; i++) {
c = pS[i];
if (i >= 2) {
if (pS[i - 1] == '/' && pS[i - 2] == '/') {
key = (char*)gOther_long_key;
}
}
if (gEncryption_method == 1) {
if (c == '\t') {
c = 0x80;
}
c -= 0x20;
if (!(c & 0x80)) {
c = (c ^ key[seed]) & 0x7f;
c += 0x20;
}
seed += 7;
seed = seed % 16;
if (c == 0x80) {
c = '\t';
}
} else {
if (c == '\t') {
c = 0x9f;
}
c -= 0x20;
c = (c ^ key[seed]) & 0x7f;
c += 0x20;
seed += 7;
seed = seed % 16;
if (c == 0x9f) {
c = '\t';
}
}
pS[i] = c;
}
}
// Offset: 740
@ -94,31 +163,29 @@ br_scalar SRandomPosNeg(br_scalar pN) {
// Size: 506
// EAX: pF
// EDX: pS
char* GetALineWithNoPossibleService(FILE *pF, /*unsigned*/ char *pS) {
char* GetALineWithNoPossibleService(FILE* pF, /*unsigned*/ char* pS) {
// JeffH removed "signed' to avoid compiler warnings..
/*signed*/ char *result;
/*signed*/ char* result;
/*signed*/ char s[256];
int ch;
int len;
int i;
do
{
do {
result = fgets(s, 256, pF);
if ( !result ) {
if (!result) {
break;
}
if ( s[0] == '@' )
{
if (s[0] == '@') {
EncodeLine(&s[1]);
goto LABEL_5;
}
while ( 1 )
{
if ( s[0] != ' ' && s[0] != '\t' ){
while (1) {
if (s[0] != ' ' && s[0] != '\t') {
break;
}
LABEL_5:
LABEL_5:
len = strlen(s);
memmove(s, &s[1], len);
}
@ -129,10 +196,10 @@ LABEL_5:
break;
}
}
if ( ch != -1 )
if (ch != -1) {
ungetc(ch, pF);
}
while (!isalnum(s[0])
}
} while (!isalnum(s[0])
&& s[0] != '-'
&& s[0] != '.'
&& s[0] != '!'
@ -140,14 +207,14 @@ LABEL_5:
&& s[0] != '('
&& s[0] != '\''
&& s[0] != '\"'
&& s[0] >= 0 );
&& s[0] >= 0);
if (result) {
len = strlen(result);
if ( len != 0 && (result[len - 1] == '\r' || result[len - 1] == '\n' )) {
if (len != 0 && (result[len - 1] == '\r' || result[len - 1] == '\n')) {
result[len - 1] = 0;
}
if ( len != 1 && (result[len - 2] == '\r' || result[len - 2] == '\n' )) {
if (len != 1 && (result[len - 2] == '\r' || result[len - 2] == '\n')) {
result[len - 2] = 0;
}
}
@ -165,7 +232,7 @@ LABEL_5:
// Size: 60
// EAX: pF
// EDX: pS
char* GetALineAndDontArgue(FILE *pF, char *pS) {
char* GetALineAndDontArgue(FILE* pF, char* pS) {
PossibleService(pF, pS);
return GetALineWithNoPossibleService(pF, pS);
}
@ -175,8 +242,10 @@ char* GetALineAndDontArgue(FILE *pF, char *pS) {
// EAX: pDestn_str
// EDX: pStr_1
// EBX: pStr_2
void PathCat(char *pDestn_str, char *pStr_1, char *pStr_2) {
strcpy(pDestn_str, pStr_1);
void PathCat(char* pDestn_str, char* pStr_1, char* pStr_2) {
if (pDestn_str != pStr_1) { // Added to avoid strcpy overlap checks
strcpy(pDestn_str, pStr_1);
}
if (strlen(pStr_2) != 0) {
strcat(pDestn_str, gDir_separator);
strcat(pDestn_str, pStr_2);
@ -196,7 +265,7 @@ float tandeg(float pAngle) {
// Offset: 2084
// Size: 80
// EAX: pF
tU32 GetFileLength(FILE *pF) {
tU32 GetFileLength(FILE* pF) {
tU32 the_size;
}
@ -212,8 +281,8 @@ int BooleanTo1Or0(int pB) {
// EDX: pW
// EBX: pH
// ECX: pPixels
br_pixelmap* DRPixelmapAllocate(br_uint_8 pType, br_uint_16 pW, br_uint_16 pH, void *pPixels, int pFlags) {
br_pixelmap *the_map;
br_pixelmap* DRPixelmapAllocate(br_uint_8 pType, br_uint_16 pW, br_uint_16 pH, void* pPixels, int pFlags) {
br_pixelmap* the_map;
}
// Offset: 2348
@ -222,8 +291,8 @@ br_pixelmap* DRPixelmapAllocate(br_uint_8 pType, br_uint_16 pW, br_uint_16 pH, v
// EDX: pX
// EBX: pY
// ECX: pW
br_pixelmap* DRPixelmapAllocateSub(br_pixelmap *pPm, br_uint_16 pX, br_uint_16 pY, br_uint_16 pW, br_uint_16 pH) {
br_pixelmap *the_map;
br_pixelmap* DRPixelmapAllocateSub(br_pixelmap* pPm, br_uint_16 pX, br_uint_16 pY, br_uint_16 pW, br_uint_16 pH) {
br_pixelmap* the_map;
}
// Offset: 2468
@ -232,8 +301,8 @@ br_pixelmap* DRPixelmapAllocateSub(br_pixelmap *pPm, br_uint_16 pX, br_uint_16 p
// EDX: pMatch_type
// EBX: pWidth
// ECX: pHeight
br_pixelmap* DRPixelmapMatchSized(br_pixelmap *pSrc, tU8 pMatch_type, tS32 pWidth, tS32 pHeight) {
br_pixelmap *result;
br_pixelmap* DRPixelmapMatchSized(br_pixelmap* pSrc, tU8 pMatch_type, tS32 pWidth, tS32 pHeight) {
br_pixelmap* result;
}
// Offset: 2664
@ -242,13 +311,13 @@ br_pixelmap* DRPixelmapMatchSized(br_pixelmap *pSrc, tU8 pMatch_type, tS32 pWidt
// EDX: pSrc
// EBX: pSrc_width
// ECX: pSrc_height
void CopyDoubled8BitTo16BitRectangle(br_pixelmap *pDst, br_pixelmap *pSrc, int pSrc_width, int pSrc_height, int pDst_x, int pDst_y, br_pixelmap *pPalette) {
void CopyDoubled8BitTo16BitRectangle(br_pixelmap* pDst, br_pixelmap* pSrc, int pSrc_width, int pSrc_height, int pDst_x, int pDst_y, br_pixelmap* pPalette) {
int x;
int y;
tU8 *src_start;
tU16 *dst_start0;
tU16 *dst_start1;
tU16 *palette_entry;
tU8* src_start;
tU16* dst_start0;
tU16* dst_start1;
tU16* palette_entry;
}
// Offset: 3024
@ -256,42 +325,42 @@ void CopyDoubled8BitTo16BitRectangle(br_pixelmap *pDst, br_pixelmap *pSrc, int p
// EAX: pSrc
// EDX: pWidth
// EBX: pHeight
br_pixelmap* Scale8BitPixelmap(br_pixelmap *pSrc, int pWidth, int pHeight) {
br_pixelmap *result;
br_pixelmap* Scale8BitPixelmap(br_pixelmap* pSrc, int pWidth, int pHeight) {
br_pixelmap* result;
int x;
int y;
tU8 *src_pixels;
tU8 *dst_pixels;
tU8* src_pixels;
tU8* dst_pixels;
}
// Offset: 3288
// Size: 390
// EAX: pSrc
// EDX: pN
br_pixelmap* Tile8BitPixelmap(br_pixelmap *pSrc, int pN) {
br_pixelmap *result;
br_pixelmap* Tile8BitPixelmap(br_pixelmap* pSrc, int pN) {
br_pixelmap* result;
int new_width;
int new_height;
int x;
int y2;
int y;
tU8 *src_pixels;
tU8 *dst_pixels;
tU8* src_pixels;
tU8* dst_pixels;
}
// Offset: 3680
// Size: 83
// EAX: pName
// EDX: pList
tException_list FindExceptionInList(char *pName, tException_list pList) {
tException_list FindExceptionInList(char* pName, tException_list pList) {
}
// Offset: 3764
// Size: 492
// EAX: pSrc
br_pixelmap* PurifiedPixelmap(br_pixelmap *pSrc) {
br_pixelmap *intermediate;
br_pixelmap *result;
br_pixelmap* PurifiedPixelmap(br_pixelmap* pSrc) {
br_pixelmap* intermediate;
br_pixelmap* result;
int new_width;
int new_height;
tException_list e;
@ -300,8 +369,8 @@ br_pixelmap* PurifiedPixelmap(br_pixelmap *pSrc) {
// Offset: 4256
// Size: 105
// EAX: pFile_name
br_pixelmap* DRPixelmapLoad(char *pFile_name) {
br_pixelmap *the_map;
br_pixelmap* DRPixelmapLoad(char* pFile_name) {
br_pixelmap* the_map;
}
// Offset: 4364
@ -309,8 +378,8 @@ br_pixelmap* DRPixelmapLoad(char *pFile_name) {
// EAX: pFile_name
// EDX: pPixelmaps
// EBX: pNum
br_uint_32 DRPixelmapLoadMany(char *pFile_name, br_pixelmap **pPixelmaps, br_uint_16 pNum) {
br_pixelmap *the_map;
br_uint_32 DRPixelmapLoadMany(char* pFile_name, br_pixelmap** pPixelmaps, br_uint_16 pNum) {
br_pixelmap* the_map;
int number_loaded;
int i;
}
@ -327,20 +396,20 @@ void WaitFor(tU32 pDelay) {
// EAX: pActor
// EDX: callback
// EBX: arg
br_uint_32 DRActorEnumRecurse(br_actor *pActor, br_actor_enum_cbfn *callback, void *arg) {
br_uint_32 DRActorEnumRecurse(br_actor* pActor, br_actor_enum_cbfn* callback, void* arg) {
br_uint_32 result;
}
// Offset: 4744
// Size: 77
br_uint_32 CompareActorID(br_actor *pActor, void *pArg) {
br_uint_32 CompareActorID(br_actor* pActor, void* pArg) {
}
// Offset: 4824
// Size: 60
// EAX: pSearch_root
// EDX: pName
br_actor* DRActorFindRecurse(br_actor *pSearch_root, char *pName) {
br_actor* DRActorFindRecurse(br_actor* pSearch_root, char* pName) {
}
// Offset: 4884
@ -349,7 +418,7 @@ br_actor* DRActorFindRecurse(br_actor *pSearch_root, char *pName) {
// EDX: pMat
// EBX: pCall_back
// ECX: pArg
br_uint_32 DRActorEnumRecurseWithMat(br_actor *pActor, br_material *pMat, br_uint_32 (*pCall_back)(br_actor*, br_material*, void*), void *pArg) {
br_uint_32 DRActorEnumRecurseWithMat(br_actor* pActor, br_material* pMat, br_uint_32 (*pCall_back)(br_actor*, br_material*, void*), void* pArg) {
br_uint_32 result;
}
@ -359,7 +428,7 @@ br_uint_32 DRActorEnumRecurseWithMat(br_actor *pActor, br_material *pMat, br_uin
// EDX: pMatrix
// EBX: pCall_back
// ECX: pArg
br_uint_32 DRActorEnumRecurseWithTrans(br_actor *pActor, br_matrix34 *pMatrix, br_uint_32 (*pCall_back)(br_actor*, br_matrix34*, void*), void *pArg) {
br_uint_32 DRActorEnumRecurseWithTrans(br_actor* pActor, br_matrix34* pMatrix, br_uint_32 (*pCall_back)(br_actor*, br_matrix34*, void*), void* pArg) {
br_uint_32 result;
br_matrix34 combined_transform;
}
@ -379,32 +448,32 @@ float fsign(float pNumber) {
// Size: 210
// EAX: pPrefix
// EDX: pExtension
FILE* OpenUniqueFileB(char *pPrefix, char *pExtension) {
FILE* OpenUniqueFileB(char* pPrefix, char* pExtension) {
int index;
FILE *f;
FILE* f;
tPath_name the_path;
}
// Offset: 5632
// Size: 572
// EAX: pF
void PrintScreenFile(FILE *pF) {
void PrintScreenFile(FILE* pF) {
int i;
int j;
int bit_map_size;
int offset;
tU8 *pixel_ptr;
tU8* pixel_ptr;
}
// Offset: 6204
// Size: 554
// EAX: pF
void PrintScreenFile16(FILE *pF) {
void PrintScreenFile16(FILE* pF) {
int i;
int j;
int bit_map_size;
int offset;
tU8 *pixel_ptr;
tU8* pixel_ptr;
tU16 pixel;
}
@ -435,7 +504,7 @@ void AddLostTime(tU32 pLost_time) {
// EDX: pStr
// EBX: pFudge_colon
// ECX: pForce_colon
void TimerString(tU32 pTime, char *pStr, int pFudge_colon, int pForce_colon) {
void TimerString(tU32 pTime, char* pStr, int pFudge_colon, int pForce_colon) {
int seconds;
}
@ -449,7 +518,7 @@ char* GetMiscString(int pIndex) {
// Size: 58
// EAX: pIndex
// EDX: pStr
void GetCopyOfMiscString(int pIndex, char *pStr) {
void GetCopyOfMiscString(int pIndex, char* pStr) {
}
// Offset: 7372
@ -457,7 +526,7 @@ void GetCopyOfMiscString(int pIndex, char *pStr) {
// EAX: pPeriod
// EDX: pLast_change
// EBX: pCurrent_state
int Flash(tU32 pPeriod, tU32 *pLast_change, int *pCurrent_state) {
int Flash(tU32 pPeriod, tU32* pLast_change, int* pCurrent_state) {
tU32 the_time;
}
@ -465,27 +534,27 @@ int Flash(tU32 pPeriod, tU32 *pLast_change, int *pCurrent_state) {
// Size: 225
// EAX: pDst
// EDX: pSrc
void MaterialCopy(br_material *pDst, br_material *pSrc) {
void MaterialCopy(br_material* pDst, br_material* pSrc) {
}
// Offset: 7716
// Size: 139
// EAX: pColour_1
// EDX: pColour_2
double RGBDifferenceSqr(tRGB_colour *pColour_1, tRGB_colour *pColour_2) {
double RGBDifferenceSqr(tRGB_colour* pColour_1, tRGB_colour* pColour_2) {
}
// Offset: 7856
// Size: 200
// EAX: pRGB_colour
// EDX: pPalette
int FindBestMatch(tRGB_colour *pRGB_colour, br_pixelmap *pPalette) {
int FindBestMatch(tRGB_colour* pRGB_colour, br_pixelmap* pPalette) {
int n;
int near_c;
double min_d;
double d;
tRGB_colour trial_RGB;
br_colour *dp;
br_colour* dp;
}
// Offset: 8056
@ -494,7 +563,7 @@ int FindBestMatch(tRGB_colour *pRGB_colour, br_pixelmap *pPalette) {
// EDX: pR
// EBX: pG
// ECX: pB
void BuildShadeTablePath(char *pThe_path, int pR, int pG, int pB) {
void BuildShadeTablePath(char* pThe_path, int pR, int pG, int pB) {
char s[32];
}
@ -513,7 +582,7 @@ br_pixelmap* LoadGeneratedShadeTable(int pR, int pG, int pB) {
// EDX: pR
// EBX: pG
// ECX: pB
void SaveGeneratedShadeTable(br_pixelmap *pThe_table, int pR, int pG, int pB) {
void SaveGeneratedShadeTable(br_pixelmap* pThe_table, int pR, int pG, int pB) {
char the_path[256];
}
@ -523,7 +592,7 @@ void SaveGeneratedShadeTable(br_pixelmap *pThe_table, int pR, int pG, int pB) {
// EDX: pPalette
// EBX: pRed_mix
// ECX: pGreen_mix
br_pixelmap* GenerateShadeTable(int pHeight, br_pixelmap *pPalette, int pRed_mix, int pGreen_mix, int pBlue_mix, float pQuarter, float pHalf, float pThree_quarter) {
br_pixelmap* GenerateShadeTable(int pHeight, br_pixelmap* pPalette, int pRed_mix, int pGreen_mix, int pBlue_mix, float pQuarter, float pHalf, float pThree_quarter) {
}
// Offset: 8556
@ -532,14 +601,14 @@ br_pixelmap* GenerateShadeTable(int pHeight, br_pixelmap *pPalette, int pRed_mix
// EDX: pPalette
// EBX: pRed_mix
// ECX: pGreen_mix
br_pixelmap* GenerateDarkenedShadeTable(int pHeight, br_pixelmap *pPalette, int pRed_mix, int pGreen_mix, int pBlue_mix, float pQuarter, float pHalf, float pThree_quarter, br_scalar pDarken) {
br_pixelmap *the_table;
br_pixelmap* GenerateDarkenedShadeTable(int pHeight, br_pixelmap* pPalette, int pRed_mix, int pGreen_mix, int pBlue_mix, float pQuarter, float pHalf, float pThree_quarter, br_scalar pDarken) {
br_pixelmap* the_table;
tRGB_colour the_RGB;
tRGB_colour new_RGB;
tRGB_colour ref_col;
br_colour *cp;
char *tab_ptr;
char *shade_ptr;
br_colour* cp;
char* tab_ptr;
char* shade_ptr;
double f_i;
double f_total_minus_1;
double ratio1;
@ -570,7 +639,7 @@ void PossibleService() {
// EAX: pA
// EDX: pB
// EBX: pC
void DRMatrix34TApplyP(br_vector3 *pA, br_vector3 *pB, br_matrix34 *pC) {
void DRMatrix34TApplyP(br_vector3* pA, br_vector3* pB, br_matrix34* pC) {
br_scalar t1;
br_scalar t2;
br_scalar t3;
@ -580,8 +649,8 @@ void DRMatrix34TApplyP(br_vector3 *pA, br_vector3 *pB, br_matrix34 *pC) {
// Size: 132
// EAX: pPal
// EDX: pEntry
tU16 PaletteEntry16Bit(br_pixelmap *pPal, int pEntry) {
tU32 *src_entry;
tU16 PaletteEntry16Bit(br_pixelmap* pPal, int pEntry) {
tU32* src_entry;
int red;
int green;
int blue;
@ -590,8 +659,8 @@ tU16 PaletteEntry16Bit(br_pixelmap *pPal, int pEntry) {
// Offset: 9736
// Size: 210
// EAX: pSrc
br_pixelmap* PaletteOf16Bits(br_pixelmap *pSrc) {
tU16 *dst_entry;
br_pixelmap* PaletteOf16Bits(br_pixelmap* pSrc) {
tU16* dst_entry;
int value;
}
@ -600,12 +669,12 @@ br_pixelmap* PaletteOf16Bits(br_pixelmap *pSrc) {
// EAX: pDst
// EDX: pSrc
// EBX: pPalette
void Copy8BitTo16Bit(br_pixelmap *pDst, br_pixelmap *pSrc, br_pixelmap *pPalette) {
void Copy8BitTo16Bit(br_pixelmap* pDst, br_pixelmap* pSrc, br_pixelmap* pPalette) {
int x;
int y;
tU8 *src_start;
tU16 *dst_start;
tU16 *palette_entry;
tU8* src_start;
tU16* dst_start;
tU16* palette_entry;
}
// Offset: 10168
@ -614,12 +683,12 @@ void Copy8BitTo16Bit(br_pixelmap *pDst, br_pixelmap *pSrc, br_pixelmap *pPalette
// EDX: pDst_x
// EBX: pDst_y
// ECX: pSrc
void Copy8BitTo16BitRectangle(br_pixelmap *pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap *pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, br_pixelmap *pPalette) {
void Copy8BitTo16BitRectangle(br_pixelmap* pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap* pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, br_pixelmap* pPalette) {
int x;
int y;
tU8 *src_start;
tU16 *dst_start;
tU16 *palette_entry;
tU8* src_start;
tU16* dst_start;
tU16* palette_entry;
}
// Offset: 10728
@ -628,12 +697,12 @@ void Copy8BitTo16BitRectangle(br_pixelmap *pDst, tS16 pDst_x, tS16 pDst_y, br_pi
// EDX: pDst_x
// EBX: pDst_y
// ECX: pSrc
void Copy8BitTo16BitRectangleWithTransparency(br_pixelmap *pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap *pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, br_pixelmap *pPalette) {
void Copy8BitTo16BitRectangleWithTransparency(br_pixelmap* pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap* pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, br_pixelmap* pPalette) {
int x;
int y;
tU8 *src_start;
tU16 *dst_start;
tU16 *palette_entry;
tU8* src_start;
tU16* dst_start;
tU16* palette_entry;
}
// Offset: 11248
@ -642,12 +711,12 @@ void Copy8BitTo16BitRectangleWithTransparency(br_pixelmap *pDst, tS16 pDst_x, tS
// EDX: pDst_x
// EBX: pDst_y
// ECX: pSrc
void Copy8BitToOnscreen16BitRectangleWithTransparency(br_pixelmap *pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap *pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, br_pixelmap *pPalette) {
void Copy8BitToOnscreen16BitRectangleWithTransparency(br_pixelmap* pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap* pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, br_pixelmap* pPalette) {
int x;
int y;
tU8 *src_start;
tU16 *dst_start;
tU16 *palette_entry;
tU8* src_start;
tU16* dst_start;
tU16* palette_entry;
}
// Offset: 11528
@ -656,12 +725,12 @@ void Copy8BitToOnscreen16BitRectangleWithTransparency(br_pixelmap *pDst, tS16 pD
// EDX: pDst_x
// EBX: pDst_y
// ECX: pSrc
void Copy8BitRectangleTo16BitRhombusWithTransparency(br_pixelmap *pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap *pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, tX1616 pShear, br_pixelmap *pPalette) {
void Copy8BitRectangleTo16BitRhombusWithTransparency(br_pixelmap* pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap* pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, tX1616 pShear, br_pixelmap* pPalette) {
int x;
int y;
tU8 *src_start;
tU16 *dst_start;
tU16 *palette_entry;
tU8* src_start;
tU16* dst_start;
tU16* palette_entry;
tX1616 total_shear;
tS16 sheared_x;
tS16 clipped_src_x;
@ -674,14 +743,14 @@ void Copy8BitRectangleTo16BitRhombusWithTransparency(br_pixelmap *pDst, tS16 pDs
// EDX: dx
// EBX: dy
// ECX: src
void DRPixelmapRectangleCopy(br_pixelmap *dst, br_int_16 dx, br_int_16 dy, br_pixelmap *src, br_int_16 sx, br_int_16 sy, br_uint_16 w, br_uint_16 h) {
void DRPixelmapRectangleCopy(br_pixelmap* dst, br_int_16 dx, br_int_16 dy, br_pixelmap* src, br_int_16 sx, br_int_16 sy, br_uint_16 w, br_uint_16 h) {
}
// Offset: 12308
// Size: 107
// EAX: dst
// EDX: src
void DRPixelmapCopy(br_pixelmap *dst, br_pixelmap *src) {
void DRPixelmapCopy(br_pixelmap* dst, br_pixelmap* src) {
}
// Offset: 12416
@ -690,14 +759,14 @@ void DRPixelmapCopy(br_pixelmap *dst, br_pixelmap *src) {
// EDX: x
// EBX: y
// ECX: w
void DRPixelmapRectangleFill(br_pixelmap *dst, br_int_16 x, br_int_16 y, br_uint_16 w, br_uint_16 h, br_uint_32 colour) {
void DRPixelmapRectangleFill(br_pixelmap* dst, br_int_16 x, br_int_16 y, br_uint_16 w, br_uint_16 h, br_uint_32 colour) {
}
// Offset: 12500
// Size: 156
// EAX: pPoint
// EDX: pNormal
int NormalSideOfPlane(br_vector3 *pPoint, br_vector3 *pNormal, br_scalar pD) {
int NormalSideOfPlane(br_vector3* pPoint, br_vector3* pNormal, br_scalar pD) {
br_scalar numer;
br_scalar denom;
}
@ -705,8 +774,8 @@ int NormalSideOfPlane(br_vector3 *pPoint, br_vector3 *pNormal, br_scalar pD) {
// Offset: 12656
// Size: 351
// EAX: pMaterial
br_material* DRMaterialClone(br_material *pMaterial) {
br_material *the_material;
br_material* DRMaterialClone(br_material* pMaterial) {
br_material* the_material;
char s[256];
static int name_suffix;
}
@ -714,8 +783,8 @@ br_material* DRMaterialClone(br_material *pMaterial) {
// Offset: 13008
// Size: 93
// EAX: s
void StripCR(char *s) {
char *pos;
void StripCR(char* s) {
char* pos;
pos = s;
while (*pos != 0) {
if (*pos == '\r' || *pos == '\n') {
@ -728,42 +797,39 @@ void StripCR(char *s) {
// Offset: 13104
// Size: 132
void SubsStringJob(char *pStr, ...) {
char *sub_str;
void SubsStringJob(char* pStr, ...) {
char* sub_str;
char temp_str[256];
char *sub_pt;
char* sub_pt;
va_list ap;
}
// Offset: 13236
// Size: 454
// EAX: pS
void DecodeLine2(char *pS) {
void DecodeLine2(char* pS) {
int len;
int seed;
int i;
unsigned char c;
char *key;
char* key;
len = strlen(pS);
key = (char*)gLong_key;
while ( len > 0 && (pS[len - 1] == 13 || pS[len - 1] == 10))
{
while (len > 0 && (pS[len - 1] == 13 || pS[len - 1] == 10)) {
--len;
pS[len] = 0;
}
seed = len % 16;
for ( i = 0; i < len; i++)
{
for (i = 0; i < len; i++) {
c = pS[i];
if (i >= 2) {
if (pS[i - 1] == '/' && pS[i - 2] == '/') {
key = (char*)gOther_long_key;
}
}
if (gEncryption_method == 1)
{
if ( c == '\t' ) {
if (gEncryption_method == 1) {
if (c == '\t') {
c = 0x80;
}
c -= 0x20;
@ -774,11 +840,10 @@ void DecodeLine2(char *pS) {
seed += 7;
seed = seed % 16;
if ( c == 0x80 ) {
if (c == 0x80) {
c = '\t';
}
}
else {
} else {
if (c == '\t') {
c = 0x9f;
}
@ -789,7 +854,7 @@ void DecodeLine2(char *pS) {
seed += 7;
seed = seed % 16;
if ( c == 0x9f ) {
if (c == 0x9f) {
c = '\t';
}
}
@ -800,37 +865,33 @@ void DecodeLine2(char *pS) {
// Offset: 13692
// Size: 304
// EAX: pS
void EncodeLine2(char *pS) {
void EncodeLine2(char* pS) {
int len;
int seed;
int i;
int count;
unsigned char c;
char *key;
char* key;
len = strlen(pS);
count = 0;
key = (char*)gLong_key;
while ( len > 0 && (pS[len - 1] == 13 || pS[len - 1] == 10))
{
while (len > 0 && (pS[len - 1] == 13 || pS[len - 1] == 10)) {
--len;
pS[len] = 0;
}
seed = len % 16;
for ( i = 0; i < len; ++pS )
{
if ( count == 2 )
for (i = 0; i < len; ++pS) {
if (count == 2)
key = (char*)gOther_long_key;
if ( *pS == '/' )
{
if (*pS == '/') {
++count;
}
else {
} else {
count = 0;
}
if ( *pS == '\t' ) {
if (*pS == '\t') {
*pS = 0x80;
}
c = *pS - 0x20;
@ -841,7 +902,7 @@ void EncodeLine2(char *pS) {
seed += 7;
seed = seed % 16;
if ( c == 0x80 ) {
if (c == 0x80) {
c = '\t';
}
*pS = c;
@ -852,13 +913,13 @@ void EncodeLine2(char *pS) {
// Offset: 13996
// Size: 553
// EAX: pThe_path
void EncodeFile(char *pThe_path) {
FILE *f;
FILE *d;
void EncodeFile(char* pThe_path) {
FILE* f;
FILE* d;
char line[257];
char new_file[256];
char *s;
char *result;
char* s;
char* result;
int ch;
int decode;
int len;
@ -908,7 +969,7 @@ void EncodeFile(char *pThe_path) {
}
line[0] = '@';
fputs(&line[decode*2], d);
fputs(&line[decode * 2], d);
count = -1;
ch = fgetc(f);
while (ch == '\r' || ch == '\n') {
@ -936,7 +997,7 @@ void EncodeFile(char *pThe_path) {
// Offset: 14552
// Size: 513
// EAX: pThe_path
void EncodeFileWrapper (char *pThe_path) {
void EncodeFileWrapper(char* pThe_path) {
int len = strlen(pThe_path);
if (strcmp(&pThe_path[len - 4], ".TXT") == 0) {
@ -985,14 +1046,14 @@ void EncodeFileWrapper (char *pThe_path) {
// Offset: 15068
// Size: 72
// EAX: pThe_path
void EncodeAllFilesInDirectory(char *pThe_path) {
void EncodeAllFilesInDirectory(char* pThe_path) {
char s[256];
}
// Offset: 15140
// Size: 89
// EAX: pF
void SkipNLines(FILE *pF) {
void SkipNLines(FILE* pF) {
int i;
int count;
char s[256];
@ -1002,7 +1063,7 @@ void SkipNLines(FILE *pF) {
// Size: 118
// EAX: p1
// EDX: p2
int DRStricmp(char *p1, char *p2) {
int DRStricmp(char* p1, char* p2) {
int val;
}
@ -1010,10 +1071,10 @@ int DRStricmp(char *p1, char *p2) {
// Size: 559
// EAX: pArray
// EDX: pCount
void GlorifyMaterial(br_material **pArray, int pCount) {
void GlorifyMaterial(br_material** pArray, int pCount) {
int i;
int c;
br_pixelmap *big_tile;
br_pixelmap* big_tile;
tException_list e;
}
@ -1021,32 +1082,32 @@ void GlorifyMaterial(br_material **pArray, int pCount) {
// Size: 178
// EAX: pArray
// EDX: pN
void WhitenVertexRGB(br_model **pArray, int pN) {
void WhitenVertexRGB(br_model** pArray, int pN) {
int m;
int v;
br_vertex *vertex;
br_vertex* vertex;
}
// Offset: 16092
// Size: 239
// EAX: pPalette
void NobbleNonzeroBlacks(br_pixelmap *pPalette) {
void NobbleNonzeroBlacks(br_pixelmap* pPalette) {
tU32 red;
tU32 green;
tU32 blue;
tU32 value;
tU32 *palette_entry;
tU32* palette_entry;
tU32 frobbed;
}
// Offset: 16332
// Size: 55
// EAX: pThe_path
int PDCheckDriveExists(char *pThe_path) {
int PDCheckDriveExists(char* pThe_path) {
// Added: force unix dir separator for now >>
char *rep = pThe_path;
while((rep = strchr(rep, '\\')) != NULL) {
char* rep = pThe_path;
while ((rep = strchr(rep, '\\')) != NULL) {
*rep++ = '/';
}
// <<
@ -1060,28 +1121,28 @@ int PDCheckDriveExists(char *pThe_path) {
// Offset: 16388
// Size: 102
// EAX: pPrims
int OpacityInPrims(br_token_value *pPrims) {
int OpacityInPrims(br_token_value* pPrims) {
}
// Offset: 16492
// Size: 97
// EAX: pMaterial
int AlreadyBlended(br_material *pMaterial) {
int AlreadyBlended(br_material* pMaterial) {
}
// Offset: 16592
// Size: 148
// EAX: pMaterial
// EDX: pPercent
void BlendifyMaterialTablishly(br_material *pMaterial, int pPercent) {
char *s;
void BlendifyMaterialTablishly(br_material* pMaterial, int pPercent) {
char* s;
}
// Offset: 16740
// Size: 110
// EAX: pMaterial
// EDX: pPercent
void BlendifyMaterialPrimitively(br_material *pMaterial, int pPercent) {
void BlendifyMaterialPrimitively(br_material* pMaterial, int pPercent) {
static br_token_value alpha25[3];
static br_token_value alpha50[3];
static br_token_value alpha75[3];
@ -1091,6 +1152,5 @@ void BlendifyMaterialPrimitively(br_material *pMaterial, int pPercent) {
// Size: 73
// EAX: pMaterial
// EDX: pPercent
void BlendifyMaterial(br_material *pMaterial, int pPercent) {
void BlendifyMaterial(br_material* pMaterial, int pPercent) {
}

View File

@ -1,8 +1,11 @@
#ifndef _UTILITY_H_
#define _UTILITY_H_
#include "dr_types.h"
#include "br_types.h"
#include "dr_types.h"
extern char* gMisc_strings[250];
extern int gEncryption_method;
// Offset: 0
// Size: 144
@ -15,7 +18,7 @@ double sqr(double pN);
// Offset: 196
// Size: 542
// EAX: pS
void EncodeLine(char *pS);
void EncodeLine(char* pS);
// Offset: 740
// Size: 73
@ -53,20 +56,20 @@ br_scalar SRandomPosNeg(br_scalar pN);
// Size: 506
// EAX: pF
// EDX: pS
char* GetALineWithNoPossibleService(FILE *pF, /*unsigned*/ char *pS);
char* GetALineWithNoPossibleService(FILE* pF, /*unsigned*/ char* pS);
// Offset: 1744
// Size: 60
// EAX: pF
// EDX: pS
char* GetALineAndDontArgue(FILE *pF, char *pS);
char* GetALineAndDontArgue(FILE* pF, char* pS);
// Offset: 1804
// Size: 86
// EAX: pDestn_str
// EDX: pStr_1
// EBX: pStr_2
void PathCat(char *pDestn_str, char *pStr_1, char *pStr_2);
void PathCat(char* pDestn_str, char* pStr_1, char* pStr_2);
// Offset: 1892
// Size: 96
@ -79,7 +82,7 @@ float tandeg(float pAngle);
// Offset: 2084
// Size: 80
// EAX: pF
tU32 GetFileLength(FILE *pF);
tU32 GetFileLength(FILE* pF);
// Offset: 2164
// Size: 68
@ -92,7 +95,7 @@ int BooleanTo1Or0(int pB);
// EDX: pW
// EBX: pH
// ECX: pPixels
br_pixelmap* DRPixelmapAllocate(br_uint_8 pType, br_uint_16 pW, br_uint_16 pH, void *pPixels, int pFlags);
br_pixelmap* DRPixelmapAllocate(br_uint_8 pType, br_uint_16 pW, br_uint_16 pH, void* pPixels, int pFlags);
// Offset: 2348
// Size: 118
@ -100,7 +103,7 @@ br_pixelmap* DRPixelmapAllocate(br_uint_8 pType, br_uint_16 pW, br_uint_16 pH, v
// EDX: pX
// EBX: pY
// ECX: pW
br_pixelmap* DRPixelmapAllocateSub(br_pixelmap *pPm, br_uint_16 pX, br_uint_16 pY, br_uint_16 pW, br_uint_16 pH);
br_pixelmap* DRPixelmapAllocateSub(br_pixelmap* pPm, br_uint_16 pX, br_uint_16 pY, br_uint_16 pW, br_uint_16 pH);
// Offset: 2468
// Size: 195
@ -108,7 +111,7 @@ br_pixelmap* DRPixelmapAllocateSub(br_pixelmap *pPm, br_uint_16 pX, br_uint_16 p
// EDX: pMatch_type
// EBX: pWidth
// ECX: pHeight
br_pixelmap* DRPixelmapMatchSized(br_pixelmap *pSrc, tU8 pMatch_type, tS32 pWidth, tS32 pHeight);
br_pixelmap* DRPixelmapMatchSized(br_pixelmap* pSrc, tU8 pMatch_type, tS32 pWidth, tS32 pHeight);
// Offset: 2664
// Size: 357
@ -116,43 +119,43 @@ br_pixelmap* DRPixelmapMatchSized(br_pixelmap *pSrc, tU8 pMatch_type, tS32 pWidt
// EDX: pSrc
// EBX: pSrc_width
// ECX: pSrc_height
void CopyDoubled8BitTo16BitRectangle(br_pixelmap *pDst, br_pixelmap *pSrc, int pSrc_width, int pSrc_height, int pDst_x, int pDst_y, br_pixelmap *pPalette);
void CopyDoubled8BitTo16BitRectangle(br_pixelmap* pDst, br_pixelmap* pSrc, int pSrc_width, int pSrc_height, int pDst_x, int pDst_y, br_pixelmap* pPalette);
// Offset: 3024
// Size: 262
// EAX: pSrc
// EDX: pWidth
// EBX: pHeight
br_pixelmap* Scale8BitPixelmap(br_pixelmap *pSrc, int pWidth, int pHeight);
br_pixelmap* Scale8BitPixelmap(br_pixelmap* pSrc, int pWidth, int pHeight);
// Offset: 3288
// Size: 390
// EAX: pSrc
// EDX: pN
br_pixelmap* Tile8BitPixelmap(br_pixelmap *pSrc, int pN);
br_pixelmap* Tile8BitPixelmap(br_pixelmap* pSrc, int pN);
// Offset: 3680
// Size: 83
// EAX: pName
// EDX: pList
tException_list FindExceptionInList(char *pName, tException_list pList);
tException_list FindExceptionInList(char* pName, tException_list pList);
// Offset: 3764
// Size: 492
// EAX: pSrc
br_pixelmap* PurifiedPixelmap(br_pixelmap *pSrc);
br_pixelmap* PurifiedPixelmap(br_pixelmap* pSrc);
// Offset: 4256
// Size: 105
// EAX: pFile_name
br_pixelmap* DRPixelmapLoad(char *pFile_name);
br_pixelmap* DRPixelmapLoad(char* pFile_name);
// Offset: 4364
// Size: 174
// EAX: pFile_name
// EDX: pPixelmaps
// EBX: pNum
br_uint_32 DRPixelmapLoadMany(char *pFile_name, br_pixelmap **pPixelmaps, br_uint_16 pNum);
br_uint_32 DRPixelmapLoadMany(char* pFile_name, br_pixelmap** pPixelmaps, br_uint_16 pNum);
// Offset: 4540
// Size: 67
@ -164,17 +167,17 @@ void WaitFor(tU32 pDelay);
// EAX: pActor
// EDX: callback
// EBX: arg
br_uint_32 DRActorEnumRecurse(br_actor *pActor, br_actor_enum_cbfn *callback, void *arg);
br_uint_32 DRActorEnumRecurse(br_actor* pActor, br_actor_enum_cbfn* callback, void* arg);
// Offset: 4744
// Size: 77
br_uint_32 CompareActorID(br_actor *pActor, void *pArg);
br_uint_32 CompareActorID(br_actor* pActor, void* pArg);
// Offset: 4824
// Size: 60
// EAX: pSearch_root
// EDX: pName
br_actor* DRActorFindRecurse(br_actor *pSearch_root, char *pName);
br_actor* DRActorFindRecurse(br_actor* pSearch_root, char* pName);
// Offset: 4884
// Size: 156
@ -182,7 +185,7 @@ br_actor* DRActorFindRecurse(br_actor *pSearch_root, char *pName);
// EDX: pMat
// EBX: pCall_back
// ECX: pArg
br_uint_32 DRActorEnumRecurseWithMat(br_actor *pActor, br_material *pMat, br_uint_32 (*pCall_back)(br_actor*, br_material*, void*), void *pArg);
br_uint_32 DRActorEnumRecurseWithMat(br_actor* pActor, br_material* pMat, br_uint_32 (*pCall_back)(br_actor*, br_material*, void*), void* pArg);
// Offset: 5040
// Size: 188
@ -190,7 +193,7 @@ br_uint_32 DRActorEnumRecurseWithMat(br_actor *pActor, br_material *pMat, br_uin
// EDX: pMatrix
// EBX: pCall_back
// ECX: pArg
br_uint_32 DRActorEnumRecurseWithTrans(br_actor *pActor, br_matrix34 *pMatrix, br_uint_32 (*pCall_back)(br_actor*, br_matrix34*, void*), void *pArg);
br_uint_32 DRActorEnumRecurseWithTrans(br_actor* pActor, br_matrix34* pMatrix, br_uint_32 (*pCall_back)(br_actor*, br_matrix34*, void*), void* pArg);
// Offset: 5228
// Size: 89
@ -205,17 +208,17 @@ float fsign(float pNumber);
// Size: 210
// EAX: pPrefix
// EDX: pExtension
FILE* OpenUniqueFileB(char *pPrefix, char *pExtension);
FILE* OpenUniqueFileB(char* pPrefix, char* pExtension);
// Offset: 5632
// Size: 572
// EAX: pF
void PrintScreenFile(FILE *pF);
void PrintScreenFile(FILE* pF);
// Offset: 6204
// Size: 554
// EAX: pF
void PrintScreenFile16(FILE *pF);
void PrintScreenFile16(FILE* pF);
// Offset: 6760
// Size: 95
@ -240,7 +243,7 @@ void AddLostTime(tU32 pLost_time);
// EDX: pStr
// EBX: pFudge_colon
// ECX: pForce_colon
void TimerString(tU32 pTime, char *pStr, int pFudge_colon, int pForce_colon);
void TimerString(tU32 pTime, char* pStr, int pFudge_colon, int pForce_colon);
// Offset: 7256
// Size: 55
@ -251,32 +254,32 @@ char* GetMiscString(int pIndex);
// Size: 58
// EAX: pIndex
// EDX: pStr
void GetCopyOfMiscString(int pIndex, char *pStr);
void GetCopyOfMiscString(int pIndex, char* pStr);
// Offset: 7372
// Size: 113
// EAX: pPeriod
// EDX: pLast_change
// EBX: pCurrent_state
int Flash(tU32 pPeriod, tU32 *pLast_change, int *pCurrent_state);
int Flash(tU32 pPeriod, tU32* pLast_change, int* pCurrent_state);
// Offset: 7488
// Size: 225
// EAX: pDst
// EDX: pSrc
void MaterialCopy(br_material *pDst, br_material *pSrc);
void MaterialCopy(br_material* pDst, br_material* pSrc);
// Offset: 7716
// Size: 139
// EAX: pColour_1
// EDX: pColour_2
double RGBDifferenceSqr(tRGB_colour *pColour_1, tRGB_colour *pColour_2);
double RGBDifferenceSqr(tRGB_colour* pColour_1, tRGB_colour* pColour_2);
// Offset: 7856
// Size: 200
// EAX: pRGB_colour
// EDX: pPalette
int FindBestMatch(tRGB_colour *pRGB_colour, br_pixelmap *pPalette);
int FindBestMatch(tRGB_colour* pRGB_colour, br_pixelmap* pPalette);
// Offset: 8056
// Size: 232
@ -284,7 +287,7 @@ int FindBestMatch(tRGB_colour *pRGB_colour, br_pixelmap *pPalette);
// EDX: pR
// EBX: pG
// ECX: pB
void BuildShadeTablePath(char *pThe_path, int pR, int pG, int pB);
void BuildShadeTablePath(char* pThe_path, int pR, int pG, int pB);
// Offset: 8288
// Size: 80
@ -299,7 +302,7 @@ br_pixelmap* LoadGeneratedShadeTable(int pR, int pG, int pB);
// EDX: pR
// EBX: pG
// ECX: pB
void SaveGeneratedShadeTable(br_pixelmap *pThe_table, int pR, int pG, int pB);
void SaveGeneratedShadeTable(br_pixelmap* pThe_table, int pR, int pG, int pB);
// Offset: 8448
// Size: 106
@ -307,7 +310,7 @@ void SaveGeneratedShadeTable(br_pixelmap *pThe_table, int pR, int pG, int pB);
// EDX: pPalette
// EBX: pRed_mix
// ECX: pGreen_mix
br_pixelmap* GenerateShadeTable(int pHeight, br_pixelmap *pPalette, int pRed_mix, int pGreen_mix, int pBlue_mix, float pQuarter, float pHalf, float pThree_quarter);
br_pixelmap* GenerateShadeTable(int pHeight, br_pixelmap* pPalette, int pRed_mix, int pGreen_mix, int pBlue_mix, float pQuarter, float pHalf, float pThree_quarter);
// Offset: 8556
// Size: 761
@ -315,7 +318,7 @@ br_pixelmap* GenerateShadeTable(int pHeight, br_pixelmap *pPalette, int pRed_mix
// EDX: pPalette
// EBX: pRed_mix
// ECX: pGreen_mix
br_pixelmap* GenerateDarkenedShadeTable(int pHeight, br_pixelmap *pPalette, int pRed_mix, int pGreen_mix, int pBlue_mix, float pQuarter, float pHalf, float pThree_quarter, br_scalar pDarken);
br_pixelmap* GenerateDarkenedShadeTable(int pHeight, br_pixelmap* pPalette, int pRed_mix, int pGreen_mix, int pBlue_mix, float pQuarter, float pHalf, float pThree_quarter, br_scalar pDarken);
// Offset: 9320
// Size: 92
@ -326,25 +329,25 @@ void PossibleService();
// EAX: pA
// EDX: pB
// EBX: pC
void DRMatrix34TApplyP(br_vector3 *pA, br_vector3 *pB, br_matrix34 *pC);
void DRMatrix34TApplyP(br_vector3* pA, br_vector3* pB, br_matrix34* pC);
// Offset: 9604
// Size: 132
// EAX: pPal
// EDX: pEntry
tU16 PaletteEntry16Bit(br_pixelmap *pPal, int pEntry);
tU16 PaletteEntry16Bit(br_pixelmap* pPal, int pEntry);
// Offset: 9736
// Size: 210
// EAX: pSrc
br_pixelmap* PaletteOf16Bits(br_pixelmap *pSrc);
br_pixelmap* PaletteOf16Bits(br_pixelmap* pSrc);
// Offset: 9948
// Size: 219
// EAX: pDst
// EDX: pSrc
// EBX: pPalette
void Copy8BitTo16Bit(br_pixelmap *pDst, br_pixelmap *pSrc, br_pixelmap *pPalette);
void Copy8BitTo16Bit(br_pixelmap* pDst, br_pixelmap* pSrc, br_pixelmap* pPalette);
// Offset: 10168
// Size: 558
@ -352,7 +355,7 @@ void Copy8BitTo16Bit(br_pixelmap *pDst, br_pixelmap *pSrc, br_pixelmap *pPalette
// EDX: pDst_x
// EBX: pDst_y
// ECX: pSrc
void Copy8BitTo16BitRectangle(br_pixelmap *pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap *pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, br_pixelmap *pPalette);
void Copy8BitTo16BitRectangle(br_pixelmap* pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap* pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, br_pixelmap* pPalette);
// Offset: 10728
// Size: 518
@ -360,7 +363,7 @@ void Copy8BitTo16BitRectangle(br_pixelmap *pDst, tS16 pDst_x, tS16 pDst_y, br_pi
// EDX: pDst_x
// EBX: pDst_y
// ECX: pSrc
void Copy8BitTo16BitRectangleWithTransparency(br_pixelmap *pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap *pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, br_pixelmap *pPalette);
void Copy8BitTo16BitRectangleWithTransparency(br_pixelmap* pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap* pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, br_pixelmap* pPalette);
// Offset: 11248
// Size: 279
@ -368,7 +371,7 @@ void Copy8BitTo16BitRectangleWithTransparency(br_pixelmap *pDst, tS16 pDst_x, tS
// EDX: pDst_x
// EBX: pDst_y
// ECX: pSrc
void Copy8BitToOnscreen16BitRectangleWithTransparency(br_pixelmap *pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap *pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, br_pixelmap *pPalette);
void Copy8BitToOnscreen16BitRectangleWithTransparency(br_pixelmap* pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap* pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, br_pixelmap* pPalette);
// Offset: 11528
// Size: 601
@ -376,7 +379,7 @@ void Copy8BitToOnscreen16BitRectangleWithTransparency(br_pixelmap *pDst, tS16 pD
// EDX: pDst_x
// EBX: pDst_y
// ECX: pSrc
void Copy8BitRectangleTo16BitRhombusWithTransparency(br_pixelmap *pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap *pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, tX1616 pShear, br_pixelmap *pPalette);
void Copy8BitRectangleTo16BitRhombusWithTransparency(br_pixelmap* pDst, tS16 pDst_x, tS16 pDst_y, br_pixelmap* pSrc, tS16 pSrc_x, tS16 pSrc_y, tS16 pWidth, tS16 pHeight, tX1616 pShear, br_pixelmap* pPalette);
// Offset: 12132
// Size: 173
@ -384,13 +387,13 @@ void Copy8BitRectangleTo16BitRhombusWithTransparency(br_pixelmap *pDst, tS16 pDs
// EDX: dx
// EBX: dy
// ECX: src
void DRPixelmapRectangleCopy(br_pixelmap *dst, br_int_16 dx, br_int_16 dy, br_pixelmap *src, br_int_16 sx, br_int_16 sy, br_uint_16 w, br_uint_16 h);
void DRPixelmapRectangleCopy(br_pixelmap* dst, br_int_16 dx, br_int_16 dy, br_pixelmap* src, br_int_16 sx, br_int_16 sy, br_uint_16 w, br_uint_16 h);
// Offset: 12308
// Size: 107
// EAX: dst
// EDX: src
void DRPixelmapCopy(br_pixelmap *dst, br_pixelmap *src);
void DRPixelmapCopy(br_pixelmap* dst, br_pixelmap* src);
// Offset: 12416
// Size: 82
@ -398,112 +401,112 @@ void DRPixelmapCopy(br_pixelmap *dst, br_pixelmap *src);
// EDX: x
// EBX: y
// ECX: w
void DRPixelmapRectangleFill(br_pixelmap *dst, br_int_16 x, br_int_16 y, br_uint_16 w, br_uint_16 h, br_uint_32 colour);
void DRPixelmapRectangleFill(br_pixelmap* dst, br_int_16 x, br_int_16 y, br_uint_16 w, br_uint_16 h, br_uint_32 colour);
// Offset: 12500
// Size: 156
// EAX: pPoint
// EDX: pNormal
int NormalSideOfPlane(br_vector3 *pPoint, br_vector3 *pNormal, br_scalar pD);
int NormalSideOfPlane(br_vector3* pPoint, br_vector3* pNormal, br_scalar pD);
// Offset: 12656
// Size: 351
// EAX: pMaterial
br_material* DRMaterialClone(br_material *pMaterial);
br_material* DRMaterialClone(br_material* pMaterial);
// Offset: 13008
// Size: 93
// EAX: s
void StripCR(char *s);
void StripCR(char* s);
// Offset: 13104
// Size: 132
void SubsStringJob(char *pStr, ...);
void SubsStringJob(char* pStr, ...);
// Offset: 13236
// Size: 454
// EAX: pS
void DecodeLine2(char *pS);
void DecodeLine2(char* pS);
// Offset: 13692
// Size: 304
// EAX: pS
void EncodeLine2(char *pS);
void EncodeLine2(char* pS);
// Offset: 13996
// Size: 553
// EAX: pThe_path
void EncodeFile(char *pThe_path);
void EncodeFile(char* pThe_path);
// Offset: 14552
// Size: 513
// EAX: pThe_path
void EncodeFileWrapper(char *pThe_path);
void EncodeFileWrapper(char* pThe_path);
// Offset: 15068
// Size: 72
// EAX: pThe_path
void EncodeAllFilesInDirectory(char *pThe_path);
void EncodeAllFilesInDirectory(char* pThe_path);
// Offset: 15140
// Size: 89
// EAX: pF
void SkipNLines(FILE *pF);
void SkipNLines(FILE* pF);
// Offset: 15232
// Size: 118
// EAX: p1
// EDX: p2
int DRStricmp(char *p1, char *p2);
int DRStricmp(char* p1, char* p2);
// Offset: 15352
// Size: 559
// EAX: pArray
// EDX: pCount
void GlorifyMaterial(br_material **pArray, int pCount);
void GlorifyMaterial(br_material** pArray, int pCount);
// Offset: 15912
// Size: 178
// EAX: pArray
// EDX: pN
void WhitenVertexRGB(br_model **pArray, int pN);
void WhitenVertexRGB(br_model** pArray, int pN);
// Offset: 16092
// Size: 239
// EAX: pPalette
void NobbleNonzeroBlacks(br_pixelmap *pPalette);
void NobbleNonzeroBlacks(br_pixelmap* pPalette);
// Offset: 16332
// Size: 55
// EAX: pThe_path
int PDCheckDriveExists(char *pThe_path);
int PDCheckDriveExists(char* pThe_path);
// Offset: 16388
// Size: 102
// EAX: pPrims
int OpacityInPrims(br_token_value *pPrims);
int OpacityInPrims(br_token_value* pPrims);
// Offset: 16492
// Size: 97
// EAX: pMaterial
int AlreadyBlended(br_material *pMaterial);
int AlreadyBlended(br_material* pMaterial);
// Offset: 16592
// Size: 148
// EAX: pMaterial
// EDX: pPercent
void BlendifyMaterialTablishly(br_material *pMaterial, int pPercent);
void BlendifyMaterialTablishly(br_material* pMaterial, int pPercent);
// Offset: 16740
// Size: 110
// EAX: pMaterial
// EDX: pPercent
void BlendifyMaterialPrimitively(br_material *pMaterial, int pPercent);
void BlendifyMaterialPrimitively(br_material* pMaterial, int pPercent);
// Offset: 16852
// Size: 73
// EAX: pMaterial
// EDX: pPercent
void BlendifyMaterial(br_material *pMaterial, int pPercent);
void BlendifyMaterial(br_material* pMaterial, int pPercent);
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,316 @@
// Based on https://gist.github.com/jvranish/4441299
#include <assert.h>
#include <errno.h>
#include <signal.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef _WIN32
#include <imagehlp.h>
#include <windows.h>
#else
#include <err.h>
#include <execinfo.h>
#endif
static int stack_nbr = 0;
static char _program_name[1024];
/* Resolve symbol name and source location given the path to the executable
and an address */
int addr2line(char const* const program_name, void const* const addr) {
char addr2line_cmd[512] = { 0 };
/* have addr2line map the address to the relent line in the code */
#ifdef __APPLE__
/* apple does things differently... */
sprintf(addr2line_cmd, "atos -o %.256s %p", program_name, addr);
#else
sprintf(addr2line_cmd, "addr2line -f -p -e %.256s %p", program_name, addr);
#endif
fprintf(stderr, "%d: ", stack_nbr++);
return system(addr2line_cmd);
}
#ifdef _WIN32
void windows_print_stacktrace(CONTEXT* context) {
SymInitialize(GetCurrentProcess(), 0, true);
STACKFRAME frame = { 0 };
/* setup initial stack frame */
frame.AddrPC.Offset = context->Eip;
frame.AddrPC.Mode = AddrModeFlat;
frame.AddrStack.Offset = context->Esp;
frame.AddrStack.Mode = AddrModeFlat;
frame.AddrFrame.Offset = context->Ebp;
frame.AddrFrame.Mode = AddrModeFlat;
while (StackWalk(IMAGE_FILE_MACHINE_I386,
GetCurrentProcess(),
GetCurrentThread(),
&frame,
context,
0,
SymFunctionTableAccess,
SymGetModuleBase,
0)) {
addr2line(_program_name, (void*)frame.AddrPC.Offset);
}
SymCleanup(GetCurrentProcess());
}
LONG WINAPI windows_exception_handler(EXCEPTION_POINTERS* ExceptionInfo) {
switch (ExceptionInfo->ExceptionRecord->ExceptionCode) {
case EXCEPTION_ACCESS_VIOLATION:
fputs("Error: EXCEPTION_ACCESS_VIOLATION\n", stderr);
break;
case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
fputs("Error: EXCEPTION_ARRAY_BOUNDS_EXCEEDED\n", stderr);
break;
case EXCEPTION_BREAKPOINT:
fputs("Error: EXCEPTION_BREAKPOINT\n", stderr);
break;
case EXCEPTION_DATATYPE_MISALIGNMENT:
fputs("Error: EXCEPTION_DATATYPE_MISALIGNMENT\n", stderr);
break;
case EXCEPTION_FLT_DENORMAL_OPERAND:
fputs("Error: EXCEPTION_FLT_DENORMAL_OPERAND\n", stderr);
break;
case EXCEPTION_FLT_DIVIDE_BY_ZERO:
fputs("Error: EXCEPTION_FLT_DIVIDE_BY_ZERO\n", stderr);
break;
case EXCEPTION_FLT_INEXACT_RESULT:
fputs("Error: EXCEPTION_FLT_INEXACT_RESULT\n", stderr);
break;
case EXCEPTION_FLT_INVALID_OPERATION:
fputs("Error: EXCEPTION_FLT_INVALID_OPERATION\n", stderr);
break;
case EXCEPTION_FLT_OVERFLOW:
fputs("Error: EXCEPTION_FLT_OVERFLOW\n", stderr);
break;
case EXCEPTION_FLT_STACK_CHECK:
fputs("Error: EXCEPTION_FLT_STACK_CHECK\n", stderr);
break;
case EXCEPTION_FLT_UNDERFLOW:
fputs("Error: EXCEPTION_FLT_UNDERFLOW\n", stderr);
break;
case EXCEPTION_ILLEGAL_INSTRUCTION:
fputs("Error: EXCEPTION_ILLEGAL_INSTRUCTION\n", stderr);
break;
case EXCEPTION_IN_PAGE_ERROR:
fputs("Error: EXCEPTION_IN_PAGE_ERROR\n", stderr);
break;
case EXCEPTION_INT_DIVIDE_BY_ZERO:
fputs("Error: EXCEPTION_INT_DIVIDE_BY_ZERO\n", stderr);
break;
case EXCEPTION_INT_OVERFLOW:
fputs("Error: EXCEPTION_INT_OVERFLOW\n", stderr);
break;
case EXCEPTION_INVALID_DISPOSITION:
fputs("Error: EXCEPTION_INVALID_DISPOSITION\n", stderr);
break;
case EXCEPTION_NONCONTINUABLE_EXCEPTION:
fputs("Error: EXCEPTION_NONCONTINUABLE_EXCEPTION\n", stderr);
break;
case EXCEPTION_PRIV_INSTRUCTION:
fputs("Error: EXCEPTION_PRIV_INSTRUCTION\n", stderr);
break;
case EXCEPTION_SINGLE_STEP:
fputs("Error: EXCEPTION_SINGLE_STEP\n", stderr);
break;
case EXCEPTION_STACK_OVERFLOW:
fputs("Error: EXCEPTION_STACK_OVERFLOW\n", stderr);
break;
default:
fputs("Error: Unrecognized Exception\n", stderr);
break;
}
fflush(stderr);
/* If this is a stack overflow then we can't walk the stack, so just show
where the error happened */
if (EXCEPTION_STACK_OVERFLOW != ExceptionInfo->ExceptionRecord->ExceptionCode) {
windows_print_stacktrace(ExceptionInfo->ContextRecord);
} else {
addr2line(_program_name, (void*)ExceptionInfo->ContextRecord->Eip);
}
return EXCEPTION_EXECUTE_HANDLER;
}
void set_signal_handler(char* program_name) {
strcpy(_program_name, program_name);
SetUnhandledExceptionFilter(windows_exception_handler);
}
#else
#define MAX_STACK_FRAMES 64
static void* stack_traces[MAX_STACK_FRAMES];
void posix_print_stack_trace() {
int i, trace_size = 0;
char** messages = (char**)NULL;
fputs("\nStack trace:\n", stderr);
trace_size = backtrace(stack_traces, MAX_STACK_FRAMES);
messages = backtrace_symbols(stack_traces, trace_size);
/* skip the first couple stack frames (as they are this function and
our handler) and also skip the last frame as it's (always?) junk. */
for (i = 3; i < (trace_size - 1); ++i) {
if (addr2line(_program_name, stack_traces[i]) != 0) {
printf(" error determining line # for: %s\n", messages[i]);
}
}
if (messages) {
free(messages);
}
}
void posix_signal_handler(int sig, siginfo_t* siginfo, void* context) {
(void)context;
fputs("\n******************\n", stderr);
switch (sig) {
case SIGSEGV:
fputs("Caught SIGSEGV\n", stderr);
break;
case SIGINT:
fputs("Caught SIGINT\n", stderr);
break;
case SIGFPE:
switch (siginfo->si_code) {
case FPE_INTDIV:
fputs("Caught SIGFPE: FPE_INTDIV\n", stderr);
break;
case FPE_INTOVF:
fputs("Caught SIGFPE: FPE_INTOVF\n", stderr);
break;
case FPE_FLTDIV:
fputs("Caught SIGFPE: FPE_FLTDIV\n", stderr);
break;
case FPE_FLTOVF:
fputs("Caught SIGFPE: FPE_FLTOVF\n", stderr);
break;
case FPE_FLTUND:
fputs("Caught SIGFPE: FPE_FLTUND\n", stderr);
break;
case FPE_FLTRES:
fputs("Caught SIGFPE: FPE_FLTRES\n", stderr);
break;
case FPE_FLTINV:
fputs("Caught SIGFPE: FPE_FLTINV\n", stderr);
break;
case FPE_FLTSUB:
fputs("Caught SIGFPE: FPE_FLTSUB\n", stderr);
break;
default:
fputs("Caught SIGFPE: Arithmetic Exception\n", stderr);
break;
}
case SIGILL:
switch (siginfo->si_code) {
case ILL_ILLOPC:
fputs("Caught SIGILL: ILL_ILLOPC\n", stderr);
break;
case ILL_ILLOPN:
fputs("Caught SIGILL: ILL_ILLOPN\n", stderr);
break;
case ILL_ILLADR:
fputs("Caught SIGILL: ILL_ILLADR\n", stderr);
break;
case ILL_ILLTRP:
fputs("Caught SIGILL: ILL_ILLTRP\n", stderr);
break;
case ILL_PRVOPC:
fputs("Caught SIGILL: ILL_PRVOPC\n", stderr);
break;
case ILL_PRVREG:
fputs("Caught SIGILL: ILL_PRVREG\n", stderr);
break;
case ILL_COPROC:
fputs("Caught SIGILL: ILL_COPROC\n", stderr);
break;
case ILL_BADSTK:
fputs("Caught SIGILL: ILL_BADSTK\n", stderr);
break;
default:
fputs("Caught SIGILL: Illegal Instruction\n", stderr);
break;
}
break;
case SIGTERM:
fputs("Caught SIGTERM\n", stderr);
break;
case SIGABRT:
fputs("Caught SIGABRT\n", stderr);
break;
default:
break;
}
fputs("******************\n", stderr);
posix_print_stack_trace();
exit(1);
}
static uint8_t alternate_stack[SIGSTKSZ];
void set_signal_handler(char* program_name) {
strcpy(_program_name, program_name);
/* setup alternate stack */
{
stack_t ss = {};
/* malloc is usually used here, I'm not 100% sure my static allocation
is valid but it seems to work just fine. */
ss.ss_sp = (void*)alternate_stack;
ss.ss_size = SIGSTKSZ;
ss.ss_flags = 0;
if (sigaltstack(&ss, NULL) != 0) {
err(1, "sigaltstack");
}
}
/* register our signal handlers */
{
struct sigaction sig_action = {};
sig_action.sa_sigaction = posix_signal_handler;
sigemptyset(&sig_action.sa_mask);
#ifdef __APPLE__
/* for some reason we backtrace() doesn't work on osx
when we use an alternate stack */
sig_action.sa_flags = SA_SIGINFO;
#else
sig_action.sa_flags = SA_SIGINFO | SA_ONSTACK;
#endif
if (sigaction(SIGSEGV, &sig_action, NULL) != 0) {
err(1, "sigaction");
}
if (sigaction(SIGFPE, &sig_action, NULL) != 0) {
err(1, "sigaction");
}
if (sigaction(SIGINT, &sig_action, NULL) != 0) {
err(1, "sigaction");
}
if (sigaction(SIGILL, &sig_action, NULL) != 0) {
err(1, "sigaction");
}
if (sigaction(SIGTERM, &sig_action, NULL) != 0) {
err(1, "sigaction");
}
if (sigaction(SIGABRT, &sig_action, NULL) != 0) {
err(1, "sigaction");
}
}
}
#endif

View File

@ -1,3 +1,4 @@
#include "new/stack_trace_handler.h"
#include "pc-dos/dossys.h"
extern int _main(int pArgc, char* pArgv[]);
@ -5,6 +6,7 @@ extern int _main(int pArgc, char* pArgv[]);
// EAX: pArgc
// EDX: pArgv
// Moved from pc-dos/dossys.c to enable unit testing
int main(int pArgc, char* pArgv[]) {
return _main(pArgc, pArgv);
int main(int argc, char* argv[]) {
set_signal_handler(argv[0]);
return _main(argc, argv);
}

View File

@ -6,13 +6,7 @@
#include "common/globvars.h"
#include "pc-dos/dossys.h"
void test_dossys_PDInitialiseSystem() {
FILE *file = fopen("/tmp/KEYBOARD.COK", "wt");
fprintf(file,"abcdef");
fclose(file);
PDInitialiseSystem();
TEST_ASSERT_EQUAL_STRING("abc", gASCII_table);
TEST_ASSERT_EQUAL_STRING("def", gASCII_shift_table);

View File

@ -4,28 +4,47 @@
#include <unistd.h>
#include "common/globvars.h"
#include "common/init.h"
#include "common/loading.h"
#include "common/newgame.h"
void test_loading_GetCDPathFromPathsTxtFile() {
int result;
tPath_name cd_path;
unlink("/tmp/PATHS.TXT");
// should return false, path does not exist
result = GetCDPathFromPathsTxtFile(cd_path);
TEST_ASSERT_EQUAL_INT(0, result);
FILE *file = fopen("/tmp/PATHS.TXT","wt");
fprintf(file,"test_cd_path\r\n");
fclose(file);
result = GetCDPathFromPathsTxtFile(cd_path);
TEST_ASSERT_EQUAL_INT(1, result);
TEST_ASSERT_EQUAL_STRING("test_cd_path", cd_path);
TEST_ASSERT_EQUAL_STRING(".\\DATA\\MINICD", cd_path);
}
void test_loading_OldDRfopen() {
FILE* f;
f = OldDRfopen("DATA/i-dont-exist", "rt");
TEST_ASSERT_NULL(f);
f = OldDRfopen("DATA/GENERAL.TXT", "rt");
TEST_ASSERT_NOT_NULL(f);
}
void test_loading_LoadGeneralParameters() {
LoadGeneralParameters();
TEST_ASSERT_EQUAL_FLOAT(0.02f, gCamera_hither);
TEST_ASSERT_EQUAL_INT(7500, gInitial_credits[0]);
TEST_ASSERT_EQUAL_INT(5000, gInitial_credits[1]);
TEST_ASSERT_EQUAL_INT(3000, gInitial_credits[2]);
TEST_ASSERT_EQUAL_STRING("BLKEAGLE.TXT", gBasic_car_names[0]);
TEST_ASSERT_EQUAL_FLOAT(0.2f, gDefault_default_water_spec_vol.gravity_multiplier);
TEST_ASSERT_EQUAL_FLOAT(50.0f, gDefault_default_water_spec_vol.viscosity_multiplier);
TEST_ASSERT_EQUAL_INT(0, gInitial_net_credits[0]);
TEST_ASSERT_EQUAL_INT(2000, gInitial_net_credits[1]);
TEST_ASSERT_EQUAL_INT(1, gGravity_multiplier);
}
void test_loading_suite() {
RUN_TEST(test_loading_GetCDPathFromPathsTxtFile);
RUN_TEST(test_loading_OldDRfopen);
RUN_TEST(test_loading_LoadGeneralParameters);
}

View File

@ -1,10 +1,22 @@
#include "framework/unity.h"
#include <string.h>
#include "common/utility.h"
#include <string.h>
void test_utility_EncodeLinex() {
char buf[50];
// first line of GENERAL.TXT, "@" prefix and line ending stripped
char input[] = "\x29\x2a\x9c\x22\x61\x4d\x5e\x5f\x60\x34\x64\x57\x8d\x2b\x82\x7b\x33\x4c";
strcpy(buf, input);
EncodeLine(buf);
//TEST_ASSERT_EQUAL_INT(2, gEncryption_method);
char expected[] = "0.01\t\t\t\t\t// Hither";
TEST_ASSERT_EQUAL_STRING(expected, buf);
}
void test_utility_DecodeLine2() {
char buf[50];
gEncryption_method = 1;
// first line of GENERAL.TXT, "@" prefix and line ending stripped
char input[] = "\x29\x2a\x9c\x22\x61\x4d\x5e\x5f\x60\x34\x64\x57\x8d\x2b\x82\x7b\x33\x4c";
strcpy(buf, input);
@ -32,14 +44,14 @@ void test_utility_StripCR() {
}
void test_utility_GetALineWithNoPossibleService() {
FILE *file = fopen("/tmp/testfile","wt");
fprintf(file,"hello world\r\n space_prefixed\r\n\r\n\ttab_prefixed\r\n$ignored_prefix\r\nlast_line");
FILE* file = fopen("/tmp/testfile", "wt");
fprintf(file, "hello world\r\n space_prefixed\r\n\r\n\ttab_prefixed\r\n$ignored_prefix\r\nlast_line");
fclose(file);
file = fopen("/tmp/testfile","rt");
file = fopen("/tmp/testfile", "rt");
char s[256];
char *result = GetALineWithNoPossibleService(file, s);
char* result = GetALineWithNoPossibleService(file, s);
TEST_ASSERT_NOT_NULL(result);
TEST_ASSERT_EQUAL_STRING("hello world", s);
@ -69,6 +81,7 @@ void test_utility_PathCat() {
}
void test_utility_suite() {
RUN_TEST(test_utility_EncodeLinex);
RUN_TEST(test_utility_DecodeLine2);
RUN_TEST(test_utility_EncodeLine2);
RUN_TEST(test_utility_StripCR);

View File

@ -16,8 +16,8 @@ DEPS := $(OBJS:.o=.d)
INC_DIRS := $(shell find $(SRC_DIR) -type d) $(BR_SRC_DIR) $(DR_SRC_DIR)
INC_FLAGS := $(addprefix -I,$(INC_DIRS))
CFLAGS ?= $(INC_FLAGS)
LDFLAGS ?= -lm
CFLAGS ?= $(INC_FLAGS) -g
LDFLAGS ?= -lm -fno-pie
.PHONY: clean build run

View File

@ -0,0 +1 @@
********************************************************************************************************************************************************************************************************************************************************************

View File

@ -0,0 +1,83 @@
@)*ś"aM^_`4dWŤ+{3L
@ź&O}n_`KŽp3VJ9P
@1™=Tx^_`K!pb5r;[Uz4<{<7B>ŽŤ
@n_`KŽ_3V3—SErq3aF<61>Ś<EFBFBD>66v8J
@+yŽ™„,“Nb5.‡‰5b”r5U@i{({BŠ ž"*}3MT;u0z“Śś
@*XM^_`K!pb?}?JNzx}g‡Ś<E280A1>
@|;o,U;)4ś?R}no`K!pb?}?JNzx}v”‡Ś<C59A>6b<36>|$žBzw55•‰<E280A2>že.“e3R
@<)4ś#M~koP+g:o,I>™„<E284A2><4žg<C5BE><EFBFBD>†„e2“avLFu}s‰<73>H—&*V`=WKw41p<31>‡„
@z ośyŽ™„,<N}RŠŤŠ“e!„f%Vxv}3J Ť„W##•g9L
@z ośyŽ™„,<N}RŠŤŠ“e!„f%Vxvu%J Ť„W##•g9L
@n2IŽ™„,“abqF%„ť•$.Vp$KTsK*|„ „—W##•g9L
@-W>™„,“aMqpB/ž<>'#š35LRh|yŹŹ<C5B9>†(!' z7PS;r<vŤš
@oqPKŽ_śy!6ž`w{?tŠB 6*)`&RNoK>}‡Ś—W##•g9L
@{ hśyŽ™„,<N}RŠŤŠ“e!„f%Vxh{;a<><E280A1>W##•g9L
@H>56ś?R}^_`K!pb$v&_Ni4>z•H”<48>7b“r5V‡h4yŠB„—<E2809E> .V;5LB4-p”BMR“$/—t3—
@"Q}ns@){>o0Y:)4ś“abqF0Ť<C5A4>3'„jv]Hh`}s‰<73>H—&*V`=WKw41p<31>‡„
@mP7s"jśyŽ™+<2B>;@4x<34>B<EFBFBD>—…e2“wvUNwx}s‰<73>H—&*V`=WKw41p<31>‡„
@>q+L")*™?Qclj`K!pb%v5QIg}e<><65>H‡™,6Vp7L‡u0t<30>‡H”<48>7b“r5V‡h4yŠB„—<E2809E> .V;!WSs4-pA
@5ť?Yak_`K!pb5a3ZNog}e<><65>H‡™,6Vp7L‡u0t<30>‡H”<48>7b“r5V‡h4yŠB„—<E2809E> .V;!WSs4-pA
@-K>5=ś?W}^_`d!eź~3žFlu/q<>†H”<48>7b<37>r%JNus}v‡<76>H”<48>7b“r5V‡h4yŠB„—<E2809E> .V;!WSs4-pA
@J>)4 !Q}nsQ+{>_śy!6ždiq9|H“ $0v2žAtf}b‡ś™"b•r$žAtf}p‡<70> R„.+švRBmq15N•<4E>†źe2“w%—
@hoL({"n)yŽ™„<E284A2><4‰|‡H“ $0v2žAtf}g‰Ž„™"b•r$žAtf}p‡<70> R„.+švRBmq15N•<4E>†źe2“w%—
@H>)4 "Q}nsQ+{>_śy!6ždiq9|H“ $0v2žAtf}g‰Ž„™"b•r$žAtf}p‡<70> R„.+švRBmq15N•<4E>†źe2“w%—
@){>o0L>)(™#aM^pOH1… &źg%žFlu/q<>†H”<48>7b•{3]Lk{4{H”<48>7b“r5V‡h4yŠB„—<E2809E> .V;!WSs4-pA
@>q+L")*™?Qclj`K!pb%v5QIg}e<><65>H‡™,6Vp7L‡u0t<30>‡H”<48>7b“r5V‡h4yŠB„—<E2809E> .V;!WSs4-pA
@5ť?Yak_`K!pb5a3ZNog}e<><65>H‡™,6Vp7L‡u0t<30>‡H”<48>7b“r5V‡h4yŠB„—<E2809E> .V;!WSs4-pA
@-K>5=ś?W}^_`d!eź~3žFlu/q<>†H”<48>7b<37>r%JNus}v‡<76>H”<48>7b“r5V‡h4yŠB„—<E2809E> .V;!WSs4-pA
@J>)4 !Q}nsQ+{>_śy!6ždiq9|H“ $0v2žAtf}b‡ś™"b•r$žAtf}p‡<70> R„.+švRBmq15N•<4E>†źe2“w%—
@hoL({"n)yŽ™„<E284A2><4‰|‡H“ $0v2žAtf}g‰Ž„™"b•r$žAtf}p‡<70> R„.+švRBmq15N•<4E>†źe2“w%—
@H>)4 "Q}nsQ+{>_śy!6ždiq9|H“ $0v2žAtf}g‰Ž„™"b•r$žAtf}p‡<70> R„.+švRBmq15N•<4E>†źe2“w%—
@){>o0L>)(™#aM^pOH1… &źg%žFlu/q<>†H”<48>7b•{3]Lk{4{H”<48>7b“r5V‡h4yŠB„—<E2809E> .V;!WSs4-pA
@nP+{"n,I>55ś#QM^_`4dWŹ7cvMSzf)5 †—W#-„33_Ds41p<31>‡„
@PxrnP7~Ž_śy!6ždiq9|H7b…v5QI42sF<46>źe ™}#M
@<)4ś?P}noL.{>_śy!6ždnz3|<7C>…H<E280A6><48>0,34QIng}s‰<73>H—&*V`=WKw41p<31>‡„
@!6ždzf.5ŤH‡„ b—`vZB}u(yR
@ś“+^ŠI“YWZAP
@ź‘.RŽMžNWZAP
@)„,“abqF$š“š b„r"[‡pz2w„ŽŤ W#-„37]Sr{35”‡<E2809D>ž<b…r WI|4uo<75><6F>‡RJe,™}3—
@5#aM^_O4R852™}3PS;z<f†—„6bź}0RR~z>p”NHNWtbK38WD~fq5XBYRJe,—`"WBi4uc‡Žť—„e “g![Bu4m;WB‰ś“esF3%VHnx95ŤA
@!pb2v0_Rw`}`<60>†Ť $6“avMW~w4tŠBžť0/“3&_Uzy8a<38><61>
@+e<_śyŽ™„,“abqF…š“<C5A1>,6Ź3;KKo}-yʇš
@,4,“aM^_`K!pb z%]Hh})lFŹťž<C5A5>,2šz3L
@#aM^_`KŽ_3V3•_U;p<x‡…ŤR‡ 0V~?RKrg8v‰ŚŚ
@+e>o.yŽ™„,“aMqpB8—“ 1a?_I;p<x‡…ŤR‡ 0V~?RKrg8v‰ŚŚ
@ś“aM^_`KŽp3Vp7SBiu}p „Ť<C5A4>e+<2B>w3F
@"aM^_`KŽ_3V3…U^;w2y‰—š
@“mU5†OśyŽ™„,“abqF5<46>ś“6!„v3P‡vu)p”‰žW1-Vf%[
@j-I>™„,“aM^_O4R$*7<>wvwc;{;5<>Śś Že,™z%[
@xooPKŽ_śyŽ™+<2B>;G2`<60>†H;3e-<2D>33FNo43zŹŤ
@<_śyŽ™„,“abqF'†•ž+'V}9WT~44{<E2809A>
@>™„,“aM^_`4dW(#v$WFw44{<E2809A>
@)(ž#Q}rjP+{"n,I>)(ž#Q}n_`d!er$JNus}x‰ŚŤW,,V}3JPtf65ŤŚ—Wm$™av[Fx|}fŤ„žW)' v:—
@=ośyŽ™„,<N}F<46>š†ž+%Vg?SB;}35<33>‡ś…<C59B>7)V~9Z‡33‰t<E280B0>EA
@=ośyŽ™„,<N}F<46>š†ž+%Vg?SB;}35<33>‡ś…<C59B>7)V~9Z‡33zžEA
@+<2B>;F8e‡šR”*130QU;q<vŽB†—<E280A0>e%—~3žSbd85N<35>š—“e2“avu0t<30>‡A
@5™?PxrhN.g9q)U971 $OxrhN.
@<N}G<><47>‡„7;Vp9MS;r2gF‡‰źe,“gvYFvq}aźŤ
@(4ś#M|noP7z>o,U?)4ś?P}noL*{>o0H>)4
@3V3•_U;g2sŚŤ<C59A>„e$—p"QU;r2gF‡‰źe,“gvYFvq}aźŤ
@?74 "OxrnN.g?q)U?71 "OxrnN.
@p3VMxv<78>gŽ`=>;/o2}žk9iY•$.3‰~9.9s.|eO{A#;+@|*c:<Ťwia
@<74 O}rnN+g?q,U?74 "O}rnN+
@<N}F…Ťš—W1#„t3JT;r2gF‡‰źe,“gvYFvq}aźŤ
@+g=s)I")(ś?W}rmT+
@go`KŽ_śV!vnNx(eF<65>Ť<EFBFBD>‡$5<>3;WI;`4x<34>B@<40>&-<2D>w%—
@/4,“aM^_O4R',!ťf&žU~g-tŚHź=b“k"LF;`4x<34>B@<40>&-<2D>w%—
@O>™„,“aMqpB,—š*b„r5[‡iu3~F‡™‡ž3#šv8J
@<™„,“aMqpB,—š*b—a;QRi41p<31>‡„
@QKŽ_śy!6žc~y25Ťź—…e.“e3R
@SM^_`K!pb2v;Q‡tr;p<><EFBFBD>e.“e3R
@bqF-<2D><EFBFBD>+'<27>g%žSsu)5‡<E280A1>7bź}vZBv{}r‡ŹŤ
@(2
@(6
@+6
@(=
@,
@3V32[Aza1aF%š“<C5A1>,6Ź3KKo}-yʇš
@*
@V!vxKrw}f‰—†W!'šr/M
@>_śyŽ™„<E284A2><4™pŠ<70>R_,,V`3]Hup.<F Ť”<C5A4>7'V`9KI49`”†•W50“>%SFx}sŠ
@ś“aM^_`4dW<64>'šr/žŹrz}f<><66>‡ś“6kVq3XHiq}f‰—†W!7„z8Y‡k{.aK…“”.b<>?]
@o`KŽ_śV!vzBwu$5N†R„ !™}2MŽ;v8s‰<73>ŤR„*7<>wvZRi}3rFE†ť<E280A0>e+<2B>32[Jt3}sŠ
@4,“aM^_O4R3 .—jvNu4.p…Ť†„lb”v0QU~4.z“ŚŚR“00ź}1žWtg)8‡…ťW6.źw3MOtc}sŠ

View File

@ -0,0 +1 @@
abcdef

View File

@ -0,0 +1 @@
Placeholder file for CD check...

View File

@ -0,0 +1,5 @@
.\DATA\MINICD
.
Full
English
..\CARMA

File diff suppressed because it is too large Load Diff

View File

@ -719,6 +719,10 @@ extern const char UnityStrErrShorthand[];
#define UNITY_BEGIN() UnityBegin(__FILE__)
#endif
#ifndef UNITY_PARSE_OPTS
#define UNITY_PARSE_OPTS() UnityParseOptions(argc, argv)
#endif
#ifndef UNITY_END
#define UNITY_END() UnityEnd()
#endif
@ -737,10 +741,8 @@ extern const char UnityStrErrShorthand[];
* Command Line Argument Support
*-----------------------------------------------*/
#ifdef UNITY_USE_COMMAND_LINE_ARGS
int UnityParseOptions(int argc, char** argv);
int UnityTestMatches(void);
#endif
/*-------------------------------------------------------
* Basic Fail and Ignore

View File

@ -1,12 +1,17 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#define UNITY_USE_COMMAND_LINE_ARGS 1
#include "framework/unity.h"
#include "CORE/V1DB/dbsetup.h"
#include "common/globvars.h"
#include "new/stack_trace_handler.h"
#define debug(format_, ...) fprintf(stderr, format_, __VA_ARGS__)
@ -22,19 +27,31 @@ extern void test_fwsetup_suite();
extern void test_resource_suite();
void setUp(void) {
strcpy(gApplication_path, "/tmp");
strcpy(gDir_separator, "/");
BrV1dbBeginWrapper_Float();
}
void tearDown(void) {
}
int main(int pArgc, char** pArgv) {
void setupGlobalVars() {
strcpy(gDir_separator, "/");
getcwd(gApplication_path, 256);
strcat(gApplication_path, "/DATA");
}
int main(int argc, char** argv) {
UNITY_BEGIN();
if (UnityParseOptions(argc, argv) != 0) {
exit(1);
}
set_signal_handler(argv[0]);
setupGlobalVars();
BrV1dbBeginWrapper_Float();
// BRSRC13
test_brlists_suite();
test_fwsetup_suite();