Back to the Vavoom Forum Archives
Nicholas
Init: Adding ./basev/common/basepak.pk3 Init: adding ./doom.wad Init: adding /home/nicholas/.vavoom/doom.gwa Init: Adding ./basev/doom/basepak.pk3 Init: Adding ./basev/doom1/basepak.pk3 Init: Host name: nicholas-desktop Init: My IP address: 127.0.1.1 Init: UDP Initialised DevNet: TCP/IP address 127.0.1.1 Init: Selected SDL sound device Init: Configured audio device Init: Driver: alsa Init: Freqency: 44100 Init: Channels: 2 Init: Format: 8010 Init: Selected SDL midi device Init: Selected Linux CD audio device Init: CD_Init: open of "/dev/cdrom" failed (123) Init: Using 16 voices Init: Selected SDL software rasteriser Log: Executing startup.vs Log: Executing default.cfg Log: Can't find config.cfg Log: Can't find autoexec.cfg Log: Invalid bpp, using 8 Init: 1312k surface cache Log: 640x480x8. Log: timidity.cfg: No such file or directory Log: Timidity init failed Log: Playing demo from demos/demo1.dem. Log: ERROR: couldn't open. Log: Playing demo from demos/demo2.dem. Log: ERROR: couldn't open. Log: Playing demo from demos/demo3.dem. Log: ERROR: couldn't open. Log: Playing demo from demos/demo4.dem. Log: ERROR: couldn't open. Log: timidity.cfg: No such file or directory Log: Timidity init failed Dev: Spawning server e1m1 Dev: Server spawned Dev: CL_EstablishConnection: connected to local Dev: Client LOCAL connected Log: --------------------------------------- Log: E1M1: Hangar Log: Dev: Client level loaded Dev: 186 subdivides Dev: 86 seg subdivides Dev: 16k light mem Log: timidity.cfg: No such file or directory Log: Timidity init failed Log: Picked up an armor bonus.The only reason I ever found Vavoom is because PrBoom had this issue and I couldn't get any other Doom source ports to compile. I played Doom with PrBoom when I used a 32-bit version of Ubuntu so this seems to be a 64-bit-related issue. There are two bug reports for PrBoom describing freezes/lock ups: <!-- m --><a class="postlink" href="https://launchpad.net/ubuntu/+source/prboom/+bugs">https://launchpad.net/ubuntu/+source/prboom/+bugs</a><!-- m --> Perhaps those can help you somehow. I hope I can play Doom soon. <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
scen
scen
--- source/vclass.h 2007/04/17 21:35:04 2156 +++ source/vclass.h 2007/05/07 16:48:35 2237 @@ -375,6 +375,7 @@ VClass* ParentClass; vint32 ClassSize; + vint32 ClassUnalignedSize; vuint32 ClassFlags; VMethod** ClassVTable; void (*ClassConstructor)(); --- source/vclass.cpp 2007/04/27 18:01:49 2191 +++ source/vclass.cpp 2007/05/18 16:27:42 2241 @@ -27,6 +27,20 @@ #include "progdefs.h" #include "network.h" +class DummyClass1 : public VVirtualObjectBase +{ +public: + void* Pointer; + vuint8 Byte1; + virtual void Dummy() = 0; +}; + +class DummyClass2 : public DummyClass1 +{ +public: + vuint8 Byte2; +}; + bool VMemberBase::GObjInitialised; VClass* VMemberBase::GClasses; TArray<VMemberBase*> VMemberBase::GMembers; @@ -2353,6 +2367,7 @@ , LinkNext(0) , ParentClass(0) , ClassSize(0) +, ClassUnalignedSize(0) , ClassFlags(0) , ClassVTable(0) , ClassConstructor(0) @@ -2388,6 +2403,7 @@ , LinkNext(0) , ParentClass(AParent) , ClassSize(ASize) +, ClassUnalignedSize(ASize) , ClassFlags(AClassFlags) , ClassVTable(0) , ClassConstructor(ACtor) @@ -2477,6 +2493,8 @@ delete[] Defaults; Defaults = NULL; } + StatesLookup.Clear(); + RepInfos.Clear(); unguard; } @@ -2849,10 +2867,7 @@ return; } - int PrevSize = ClassSize; - int size = ParentClass ? ParentClass->ClassSize : 0; int numMethods = ParentClass ? ParentClass->ClassNumMethods : 0; - VField* PrevField = NULL; for (int i = 0; i < GMembers.Num(); i++) { if (GMembers->MemberType != MEMBER_Method || @@ -2877,6 +2892,21 @@ } M->VTableIndex = MOfs; } + + VField* PrevField = NULL; + int PrevSize = ClassSize; + int size = 0; + if (ParentClass) + { + // GCC has a strange behavior of starting to add fields in subclasses + // in a class that has virtual methods on unaligned parent size offset. + // In other cases and in other compilers it starts on aligned parent + // class size offset. + if (sizeof(DummyClass1) == sizeof(DummyClass2)) + size = ParentClass->ClassUnalignedSize; + else + size = ParentClass->ClassSize; + } for (VField* fi = Fields; fi; fi = fi->Next) { if (fi->Type.Type == ev_bool && PrevField && @@ -2904,6 +2934,7 @@ } PrevField = fi; } + ClassUnalignedSize = size; size = (size + sizeof(void*) - 1) & ~(sizeof(void*) - 1); ClassSize = size; ClassNumMethods = numMethods;