mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-28 18:51:16 +00:00
Merge branch 'isledecomp:master' into vtable-enforce
This commit is contained in:
commit
7f7a7d5c88
77
3rdparty/flic/flic.asm
vendored
77
3rdparty/flic/flic.asm
vendored
@ -6,7 +6,10 @@ assume fs:nothing
|
||||
|
||||
public DecodeFLCFrame
|
||||
|
||||
.text SEGMENT PARA PUBLIC 'CODE'
|
||||
; This is so reccmp can detect the end of DecodeFLCFrame
|
||||
public EndOfSection
|
||||
|
||||
.text SEGMENT BYTE PUBLIC 'CODE'
|
||||
|
||||
?_25162 LABEL NEAR
|
||||
mov ax, word ptr [esp+0CH] ; 100BD530 _ 66: 8B. 44 24, 0C
|
||||
@ -37,10 +40,8 @@ public DecodeFLCFrame
|
||||
|
||||
; Filling space: 0DH
|
||||
; Filler type: INT 3 Debug breakpoint
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
ALIGN 16
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
?_25164 LABEL NEAR
|
||||
lea eax, [esp+18H] ; 100BD580 _ 8D. 44 24, 18
|
||||
@ -89,10 +90,8 @@ ALIGN 16
|
||||
|
||||
; Filling space: 0CH
|
||||
; Filler type: INT 3 Debug breakpoint
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
ALIGN 16
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
?_25168 LABEL NEAR
|
||||
mov ecx, dword ptr [esp+8H] ; 100BD600 _ 8B. 4C 24, 08
|
||||
@ -149,9 +148,7 @@ ALIGN 16
|
||||
|
||||
; Filling space: 8H
|
||||
; Filler type: INT 3 Debug breakpoint
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
ALIGN 16
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
?_25173 LABEL NEAR
|
||||
lea eax, [esp+18H] ; 100BD680 _ 8D. 44 24, 18
|
||||
@ -188,10 +185,8 @@ ALIGN 16
|
||||
|
||||
; Filling space: 0AH
|
||||
; Filler type: INT 3 Debug breakpoint
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
; db 0CCH, 0CCH
|
||||
|
||||
ALIGN 16
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
db 0CCH, 0CCH
|
||||
|
||||
?_25176 LABEL NEAR
|
||||
lea eax, [esp+18H] ; 100BD6E0 _ 8D. 44 24, 18
|
||||
@ -238,9 +233,7 @@ ALIGN 16
|
||||
|
||||
; Filling space: 3H
|
||||
; Filler type: INT 3 Debug breakpoint
|
||||
; db 0CCH, 0CCH, 0CCH
|
||||
|
||||
ALIGN 8
|
||||
db 0CCH, 0CCH, 0CCH
|
||||
|
||||
?_25180 LABEL NEAR
|
||||
mov eax, dword ptr [esp+18H] ; 100BD760 _ 8B. 44 24, 18
|
||||
@ -373,10 +366,8 @@ ALIGN 8
|
||||
|
||||
; Filling space: 0DH
|
||||
; Filler type: INT 3 Debug breakpoint
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
ALIGN 16
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
?_25195 LABEL NEAR
|
||||
mov eax, dword ptr [esp+8H] ; 100BD8A0 _ 8B. 44 24, 08
|
||||
@ -447,9 +438,7 @@ ALIGN 16
|
||||
|
||||
; Filling space: 8H
|
||||
; Filler type: INT 3 Debug breakpoint
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
ALIGN 16
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
?_25202 LABEL NEAR
|
||||
mov eax, dword ptr [esp+8H] ; 100BD940 _ 8B. 44 24, 08
|
||||
@ -462,10 +451,8 @@ ALIGN 16
|
||||
|
||||
; Filling space: 0DH
|
||||
; Filler type: INT 3 Debug breakpoint
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
ALIGN 16
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
?_25203 LABEL NEAR
|
||||
mov eax, dword ptr [esp+10H] ; 100BD960 _ 8B. 44 24, 10
|
||||
@ -539,10 +526,8 @@ ALIGN 16
|
||||
|
||||
; Filling space: 0CH
|
||||
; Filler type: INT 3 Debug breakpoint
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
ALIGN 16
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
?_25213 LABEL NEAR
|
||||
mov ecx, dword ptr [esp+0CH] ; 100BDA10 _ 8B. 4C 24, 0C
|
||||
@ -621,9 +606,7 @@ ALIGN 16
|
||||
|
||||
; Filling space: 3H
|
||||
; Filler type: INT 3 Debug breakpoint
|
||||
; db 0CCH, 0CCH, 0CCH
|
||||
|
||||
ALIGN 8
|
||||
db 0CCH, 0CCH, 0CCH
|
||||
|
||||
?_25220 LABEL NEAR
|
||||
mov edx, dword ptr [esp+10H] ; 100BDAC0 _ 8B. 54 24, 10
|
||||
@ -738,9 +721,7 @@ ALIGN 8
|
||||
|
||||
; Filling space: 3H
|
||||
; Filler type: INT 3 Debug breakpoint
|
||||
; db 0CCH, 0CCH, 0CCH
|
||||
|
||||
ALIGN 8
|
||||
db 0CCH, 0CCH, 0CCH
|
||||
|
||||
?_25227 LABEL NEAR
|
||||
mov eax, dword ptr [esp+10H] ; 100BDC00 _ 8B. 44 24, 10
|
||||
@ -798,10 +779,8 @@ ALIGN 8
|
||||
|
||||
; Filling space: 0CH
|
||||
; Filler type: INT 3 Debug breakpoint
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
ALIGN 16
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
?_25231 LABEL NEAR
|
||||
mov eax, dword ptr [esp+10H] ; 100BDC90 _ 8B. 44 24, 10
|
||||
@ -839,9 +818,7 @@ ALIGN 16
|
||||
|
||||
; Filling space: 7H
|
||||
; Filler type: INT 3 Debug breakpoint
|
||||
; db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
ALIGN 8
|
||||
db 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH, 0CCH
|
||||
|
||||
DecodeFLCFrame LABEL NEAR
|
||||
mov ecx, dword ptr [esp+10H] ; 100BDCE0 _ 8B. 4C 24, 10
|
||||
@ -863,6 +840,12 @@ DecodeFLCFrame LABEL NEAR
|
||||
add esp, 24 ; 100BDD0A _ 83. C4, 18
|
||||
?_25235:ret ; 100BDD0D _ C3
|
||||
|
||||
; Filling space: 2H
|
||||
; Filler type: INT 3 Debug breakpoint
|
||||
db 0CCH, 0CCH
|
||||
|
||||
EndOfSection LABEL NEAR
|
||||
|
||||
.text ENDS
|
||||
|
||||
END
|
||||
|
||||
BIN
3rdparty/flic/flic.lib
vendored
BIN
3rdparty/flic/flic.lib
vendored
Binary file not shown.
@ -40,6 +40,8 @@ class ElevatorBottom : public LegoWorld {
|
||||
|
||||
private:
|
||||
undefined4 m_unk0xf8; // 0xf8
|
||||
|
||||
MxLong HandleNotification17(MxParam& p_param);
|
||||
};
|
||||
|
||||
#endif // ELEVATORBOTTOM_H
|
||||
|
||||
@ -3,73 +3,139 @@
|
||||
|
||||
#include "compat.h"
|
||||
#include "decomp.h"
|
||||
#include "mxstl/stlcompat.h"
|
||||
#include "mxtypes.h"
|
||||
|
||||
#include <d3drmobj.h>
|
||||
#include <ddraw.h>
|
||||
|
||||
#pragma warning(disable : 4237)
|
||||
|
||||
// SIZE 0x14
|
||||
struct GifData {
|
||||
public:
|
||||
const char* m_name;
|
||||
LPDIRECTDRAWSURFACE m_surface;
|
||||
LPDIRECTDRAWPALETTE m_palette;
|
||||
LPDIRECT3DRMTEXTURE2 m_texture;
|
||||
MxU8* m_data;
|
||||
char* m_name; // 0x00
|
||||
LPDIRECTDRAWSURFACE m_surface; // 0x04
|
||||
LPDIRECTDRAWPALETTE m_palette; // 0x08
|
||||
LPDIRECT3DRMTEXTURE2 m_texture; // 0x0c
|
||||
MxU8* m_data; // 0x10
|
||||
|
||||
~GifData();
|
||||
};
|
||||
|
||||
struct GifMapEntry {
|
||||
public:
|
||||
GifMapEntry* m_right;
|
||||
GifMapEntry* m_parent;
|
||||
GifMapEntry* m_left;
|
||||
const char* m_key;
|
||||
GifData* m_value;
|
||||
struct GifMapComparator {
|
||||
bool operator()(const char* const& p_key0, const char* const& p_key1) const { return strcmp(p_key0, p_key1) > 0; }
|
||||
};
|
||||
|
||||
class GifMap {
|
||||
public:
|
||||
GifMapEntry* FindNode(const char*& p_string);
|
||||
|
||||
inline GifData* Get(const char* p_string)
|
||||
{
|
||||
GifData* ret = NULL;
|
||||
GifMapEntry* entry = FindNode(p_string);
|
||||
if (((m_unk0x4 == entry || strcmp(p_string, entry->m_key) > 0) ? m_unk0x4 : entry) != entry)
|
||||
ret = entry->m_value;
|
||||
return ret;
|
||||
}
|
||||
|
||||
undefined4 m_unk0x0;
|
||||
GifMapEntry* m_unk0x4;
|
||||
// SIZE 0x10
|
||||
class GifMap : public map<const char*, GifData*, GifMapComparator> {
|
||||
// SYNTHETIC: LEGO1 0x1005a400
|
||||
// GifMap::~GifMap
|
||||
};
|
||||
|
||||
typedef list<GifData*> GifList;
|
||||
|
||||
// VTABLE: LEGO1 0x100d86d4
|
||||
// SIZE 0x18
|
||||
class GifManagerBase {
|
||||
public:
|
||||
// STUB: LEGO1 0x1005b660
|
||||
virtual ~GifManagerBase() {}
|
||||
// FUNCTION: LEGO1 0x1005b660
|
||||
virtual ~GifManagerBase()
|
||||
{
|
||||
GifMap::iterator it;
|
||||
for (it = m_map.begin(); it != m_map.end(); it++) {
|
||||
// DECOMP: Use of const_cast here matches ~ViewLODListManager from 96 source.
|
||||
const char* const& key = (*it).first;
|
||||
delete[] const_cast<char*>(key);
|
||||
|
||||
if (m_ownership) {
|
||||
delete (*it).second; // GifData*
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inline GifData* Get(const char* p_name)
|
||||
{
|
||||
GifMap::iterator it = m_map.find(p_name);
|
||||
if (it != m_map.end()) {
|
||||
return (*it).second;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1005a310
|
||||
// GifManagerBase::`scalar deleting destructor'
|
||||
|
||||
inline GifData* Get(const char* p_name) { return m_unk0x8.Get(p_name); }
|
||||
|
||||
protected:
|
||||
undefined4 m_unk0x0;
|
||||
undefined4 m_unk0x4;
|
||||
GifMap m_unk0x8;
|
||||
MxBool m_ownership; // 0x04
|
||||
GifMap m_map; // 0x08
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d86fc
|
||||
// SIZE 0x24
|
||||
class GifManager : public GifManagerBase {
|
||||
public:
|
||||
GifManager() { m_ownership = TRUE; };
|
||||
virtual ~GifManager() override;
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1005a580
|
||||
// GifManager::`scalar deleting destructor'
|
||||
|
||||
void FUN_10099cc0(GifData* p_data);
|
||||
|
||||
protected:
|
||||
undefined m_unk0x14[0x1c];
|
||||
GifList m_list; // 0x18
|
||||
};
|
||||
|
||||
// TEMPLATE: LEGO1 0x10059c50
|
||||
// allocator<GifData *>::_Charalloc
|
||||
|
||||
// clang-format off
|
||||
// TEMPLATE: LEGO1 0x10001cc0
|
||||
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Lbound
|
||||
|
||||
// TEMPLATE: LEGO1 0x1004f9b0
|
||||
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Insert
|
||||
|
||||
// TEMPLATE: LEGO1 0x10059c70
|
||||
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Color
|
||||
|
||||
// TEMPLATE: LEGO1 0x10059c80
|
||||
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Left
|
||||
|
||||
// TEMPLATE: LEGO1 0x10059c90
|
||||
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Parent
|
||||
|
||||
// TEMPLATE: LEGO1 0x10059ca0
|
||||
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Right
|
||||
|
||||
// TEMPLATE: LEGO1 0x10059cb0
|
||||
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::~_Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >
|
||||
|
||||
// TEMPLATE: LEGO1 0x10059d80
|
||||
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::iterator::_Inc
|
||||
|
||||
// TEMPLATE: LEGO1 0x10059dc0
|
||||
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::erase
|
||||
|
||||
// TEMPLATE: LEGO1 0x1005a210
|
||||
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Erase
|
||||
|
||||
// TEMPLATE: LEGO1 0x1005a250
|
||||
// list<GifData *,allocator<GifData *> >::~list<GifData *,allocator<GifData *> >
|
||||
|
||||
// TEMPLATE: LEGO1 0x1005a2c0
|
||||
// map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::~map<char const *,GifData *,GifMapComparator,allocator<GifData *> >
|
||||
|
||||
// TEMPLATE: LEGO1 0x1005a450
|
||||
// Map<char const *,GifData *,GifMapComparator>::~Map<char const *,GifData *,GifMapComparator>
|
||||
|
||||
// TEMPLATE: LEGO1 0x1005a5a0
|
||||
// List<GifData *>::~List<GifData *>
|
||||
|
||||
// GLOBAL: LEGO1 0x100f0100
|
||||
// _Tree<char const *,pair<char const * const,GifData *>,map<char const *,GifData *,GifMapComparator,allocator<GifData *> >::_Kfn,GifMapComparator,allocator<GifData *> >::_Nil
|
||||
// clang-format on
|
||||
|
||||
#endif // GIFMANAGER_H
|
||||
|
||||
@ -170,10 +170,10 @@ class Infocenter : public LegoWorld {
|
||||
InfocenterUnkDataEntry m_entries[7]; // 0x120
|
||||
MxS16 m_unk0x1c8; // 0x1c8
|
||||
undefined4 m_unk0x1cc; // 0x1cc
|
||||
MxU16 m_unk0x1d0; // 0x1d0
|
||||
MxU16 m_unk0x1d2; // 0x1d2
|
||||
MxS16 m_infoManDialogueTimer; // 0x1d0
|
||||
MxS16 m_bookAnimationTimer; // 0x1d2
|
||||
MxU16 m_unk0x1d4; // 0x1d4
|
||||
MxU16 m_unk0x1d6; // 0x1d6
|
||||
MxS16 m_unk0x1d6; // 0x1d6
|
||||
};
|
||||
|
||||
#endif // INFOCENTER_H
|
||||
|
||||
@ -36,6 +36,9 @@ class InfocenterDoor : public LegoWorld {
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100378d0
|
||||
// InfocenterDoor::`scalar deleting destructor'
|
||||
|
||||
private:
|
||||
MxS32 m_unk0xf8; // 0xf8
|
||||
};
|
||||
|
||||
#endif // INFOCENTERDOOR_H
|
||||
|
||||
@ -28,7 +28,7 @@ class LegoControlManager : public MxCore {
|
||||
void FUN_10028df0(MxPresenterList* p_presenterList);
|
||||
void Register(MxCore* p_listener);
|
||||
void Unregister(MxCore* p_listener);
|
||||
void FUN_100293c0(undefined4, const MxAtomId&, undefined2);
|
||||
void FUN_100293c0(undefined4, const char*, undefined2);
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10028d40
|
||||
// LegoControlManager::`scalar deleting destructor'
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
#ifndef POLICESTATE_H
|
||||
#define POLICESTATE_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "legostate.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d8af0
|
||||
@ -24,6 +25,10 @@ class PoliceState : public LegoState {
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1005e920
|
||||
// PoliceState::`scalar deleting destructor'
|
||||
|
||||
private:
|
||||
undefined4 m_unk0x8; // 0x8
|
||||
undefined4 m_unk0xc; // 0xc
|
||||
};
|
||||
|
||||
#endif // POLICESTATE_H
|
||||
|
||||
@ -1,32 +1,61 @@
|
||||
#include "gifmanager.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(GifData, 0x14);
|
||||
DECOMP_SIZE_ASSERT(GifMapEntry, 0x14);
|
||||
DECOMP_SIZE_ASSERT(GifMap, 0x08);
|
||||
DECOMP_SIZE_ASSERT(GifManagerBase, 0x14);
|
||||
DECOMP_SIZE_ASSERT(GifManager, 0x30);
|
||||
DECOMP_SIZE_ASSERT(GifMap, 0x10);
|
||||
DECOMP_SIZE_ASSERT(GifManagerBase, 0x18);
|
||||
DECOMP_SIZE_ASSERT(GifManager, 0x24);
|
||||
|
||||
// GLOBAL: LEGO1 0x100f0100
|
||||
GifMapEntry* g_unk0x100f0100;
|
||||
|
||||
// FUNCTION: LEGO1 0x10001cc0
|
||||
GifMapEntry* GifMap::FindNode(const char*& p_string)
|
||||
// FUNCTION: LEGO1 0x10065c00
|
||||
GifData::~GifData()
|
||||
{
|
||||
GifMapEntry* ret = m_unk0x4;
|
||||
GifMapEntry* current = ret->m_parent;
|
||||
while (current != g_unk0x100f0100) {
|
||||
if (strcmp(current->m_key, p_string) <= 0) {
|
||||
ret = current;
|
||||
current = current->m_right;
|
||||
}
|
||||
else
|
||||
current = current->m_left;
|
||||
if (m_name) {
|
||||
delete[] m_name;
|
||||
m_name = NULL;
|
||||
}
|
||||
|
||||
if (m_palette) {
|
||||
m_palette->Release();
|
||||
m_palette = NULL;
|
||||
}
|
||||
|
||||
if (m_surface) {
|
||||
m_surface->Release();
|
||||
m_surface = NULL;
|
||||
}
|
||||
|
||||
if (m_texture) {
|
||||
m_texture->Release();
|
||||
m_texture = NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10099870
|
||||
// FUNCTION: LEGO1 0x10099870
|
||||
GifManager::~GifManager()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10099cc0
|
||||
void GifManager::FUN_10099cc0(GifData* p_data)
|
||||
{
|
||||
if (p_data == NULL)
|
||||
return;
|
||||
|
||||
#ifdef COMPAT_MODE
|
||||
GifList::iterator it;
|
||||
for (it = m_list.begin(); it != m_list.end(); it++) {
|
||||
#else
|
||||
for (GifList::iterator it = m_list.begin(); it != m_list.end(); it++) {
|
||||
#endif
|
||||
if (*it == p_data) {
|
||||
// TODO: This is wrong, but what is at +0xc on the iterator?
|
||||
*it = NULL;
|
||||
|
||||
if (p_data->m_texture->Release() == TRUE) {
|
||||
delete p_data;
|
||||
m_list.erase(it);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,7 +31,7 @@ void LegoControlManager::Unregister(MxCore* p_listener)
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100293c0
|
||||
void LegoControlManager::FUN_100293c0(undefined4, const MxAtomId&, undefined2)
|
||||
void LegoControlManager::FUN_100293c0(undefined4, const char*, undefined2)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
#include "elevatorbottom.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(ElevatorBottom, 0xfc)
|
||||
|
||||
#include "legocontrolmanager.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoinputmanager.h"
|
||||
@ -9,6 +7,8 @@ DECOMP_SIZE_ASSERT(ElevatorBottom, 0xfc)
|
||||
#include "mxnotificationmanager.h"
|
||||
#include "mxomni.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(ElevatorBottom, 0xfc)
|
||||
|
||||
// FUNCTION: LEGO1 0x10017e90
|
||||
ElevatorBottom::ElevatorBottom()
|
||||
{
|
||||
@ -43,11 +43,24 @@ MxResult ElevatorBottom::Create(MxDSAction& p_dsAction)
|
||||
return result;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10018150
|
||||
// FUNCTION: LEGO1 0x10018150
|
||||
MxLong ElevatorBottom::Notify(MxParam& p_param)
|
||||
{
|
||||
// TODO
|
||||
return LegoWorld::Notify(p_param);
|
||||
MxLong ret = 0;
|
||||
LegoWorld::Notify(p_param);
|
||||
|
||||
if (m_worldStarted) {
|
||||
switch (((MxNotificationParam&) p_param).GetType()) {
|
||||
case c_notificationType17:
|
||||
ret = HandleNotification17(p_param);
|
||||
break;
|
||||
case c_notificationTransitioned:
|
||||
GameState()->HandleAction(m_unk0xf8);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100181b0
|
||||
@ -58,6 +71,12 @@ void ElevatorBottom::VTable0x50()
|
||||
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100181d0
|
||||
MxLong ElevatorBottom::HandleNotification17(MxParam& p_param)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100182c0
|
||||
void ElevatorBottom::VTable0x68(MxBool p_add)
|
||||
{
|
||||
|
||||
@ -35,14 +35,14 @@ Infocenter::Infocenter()
|
||||
m_currentInfomainScript = c_noInfomain;
|
||||
m_currentCutscene = e_noIntro;
|
||||
|
||||
memset(&m_entries, 0, sizeof(InfocenterUnkDataEntry) * 7);
|
||||
memset(&m_entries, 0, sizeof(m_entries));
|
||||
|
||||
m_unk0x1c8 = -1;
|
||||
SetAppCursor(1);
|
||||
NotificationManager()->Register(this);
|
||||
|
||||
m_unk0x1d0 = 0;
|
||||
m_unk0x1d2 = 0;
|
||||
m_infoManDialogueTimer = 0;
|
||||
m_bookAnimationTimer = 0;
|
||||
m_unk0x1d4 = 0;
|
||||
m_unk0x1d6 = 0;
|
||||
}
|
||||
@ -130,7 +130,7 @@ MxLong Infocenter::Notify(MxParam& p_param)
|
||||
break;
|
||||
case c_notificationTransitioned:
|
||||
StopBookAnimation();
|
||||
m_unk0x1d2 = 0;
|
||||
m_bookAnimationTimer = 0;
|
||||
|
||||
if (m_infocenterState->GetUnknown0x74() == 0xc) {
|
||||
StartCredits();
|
||||
@ -198,7 +198,7 @@ MxLong Infocenter::HandleEndAction(MxParam& p_param)
|
||||
return result;
|
||||
|
||||
if (action->GetObjectId() == c_returnBackGuidanceDialogue2) {
|
||||
ControlManager()->FUN_100293c0(0x10, action->GetAtomId(), 0);
|
||||
ControlManager()->FUN_100293c0(0x10, action->GetAtomId().GetInternal(), 0);
|
||||
m_unk0x1d6 = 0;
|
||||
}
|
||||
|
||||
@ -232,7 +232,7 @@ MxLong Infocenter::HandleEndAction(MxParam& p_param)
|
||||
m_currentCutscene = e_noIntro;
|
||||
|
||||
if (m_infocenterState->GetInfocenterBufferElement(0) == 0) {
|
||||
m_unk0x1d2 = 1;
|
||||
m_bookAnimationTimer = 1;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
@ -278,7 +278,7 @@ MxLong Infocenter::HandleEndAction(MxParam& p_param)
|
||||
if (m_infocenterState->GetInfocenterBufferElement(0) == 0 && m_currentInfomainScript != 40 &&
|
||||
m_currentInfomainScript != 41 && m_currentInfomainScript != 42 && m_currentInfomainScript != 43 &&
|
||||
m_currentInfomainScript != 44) {
|
||||
m_unk0x1d0 = 1;
|
||||
m_infoManDialogueTimer = 1;
|
||||
PlayMusic(11);
|
||||
}
|
||||
|
||||
@ -299,8 +299,8 @@ MxLong Infocenter::HandleEndAction(MxParam& p_param)
|
||||
// STUB: LEGO1 0x1006f4e0
|
||||
void Infocenter::VTable0x50()
|
||||
{
|
||||
m_unk0x1d0 = 0;
|
||||
m_unk0x1d2 = 0;
|
||||
m_infoManDialogueTimer = 0;
|
||||
m_bookAnimationTimer = 0;
|
||||
m_unk0x1d4 = 0;
|
||||
m_unk0x1d6 = 0;
|
||||
|
||||
@ -319,7 +319,7 @@ void Infocenter::VTable0x50()
|
||||
case 4:
|
||||
m_infocenterState->SetUnknown0x74(2);
|
||||
if (m_infocenterState->GetInfocenterBufferElement(0) == 0) {
|
||||
m_unk0x1d2 = 1;
|
||||
m_bookAnimationTimer = 1;
|
||||
}
|
||||
|
||||
PlayAction(c_letsGetStartedDialogue);
|
||||
@ -337,7 +337,7 @@ void Infocenter::VTable0x50()
|
||||
return;
|
||||
case 0xf:
|
||||
if (m_infocenterState->GetInfocenterBufferElement(0) == 0) {
|
||||
m_unk0x1d2 = 1;
|
||||
m_bookAnimationTimer = 1;
|
||||
}
|
||||
|
||||
PlayAction(c_clickOnInfomanDialogue);
|
||||
@ -383,7 +383,7 @@ MxLong Infocenter::HandleKeyPress(MxS8 p_key)
|
||||
m_infocenterState->SetUnknown0x74(1);
|
||||
|
||||
if (m_infocenterState->GetInfocenterBufferElement(0) == 0) {
|
||||
m_unk0x1d2 = 1;
|
||||
m_bookAnimationTimer = 1;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
@ -452,11 +452,43 @@ void Infocenter::VTable0x68(MxBool p_add)
|
||||
}
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10070af0
|
||||
// FUNCTION: LEGO1 0x10070af0
|
||||
MxResult Infocenter::Tickle()
|
||||
{
|
||||
// TODO
|
||||
return LegoWorld::Tickle();
|
||||
if (m_worldStarted == FALSE) {
|
||||
LegoWorld::Tickle();
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (m_infoManDialogueTimer != 0 && (m_infoManDialogueTimer += 100) > 25000) {
|
||||
PlayAction(c_clickOnInfomanDialogue);
|
||||
m_infoManDialogueTimer = 0;
|
||||
}
|
||||
|
||||
if (m_bookAnimationTimer != 0 && (m_bookAnimationTimer += 100) > 3000) {
|
||||
PlayBookAnimation();
|
||||
m_bookAnimationTimer = 1;
|
||||
}
|
||||
|
||||
if (m_unk0x1d6 != 0) {
|
||||
m_unk0x1d6 += 100;
|
||||
|
||||
if (m_unk0x1d6 > 3400 && m_unk0x1d6 < 3650) {
|
||||
ControlManager()->FUN_100293c0(0x10, m_atom.GetInternal(), 1);
|
||||
}
|
||||
else if (m_unk0x1d6 > 3650 && m_unk0x1d6 < 3900) {
|
||||
ControlManager()->FUN_100293c0(0x10, m_atom.GetInternal(), 0);
|
||||
}
|
||||
else if (m_unk0x1d6 > 3900 && m_unk0x1d6 < 4150) {
|
||||
ControlManager()->FUN_100293c0(0x10, m_atom.GetInternal(), 1);
|
||||
}
|
||||
else if (m_unk0x1d6 > 4400) {
|
||||
ControlManager()->FUN_100293c0(0x10, m_atom.GetInternal(), 0);
|
||||
m_unk0x1d6 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10070c20
|
||||
|
||||
@ -1,24 +1,47 @@
|
||||
#include "infocenterdoor.h"
|
||||
|
||||
#include "legocontrolmanager.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoinputmanager.h"
|
||||
#include "legoomni.h"
|
||||
#include "mxnotificationmanager.h"
|
||||
|
||||
// STUB: LEGO1 0x10037730
|
||||
DECOMP_SIZE_ASSERT(InfocenterDoor, 0xfc)
|
||||
|
||||
// FUNCTION: LEGO1 0x10037730
|
||||
InfocenterDoor::InfocenterDoor()
|
||||
{
|
||||
// TODO
|
||||
m_unk0xf8 = 0;
|
||||
|
||||
NotificationManager()->Register(this);
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100378f0
|
||||
// FUNCTION: LEGO1 0x100378f0
|
||||
InfocenterDoor::~InfocenterDoor()
|
||||
{
|
||||
// TODO
|
||||
if (InputManager()->GetWorld() == this) {
|
||||
InputManager()->ClearWorld();
|
||||
}
|
||||
|
||||
ControlManager()->Unregister(this);
|
||||
NotificationManager()->Unregister(this);
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10037980
|
||||
// FUNCTION: LEGO1 0x10037980
|
||||
MxResult InfocenterDoor::Create(MxDSAction& p_dsAction)
|
||||
{
|
||||
return SUCCESS;
|
||||
MxResult result = LegoWorld::Create(p_dsAction);
|
||||
if (result == SUCCESS) {
|
||||
InputManager()->SetWorld(this);
|
||||
ControlManager()->Register(this);
|
||||
}
|
||||
|
||||
SetIsWorldActive(FALSE);
|
||||
|
||||
GameState()->SetUnknown424(3);
|
||||
GameState()->FUN_1003a720(0);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100379e0
|
||||
@ -52,8 +75,10 @@ void InfocenterDoor::VTable0x68(MxBool p_add)
|
||||
}
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10037cd0
|
||||
// FUNCTION: LEGO1 0x10037cd0
|
||||
MxBool InfocenterDoor::VTable0x64()
|
||||
{
|
||||
DeleteObjects(&m_atom, 500, 510);
|
||||
m_unk0xf8 = 2;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -2,15 +2,22 @@
|
||||
|
||||
DECOMP_SIZE_ASSERT(InfocenterState, 0x94);
|
||||
|
||||
// STUB: LEGO1 0x10071600
|
||||
// FUNCTION: LEGO1 0x10071600
|
||||
InfocenterState::InfocenterState()
|
||||
{
|
||||
// TODO
|
||||
memset(m_buffer, 0, sizeof(m_buffer));
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10071920
|
||||
// FUNCTION: LEGO1 0x10071920
|
||||
InfocenterState::~InfocenterState()
|
||||
{
|
||||
// TODO
|
||||
MxS16 i = 0;
|
||||
do {
|
||||
if (GetInfocenterBufferElement(i) != NULL) {
|
||||
delete GetInfocenterBufferElement(i)->GetAction();
|
||||
delete GetInfocenterBufferElement(i);
|
||||
}
|
||||
i++;
|
||||
} while (i < GetInfocenterBufferSize());
|
||||
}
|
||||
|
||||
@ -227,8 +227,7 @@ void Score::VTable0x68(MxBool p_add)
|
||||
// FUNCTION: LEGO1 0x100019d0
|
||||
void Score::Paint()
|
||||
{
|
||||
GifManager* gm = GetGifManager();
|
||||
GifData* gd = gm->Get("bigcube.gif");
|
||||
GifData* gd = GetGifManager()->Get("bigcube.gif");
|
||||
|
||||
if (gd) {
|
||||
RaceState* l78 = (RaceState*) GameState()->GetState("JetskiRaceState");
|
||||
|
||||
@ -1,7 +1,12 @@
|
||||
#include "policestate.h"
|
||||
|
||||
// STUB: LEGO1 0x1005e7c0
|
||||
#include <stdlib.h>
|
||||
|
||||
DECOMP_SIZE_ASSERT(PoliceState, 0x10)
|
||||
|
||||
// FUNCTION: LEGO1 0x1005e7c0
|
||||
PoliceState::PoliceState()
|
||||
{
|
||||
// TODO
|
||||
m_unk0xc = 0;
|
||||
m_unk0x8 = (rand() % 2 == 0) ? 501 : 500;
|
||||
}
|
||||
|
||||
6
LEGO1/library_flic.h
Normal file
6
LEGO1/library_flic.h
Normal file
@ -0,0 +1,6 @@
|
||||
#ifdef 0
|
||||
|
||||
// LIBRARY: LEGO1 0x100bdce0
|
||||
// _DecodeFLCFrame
|
||||
|
||||
#endif
|
||||
18
LEGO1/library_smack.h
Normal file
18
LEGO1/library_smack.h
Normal file
@ -0,0 +1,18 @@
|
||||
#ifdef 0
|
||||
|
||||
// LIBRARY: LEGO1 0x100cd782
|
||||
// _SmackGetSizeTables
|
||||
|
||||
// LIBRARY: LEGO1 0x100cd7e8
|
||||
// _SmackDoTables
|
||||
|
||||
// LIBRARY: LEGO1 0x100cda83
|
||||
// _SmackDoFrameToBuffer
|
||||
|
||||
// LIBRARY: LEGO1 0x100d052c
|
||||
// _SmackGetSizeDeltas
|
||||
|
||||
// LIBRARY: LEGO1 0x100d0543
|
||||
// _SmackGetRect
|
||||
|
||||
#endif
|
||||
@ -57,7 +57,7 @@ class MxOmni : public MxCore {
|
||||
virtual MxBool IsTimerRunning() { return m_timerRunning; }; // vtable+40
|
||||
|
||||
static void SetInstance(MxOmni* p_instance);
|
||||
static MxBool FUN_100b06b0(MxDSAction* p_action, const char* p_name);
|
||||
static MxBool ActionSourceEquals(MxDSAction* p_action, const char* p_name);
|
||||
|
||||
HWND GetWindowHandle() const { return this->m_windowHandle; }
|
||||
MxObjectFactory* GetObjectFactory() const { return this->m_objectFactory; }
|
||||
|
||||
@ -12,10 +12,7 @@
|
||||
// but present in SMACK.LIB and used directly by Mindscape.
|
||||
extern "C"
|
||||
{
|
||||
// (SMACK.LIB) FUNCTION: LEGO1 0x100cd782
|
||||
u32 SmackGetSizeTables();
|
||||
|
||||
// (SMACK.LIB) FUNCTION: LEGO1 0x100cd7e8
|
||||
void SmackDoTables(
|
||||
u8* p_huffmanTrees,
|
||||
u8* p_huffmanTables,
|
||||
@ -24,14 +21,8 @@ extern "C"
|
||||
u32 p_detailSize,
|
||||
u32 p_typeSize
|
||||
);
|
||||
|
||||
// (SMACK.LIB) FUNCTION: LEGO1 0x100cda83
|
||||
void SmackDoFrameToBuffer(u8* p_source, u8* p_huffmanTables, u8* p_unk0x6b4);
|
||||
|
||||
// (SMACK.LIB) FUNCTION: LEGO1 0x100d052c
|
||||
u32 SmackGetSizeDeltas(u32 p_width, u32 p_height);
|
||||
|
||||
// (SMACK.LIB) FUNCTION: LEGO1 0x100d0543
|
||||
u8 SmackGetRect(u8* p_unk0x6b4, u32* p_rect);
|
||||
}
|
||||
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
#include "mxactionnotificationparam.h"
|
||||
#include "mxatomidcounter.h"
|
||||
#include "mxautolocker.h"
|
||||
#include "mxdsmultiaction.h"
|
||||
#include "mxeventmanager.h"
|
||||
#include "mxmusicmanager.h"
|
||||
#include "mxnotificationmanager.h"
|
||||
@ -377,11 +378,23 @@ void MxOmni::DestroyInstance()
|
||||
}
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100b06b0
|
||||
MxBool MxOmni::FUN_100b06b0(MxDSAction* p_action, const char* p_name)
|
||||
// FUNCTION: LEGO1 0x100b06b0
|
||||
MxBool MxOmni::ActionSourceEquals(MxDSAction* p_action, const char* p_name)
|
||||
{
|
||||
// TODO
|
||||
return FAILURE;
|
||||
if (!strcmp(p_action->GetSourceName(), p_name))
|
||||
return TRUE;
|
||||
|
||||
if (p_action->IsA("MxDSMultiAction")) {
|
||||
MxDSActionListCursor cursor(((MxDSMultiAction*) p_action)->GetActionList());
|
||||
MxDSAction* action;
|
||||
|
||||
while (cursor.Next(action)) {
|
||||
if (ActionSourceEquals(action, p_name))
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100b07f0
|
||||
@ -404,7 +417,7 @@ MxLong MxOmni::HandleActionEnd(MxParam& p_param)
|
||||
if (controller != NULL) {
|
||||
action = controller->GetUnk0x54().Find(action, FALSE);
|
||||
if (action) {
|
||||
if (FUN_100b06b0(action, "LegoLoopingAnimPresenter") == FALSE) {
|
||||
if (ActionSourceEquals(action, "LegoLoopingAnimPresenter") == FALSE) {
|
||||
delete controller->GetUnk0x54().Find(action, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,7 +58,7 @@ Templated functions should be annotated with `TEMPLATE`. Since the goal is to ev
|
||||
|
||||
### `SYNTHETIC`
|
||||
|
||||
Synthetic functions should be annotated with `SYNTHETIC`. A synthetic function is generated by the compiler; for the time being, the only case is the "scalar deleting destructor" found in virtual tables. Note: `SYNTHETIC` takes precedence over `TEMPLATE`.
|
||||
Synthetic functions should be annotated with `SYNTHETIC`. A synthetic function is generated by the compiler; most common is the "scalar deleting destructor" found in virtual tables. Other cases include default destructors and assignment operators. Note: `SYNTHETIC` takes precedence over `TEMPLATE`.
|
||||
|
||||
```
|
||||
// SYNTHETIC: LEGO1 0x10003210
|
||||
@ -71,7 +71,22 @@ Synthetic functions should be annotated with `SYNTHETIC`. A synthetic function i
|
||||
// MxList<MxRegionLeftRight *>::`scalar deleting destructor'
|
||||
```
|
||||
|
||||
## Virtual tables (**WIP**)
|
||||
### `LIBRARY`
|
||||
|
||||
Functions located in 3rd party libraries should be annotated with `LIBRARY`. Since the goal is to eventually have a full accounting of all the functions present in the binaries, please make an effort to find and annotate every function of every statically linked library, including the MSVC standard libraries.
|
||||
|
||||
```
|
||||
// LIBRARY: ISLE 0x4061b0
|
||||
// _MemPoolInit@4
|
||||
|
||||
// LIBRARY: ISLE 0x406520
|
||||
// _MemPoolSetPageSize@8
|
||||
|
||||
// LIBRARY: ISLE 0x406630
|
||||
// _MemPoolSetBlockSizeFS@8
|
||||
```
|
||||
|
||||
## Virtual tables
|
||||
|
||||
Classes with a virtual table should be annotated using the `VTABLE` marker, which includes the module name and address of the virtual table. Additionally, virtual function declarations should be annotated with a comment indicating their relative offset. Please use the following example as a reference.
|
||||
|
||||
@ -112,7 +127,7 @@ private:
|
||||
undefined4 m_unk0x14; // 0x14
|
||||
```
|
||||
|
||||
## Global variables (**WIP**)
|
||||
## Global variables
|
||||
|
||||
Global variables should be annotated using the `GLOBAL` marker, which includes the module name and address of the variable.
|
||||
|
||||
@ -127,6 +142,18 @@ MxAtomId* g_pz5Script = NULL;
|
||||
MxAtomId* g_introScript = NULL;
|
||||
```
|
||||
|
||||
## Strings
|
||||
|
||||
String values should be annotated using the `STRING` marker, which includes the module name and address of the string.
|
||||
|
||||
```
|
||||
inline virtual const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f03fc
|
||||
return "Act2PoliceStation";
|
||||
}
|
||||
```
|
||||
|
||||
# Tooling
|
||||
|
||||
Use `pip` to install the required packages to be able to use the Python tools found in this folder:
|
||||
|
||||
@ -170,6 +170,12 @@ def skip_compare(self, orig: int):
|
||||
|
||||
def _match_on(self, compare_type: SymbolType, addr: int, name: str) -> bool:
|
||||
# Update the compare_type here too since the marker tells us what we should do
|
||||
|
||||
# Truncate the name to 255 characters. It will not be possible to match a name
|
||||
# longer than that because MSVC truncates the debug symbols to this length.
|
||||
# See also: warning C4786.
|
||||
name = name[:255]
|
||||
|
||||
logger.debug("Looking for %s %s", compare_type.name.lower(), name)
|
||||
cur = self._db.execute(
|
||||
"""UPDATE `symbols`
|
||||
|
||||
Loading…
Reference in New Issue
Block a user