12 |
|
#include "../flatline/Flatline_BSL.h" |
13 |
|
#include "../flatline/Flatline_Hooks.h" |
14 |
|
#include "../Oni.h" |
15 |
< |
//#include "Objt.h" |
15 |
> |
#include "objt.h" |
16 |
|
|
17 |
|
typedef int (__cdecl *CHINESEPROC)(DWORD ThreadId); |
18 |
|
|
127 |
|
return Oni_COrTextArea_Resize(inTextArea, inBounds, inNumTextEntries); |
128 |
|
} |
129 |
|
|
130 |
+ |
#define IMcShade_Red (0xFFFF0000) |
131 |
+ |
#define IMcShade_Green (0xFF00FF00) |
132 |
+ |
#define IMcShade_Blue (0xFF0000FF) |
133 |
+ |
void ONICALL DD_OBJiTriggerVolume_Draw(OBJtObject* inObject, uint32_t inDrawFlags) |
134 |
+ |
{ |
135 |
+ |
UUtUns32 itr; |
136 |
+ |
OBJtOSD_All *inOSD = (OBJtOSD_All *) inObject->object_data; |
137 |
+ |
OBJtOSD_TriggerVolume *trigger_osd = &inOSD->osd.trigger_volume_osd; |
138 |
+ |
M3tPoint3D *points = trigger_osd->volume.worldPoints; |
139 |
+ |
M3tPoint3D trigger_center = {0, 0, 0}; |
140 |
+ |
UUtUns32 shade = 0xFFFFFF; |
141 |
+ |
|
142 |
+ |
if (!OBJgTriggerVolume_Visible) { |
143 |
+ |
return; |
144 |
+ |
} |
145 |
+ |
|
146 |
+ |
if (OBJrTriggerVolume_IntersectsCharacter(inObject, trigger_osd->team_mask, ONgGameState->PlayerCharacter)) { |
147 |
+ |
shade = IMcShade_Red; |
148 |
+ |
} |
149 |
+ |
else |
150 |
+ |
{ |
151 |
+ |
shade = IMcShade_Blue; |
152 |
+ |
} |
153 |
+ |
|
154 |
+ |
M3rGeom_Line_Light(points + 0, points + 1, shade); |
155 |
+ |
M3rGeom_Line_Light(points + 1, points + 3, shade); |
156 |
+ |
M3rGeom_Line_Light(points + 3, points + 2, shade); |
157 |
+ |
M3rGeom_Line_Light(points + 2, points + 0, shade); |
158 |
+ |
|
159 |
+ |
M3rGeom_Line_Light(points + 4, points + 5, shade); |
160 |
+ |
M3rGeom_Line_Light(points + 5, points + 7, shade); |
161 |
+ |
M3rGeom_Line_Light(points + 7, points + 6, shade); |
162 |
+ |
M3rGeom_Line_Light(points + 6, points + 4, shade); |
163 |
+ |
|
164 |
+ |
M3rGeom_Line_Light(points + 0, points + 4, shade); |
165 |
+ |
M3rGeom_Line_Light(points + 1, points + 5, shade); |
166 |
+ |
M3rGeom_Line_Light(points + 3, points + 7, shade); |
167 |
+ |
M3rGeom_Line_Light(points + 2, points + 6, shade); |
168 |
+ |
|
169 |
+ |
for(itr = 0; itr < M3cNumBoundingPoints; itr++) |
170 |
+ |
{ |
171 |
+ |
MUmVector_Add(trigger_center, trigger_center, points[itr]); |
172 |
+ |
} |
173 |
+ |
|
174 |
+ |
MUmVector_Scale(trigger_center, (1.0f / ((float) M3cNumBoundingPoints))); |
175 |
+ |
} |
176 |
+ |
|
177 |
+ |
_ONrMechanics_Register Oni_ONrMechanics_Register = (_ONrMechanics_Register)0; |
178 |
+ |
int16_t ONICALL DD_ONrMechanics_Register(uint32_t inObjectType, uint32_t inObjectTypeIndex, char* inGroupName, |
179 |
+ |
uint32_t inSizeInMemory, OBJtMethods* inObjectMethods, uint32_t inFlags, void* inMechanicsMethods) |
180 |
+ |
{ |
181 |
+ |
if (strcmp("Trigger Volume", inGroupName) == 0) { |
182 |
+ |
inObjectMethods->rDraw = DD_OBJiTriggerVolume_Draw; |
183 |
+ |
} |
184 |
+ |
return Oni_ONrMechanics_Register(inObjectType, inObjectTypeIndex, inGroupName, inSizeInMemory, inObjectMethods, inFlags, inMechanicsMethods); |
185 |
+ |
} |
186 |
+ |
|
187 |
+ |
|
188 |
+ |
|
189 |
|
int DD_Patch_DebugNameTextureInit(short width, short height, int type, int allocated, int flags, char* name, void** output) |
190 |
|
{ |
191 |
|
//flags = (1 << 10); |
499 |
|
DDrPatch_NOOP((char*)(OniExe + 0x000E1957), 6 ); |
500 |
|
} |
501 |
|
|
502 |
+ |
void DD_Patch_ShowTriggerVolumes() |
503 |
+ |
{ |
504 |
+ |
Oni_ONrMechanics_Register = DDrPatch_MakeDetour((void*)ONrMechanics_Register, (void*)DD_ONrMechanics_Register); |
505 |
+ |
} |
506 |
+ |
|
507 |
|
// Experiment with allowing enemies to be thrown over railings |
508 |
|
void DD_Patch_Throwtest() |
509 |
|
{ |
706 |
|
|
707 |
|
if (patch_showalllasersights) |
708 |
|
DD_Patch_ShowAllLasersights(); |
709 |
+ |
|
710 |
+ |
if (patch_showtriggervolumes) |
711 |
+ |
DD_Patch_ShowTriggerVolumes(); |
712 |
|
|
713 |
|
if (patch_throwtest) |
714 |
|
DD_Patch_Throwtest(); |