• Welcome to Smashboards, the world's largest Super Smash Brothers community! Over 250,000 Smash Bros. fans from around the world have come to discuss these great games in over 19 million posts!

    You are currently viewing our boards as a visitor. Click here to sign up right now and start on your path in the Smash community!

Universal Model Converter - Side Development Thread

left or right? (a 20x20 toggle at the top of the window)

  • Left (under the window icon)

    Votes: 23 53.5%
  • Right (under the X button)

    Votes: 20 46.5%

  • Total voters
    43
  • Poll closed .

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just had an idea for a previous idea with extension

P2P chat and collaboration extending featurability farther than Discord.
I could build a sub-app like I'm doing with SIDE to just be a chat app using my own protocols :)
then we'd have a chat app that's likely as secure as Tox (if not more than), with the added benefit of extra protection from cyber criminals.

thing is, I can't afford to build my combo hub server atm...
gonna need a long time of saving and help to build that :p

still though, UGE already has plans for integrating secure chat :)
(initial idea was for SIDE collaboration only)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
lol Sonikku, HSF is coming :p
I'm just more focused on what makes it possible to actually R/W the file data and pass it to/from the backend. ;)

once I have everythign built, I can start working on SIDE and getting caught back up to where I was with UMC
except of course by that time, I'll already be ahead of that due to the extended support and maintainability ;D
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
please try not to talk to me about Discord.
if calling on Tox wasn't so cancerous and actually worked like it was supposed to, I'd drop the filthy platform entirely.
it's a shame more people don't know just how bad Discord really is. -.-
 
Last edited:

TDRR

Smash Journeyman
Joined
Sep 18, 2017
Messages
286
Location
Venezuela
Hm, i wonder, can you reverse engineer TimeSplitters 2's model format? (Gamecube version) It would very neat as that game has a TON of potential for hacking.

First you need to decipher the game archive format, which has been already done for the PS2 and Xbox versions, the format is basically the same but apparently the filename table is either absent or different.

The purpose i want support for it in UGE is for making a little something i call "Project Unreal"
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
haha
I actually have the game (both TS2 and TS3 actually) extracted on my HDD with plans to look through them XD
(I love both games and want to hack them) :)

just haven't gotten around to it as I've been too busy redesigning everything :p
in time though, I'll definitely have support :D
 

TDRR

Smash Journeyman
Joined
Sep 18, 2017
Messages
286
Location
Venezuela
That's great! I personally think there is less point on model hacking TS3 because we don't yet have any way to edit weapon attributes (Rate of fire, accuracy, clip size)

Also, do you think you can do animations too? I know that it most likely won't be added any time soon, but at least to know that you have it planned would be good.

You should update the name of the thread to say Universal Game Editor instead of Universal Model Converter, considering the name change.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
I'm sure that could be figured out :D

actually, animation support is already in the works in the API :)
this is what you'd use to send and recieve data to/from the beckend: ;)


as for the name change, I've actually been considering creating a new thread once I'm ready to release :p
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
mega, G-drive, tox
dropbox, 4shared, mediafire, Discord (while still active)
email attachments, forum attachments

there's plenty of options ;)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
got a few redesigned implementations for struct to make it a tad more forgiving towards noobs...

if you specify invalid magic attributes, they are simply overlooked.
note: the existence of the attribute does not count when supplying values or labels:
Code:
bad = struct(
    __size__ = 16,
    __addr__ = bu32,
    __invalid_magic__ = bu16, # note: this attribute does NOT manage the file data
    value = bu16
)

bad(
    value = [
        0x00000000,
        0x0000 ],

    label = {
        'struct label' :[
        '__addr__ label',
        'value label' ]}
)
this next one is actually a bit useful for people who know what they're doing as well. :)
instead of labeling every attribute through automation, you can now specify what attributes are to be labeled using a dict:
(I'll use my above example struct for this example)
Code:
bad(
    label = {
        'struct label' :dict(
        value = 'label' )}
)
hope that makes things a bit more manageable :)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
alright, after some final thoughts on it, I'm absolutely working on removing the big-endian datatype varients like bs16, bu32, or bf32.

the endian for datatypes will be determined by a default in CurrentFile (name pending) which will be a writable boolean defaulting to False.
currently there isn't a granular way to update the attribute through automation, and I'm not relying on attributes specified in structs due to overlap.

sure an attribute representing endian is a rarity, but I'm out-ruling it's implementation due to static unreliability...
instead, I'm working on a more reliable way to map attributes for structs consisting of multiple definitions.
basically you can use the same struct and pull different items from it for the same function it's supplied to where needed.
(this goes for all uge(Get/Set)* functions)

to give an example, this is my current thoughts:
Code:
VTX = struct( # something stupid for this example (don't be surprized if something like this actually exists)
    PX = bf32,
    NX = bf32,
    UX = bf32,
    PY = bf32,
    NY = bf32,
    UY = bf32,
    PZ = bf32,
    NZ = bf32 )

vertex = VTX()

ugeSetPosition( vertex, map = dict( X='PX', Y='PY', Z='PZ' ) )
ugeSetNormal( vertex, map = dict( X='NX', Y='NY', Z='NZ' ) )
ugeSetUV( vertex, map = dict( X='UX', Y='UY' ) )
^ this is not the same as described above, but it is a more practical example dealing with a badly designed format.
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
well, after a bunch of thoughts on this...
I'm removing the ability to pass raw augments to overrides.

reason for this is for consistency since there's no way to write to them:
Code:
dummy = struct(
    data1 = u32,
    data2 = u32
)

result = dummy( offset = u32() ) # read
result = dummy( offset = u32( 1024 ) ) # write
note that overrides are designed to work on demand, so the order will be specified on call.

also arrays have gotten a design overhaul, and now work much more like struct in terms of definition order:
(there's also some new attributes as well)
Code:
dummy = array(
    struct = u32, # this is the struct/augment which will always be the first argument.

    __size__ = u32, # the dataspace the array operates in (allowing padding)

    __align__ = 32, # aligns __size__ to 32 byte sections (augments can be assigned here as well, where dynamic alignment may be used)

    offset = u32, # you can use either attribute here (consistency vs readability)

    count = u32
)
note that __align__ is also available for struct()
just note that this is pointless:
Code:
dummy = struct(
    __align__ = 32,
    data1 = u32,
    data2 = u32
)

dummyarray = array(
    dummy,
    __align__ = 32, # this can be left out since each struct reads 32 bytes
    __size__ = 128
)
there are cases for such a layout though:
Code:
dummy = struct(
    __align__ = 16, # 1 row of hex with 8 bytes of padding
    data1 = u32,
    data2 = u32
)

dummyarray = array(
    dummy,
    __align__ = 64, # fits 4 structs in 1 alignment block
    __size__ = 256 # allows for 4 blocks (16 structs)
)
alignment is passive, the results are only viewable in hex
(256 bytes will always be used by these specifications regardless of how many structs are provided)

for some extra functionality, array() will also be able to read all in __size__ or up to EOF if no __size__ or count is specified.
 
Last edited:

Sonniku A

Smash Rookie
Joined
Nov 16, 2018
Messages
11
What you showed me in the messages were very nice. Hope UGE gets stable enough to use em
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
finally got my first hints of struct() working through deref() :D


basically, what's going on here is a struct() is being created by the name of 'test'
that struct is given to a deref augment at address 0 under the 'main' augment

after the file is initialized, the struct is created at address 0 as 'data' through main()
main() is called again at 'data2' to update 'data', so both variables hold the same data object.

the only issue with this test is the update method for struct isn't built, so it isn't updating the data types it holds :p
other than that, everything seems to work just about fine

something you can't see though is where the initialization of any data object is supposed to create a reference to each object at that address throughout it's __size__
that way any updates within that range will update the object.

so yeah... still got some stuff to work on before I can implement this... :p
but at least progress is being made :)

EDIT: update test to struct
managed to get __magic__ attributes working as expected...
modified the struct() in the code to look like this:
Code:
test = struct(
    ['__name__','data1','__size__','data2','data3'], # AST gets this in UGE
    __name__ = 'test',
    data1 = u32,
    __size__ = u32,
    data2 = u32,
    data3 = u32 )
and I just added validation when indexing attributes, since you're not supposed to be able to reference the magic attributes through automation methods.

so basically, the struct only has 3 foreward attributes (data1, data2, data3) which can be indexed as expected:
data[0] == data.data1
including keys:
data['data1'] == data.data1

I'm working on something for writing as well so that it guarantees __size__ is written at the correct location without needing to supply the value.
other magic attributes like __align__ may just need specification though

EDIT2:
updating to notify I have figured out a method of specifying magic attribute values through overrides:
Code:
test = struct(
    ['__name__','__addr__','__align__','data1','__size__','data2','data3'], # AST gets this in UGE
    __name__ = 'test',
    __addr__ = u32,
    __align__ = u32,
    data1 = u32,
    __size__ = u32,
    data2 = u32,
    data3 = u32 )

test( [2,2,3],
    offset = 4, # writes __addr__
    align = 32 # writes __align__
)
so yeah, that should make things more accessible.
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just to post about one of my major headaches that've been slowing down my development:
https://askubuntu.com/a/1096528/334957

bye bye audio output issues
now I no longer need to restart my PC numerous times just to get audio output.
(it literally took a day just to fix my audio output)

now I just need to fix my audio input issues
(maybe get tox to see my existing mic)

linux audio has been an issue for years, and no cancerous workarounds like PulseAudio are not solutions unless you like losing audio in the middle of your game or video-render.
(if you haven't had this happen to you on linux, it's because you're not running on a potato)

still though, the solution is not for me to upgrade my machine, I should be just fine until I can afford to do so.
the solution is for developers to use common sense and make things work appropriately on all devices rather than just the powerful ones.
 

Sonniku A

Smash Rookie
Joined
Nov 16, 2018
Messages
11
Wait, why do you need to fix audio? I thought this was just for models/textures/anims?
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
oh lol
UGE will eventually support media, but this was just an issue that crippled it's development.

every time it happened, I would be stuck restarting my PC after reconfiguring ALSA at least 7 times, and it would usually eat up my day just to get audio output from my speakers again (from any application)

poor documentation and badly written apps are to blame for this.

Pulse is less of a headache, but I can't stand it just cutting the audio stream when my CPU gets busy (fixed by a reboot)

ALSA doesn't cut the stream once working, but it doesn't manage itself appropriately (at least on outdated Xubuntu 16.04).
(soft upgrading has always ended badly for me, so I'll just format and reinstall 18.04 (or newer) eventually)

also, what I did there actually didn't fix the issue
after a reboot, the configs still failed to output audio from the default card...

but I found I could use my onboard card's headphone output as rear speakers, meaning I no longer needed my PCI card
and since removing it, I haven't had an issue since.

and unlike Pulse, I can manage my mic-in for voice, and line-in with loopback for input playback :D

so yeah, maybe tox will be less cancerous and actually use my working mic now :)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
I sent him an issue with shots to help him correct his wiki ;)
the only thing he had ahead of me was the split between the magic and version :p

I'm kinda sidetracked with life atm which is why I haven't been posting much on UGE as of lately
I should be back on it soon (depending on how fast my local issues can be resolved)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
well I got 1 big lump of bad news, and a few small bits of good news...

for the bad news, unfortunately my primary machine decided to kick the bucket
I'm not sure if it's the CPU or the motherboard that's dead, but the thing's bricked regardless and does nothing when powered on.

I hope it's just the motherboard so I only have to pay $50 for a replacement and continue where I left off :)
no, changing the motherboard won't mean I have to reinstall linux:
my Acer Aspire laptop (AMD Athlon CPU) died when it's GPU's thermal pad shrunk, causing it to blow a mosfet.
the HDD from that is running in this very machine I'm typing this post from (Intel Atom CPU) with the very OS it ran.
that doesn't mean all linux distros will always work across machines, but Xubuntu 16.04 (upgraded from 14.04) alone doesn't seem affected.

in any case, I have hopes it'll work with I get a new motherboard for my primary :)

now for the good news
since I'd been keeping static and dynamic backups of my projects, I can still work on things :)
though, I'm not doing that with UGE because this compact isn't good enough to run the workspace on only 2GB of RAM and 1 monitor.
(this machine used to serve a 3rd monitor for documentation with the first 2 monitors of my primary for multiple (at least 4) code editors)
I do have my secondary, but I don't like using it because the motherboard seems to be degrading and can no longer supply the voltage to maintain the overclock like it used to (it just randomly shuts off)

in any case, I've been working on other things and have found a way to remove the 3rd-party glfw3.dll window from my viewer with a first party user32.dll/gdi32.dll window with as much control over window management as PyQt (if not more since I'm now using the core functionality for window management in windows)
https://stackoverflow.com/a/53619253/2131849
sooooo I'm working on a window class now that I can integrate into UGE later :)
(this'll do more than simply create the GL window for UGE's viewer, it should also serve the console window (I initially wanted to use Tk for this))

on a side note though, I am working on my concept for a new non-iterative model format, so if I can get anywhere on that, you might see support in UGE :)

not sure how long it'll be before I'll be back up on UGE again, but don't dwell on it guys, I'm sticking to my word and not stopping until it's finished. ;)
still have to say sorry it's taking years though -.-
 

TDRR

Smash Journeyman
Joined
Sep 18, 2017
Messages
286
Location
Venezuela
well I got 1 big lump of bad news, and a few small bits of good news...

for the bad news, unfortunately my primary machine decided to kick the bucket
I'm not sure if it's the CPU or the motherboard that's dead, but the thing's bricked regardless and does nothing when powered on.
Well, my PC died too and i noticed it's either RAM or CPU, you can too know if it's the motherboard, CPU or RAM if you check if the fans turn on, if they do, it's CPU or RAM, if they don't, it's a motherboard or power supply problem.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
ah, they do for me
but the CPU still gets warm, which is why I think it's still good...

this is roughly the board I have (white text) with an Athlon II x2
https://support.hp.com/us-en/document/c01925534
I got it for free, so I'm not complaining much :p

I won't deny a possible RAM issue though
the last thing I was doing on it was some extreme processing with 256 instances of OpenOS on minecraft:

^ this was supposed to be a render-farm where 1 machine would draw 1 primitive in the world at around 30 updates per second with 256 machines
the thing brought my machine down to about 0.25 FPS with 256 instances of OpenOS.

was trying to find a way to sync all 256 threads before my PC died... =3=

if anyone ever wondered how I had fun, this is what I do :D

I won't outrule a PSU issue as well, the thing's lasted me many years, and it was only a cheapo for a P4 machine
that aside though I do get a ton of power loss on my HDDs (they randomly power down and up under use, wouldn't be surprized if the connectors were bad)
^ part of the reason my WD died earlier, but not the main reason (NTFS cooked the drive there, so death was unavoidable)

EDIT:
I restarted my machine because I was having issues where my OS HDD would randomly corrupt when my PC would enter swap use (when my 4GB of RAM filled up)
I thought it was because my OS was being loaded through my PCIe card providing 2 SATA ports.

but after reconfiguring the HDDs, I was left with this brick...

one last possibility is a malicious hacker could've patched my bios to brick it...
 
Last edited:

TDRR

Smash Journeyman
Joined
Sep 18, 2017
Messages
286
Location
Venezuela
one last possibility is a malicious hacker could've patched my bios to brick it...
Unless that hacker lives with you, i can tell you that's completely impossible. Windows is programmed to absolutely never touch the BIOS except in the installation procedure, and no amount of hacking can change that.

Not sure about Windows 10 though, because it already blocks the BIOS by default so maybe that changed.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
well I hope you're right on that one
tbh, my knowledge of such was from before Win8, so it's rather old

I hope these things have been patched in linux as well, because OS-level BIOS write is just plain stupid (this includes GPU)

I personally would prefer buying updated chips
an extra plus for that is that there was less error involved with updating your bios
(unlike the update file, the chip just had to be compatible, it either fully worked or didn't at all, at least afaik)

to think, they could make them smaller and make them fit on tiny SO-DIMM like slots (thinner than an SD card)
so I don't see anything like that causing laptop thickness issues...

if they really wanted to keep the update functionality, they could still have that, treating the chips as SD cards (read-only when on the motherboard).
I'm sure overclockers would love that. :p

and this shouldn't be an expensive design process as well (SD cards should cost much more, and look how plentiful those are)

but that aside, the issue with bios brick is you can't take the chip off the board like you could with the above idea to flash it externally with a fix.
(if humanity wasn't regressing, we'd already have this, unless I literally have the absolute best brain on the planet)
^ yes I'm going overboard here because it's just as big of a deal as repairing your own electronics.

anyways, I'll outrule that as my issue
I still believe it's a motherboard issue, but I can't be certain unless I take my CPU to a place it can be tested...
if the CPU works, then the chipset is blown :p
thanks for helping info-wise btw :)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
well I wanted to update, I'm back up an running again :)
I'm a bit late on the notification for security reasons, but yeah, my brother gave me his old PC which is like 90% of the power I had before

it's a cruddy Pentium4 HT, and I hate it, but at least it's x64 and actually runs better for me with HT on
(software uses fake dual-core better, and by that I mean slower, but more stable (less hanging))

I can at least run Minecraft at ~14 FPS (4FPS to get the shot from earlier)

but the thing that irks me the most about this thing
I have 8GB (4x2GB (1992MB)) RAM (DDR2) installed in this thing, and I can only use 3.5GB (3504MB)
REEEEEEEEEEEEEEEE

I can't wait to buy or recieve a (AM3+) Phenom II x6 >3.5GHz 1M L2_cache to hopefully revive my previous machine (still haven't tested if the CPU is actually dead) and use this current one for something else like a server or NAS...

anyways, my OS is handicapped, but running...
when my last one died, it corrupted my HDD and I had to rebuild the partition table to fix it
but because I'm using GPT and not MBR, I need to use my brother's OS to boot it, since rebuilding the partition table made it unbootable.
I currently have no way to fix it other than formatting the HDD, which if I'm gonna do that, I'm downloading Xubuntu 18.04 and installing that.

Linux is a really good OS, but there's just tons of stuff that wasn't implemented well, so it's best just to use legacy functionality for stability.

on a side note though, I figured out how to set up multiple linux installations on multiple partitions as a result of fiddling around with OS recovery:
(NEVER use LBA!!! it sucks on linux, and GRUB can't load nor be loaded from it if the initial setup breaks)
MBR Disk [[ swap ][ boot (EXT2) ][[ OS1 (EXT4) ][ OS2 (EXT4) ] ... [ Data (EXT4) ]][ Recovery (EXT4) ]]
an 8GB swap with a 1GB boot should be overkill (GRUB is not very big)
also to note, only the Recovery OS should get the boot partition for GRUB (something you can boot to to restore the other OSs if GRUB should ever corrupt itself)

if 1 partition ever gets corrupt, you can just format and reinstall that OS without losing every other OS you've installed

but anyways, with all that BS out of the way
I've actually been working on a few projects, my primary focus being UGE of course

I'm not sure if I mentioned cbin earlier, but that's my simplified and (somewhat) performative port of ctypes with extensions for OS-native binaries
(currently focusing on gdi32 and such for Windows since Wine is a thing on all platforms)
I did mention gdi32 and user32 for windowing, but gdi32 also has better font support than native freetype and includes freetype
note though, cbin will restrict access to OS-natives from other OSs, so you won't be able to access gdi32 from linux or such...

but on a side note, cbin is going to be used for multiple projects of mine including UGE, SIDE, UGESL (my test), and my renderer for my vertex-less model format, along with many of my modules and plugins for UGE.

and finally, work on my DNS is progressing, so hopefully I'll be able to have my own URL for my website soon if my ISP hasn't blocked my protocols for such...
(I don't think they have, I'm already getting more value for cheap than comcast... kek)
^ and that's with a lousy 11Mb (~1.4MB) upload limit

so yeah, I'm not dead, just going through BS
I'm making it an effort to put in more than at least 3 new functions or 1 small implementation a day towards UGE

and that's aside from figuring out how to make python more secure (which IS possible)
but I haven't found anything better than my closure method (which unlike others, only has 1 (or 2 if you get into C) backdoor).

I think once I have my own metaclass in C, I'll be able to replace private member_descriptor instances with a new __private__ mechanic.
(or to put it more specifically, classes inheriting UGEObject will be able to use this functionality, since type won't be able to access private descriptors) :D

EDIT:
also I would like to give credit to Ethan K for working with me on private variables:
https://stackoverflow.com/a/54096923/2131849

EDIT2:
btw, I've been getting a lot of tears from my community
I hate to leave you guys like that... -.-

if Electron wasn't so disgustingly insecure, I wouldn't even have a problem with coming back
(still more secure than Skype though)

if you guys really want me back there, I'll try to grin and bear it
start a private convo with me here providing your discord tag, and I'll send you a friend request
if I get about 30 or so tags wanting me back, I'll make a return -.-

I have FRs disabled because I've been ratted through such
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
hey I just had an idea and was curious about what you thought about it...

so I came to a realization from this this bit on my wiki:
simplification_idea.png


so the display list is aligned by 32 byte sectors...

in my array class, I'd basically allowed for this:
Code:
dummy = array(
    datastruct,
    __size__ = byte_size, # giving slack for user error
    __align__ = sector_size
)
the idea I had was to reduce complexity by making __size__ be a multiplier for __align__
or basically:
Code:
dummy = array(
    datastruct,
    __size__ = sector_count,
    __align__ = sector_size = 1 # default
)
put into action, you wouldn't need to multiply the sector count by the sector size (32) to get the value for __size__.
basically eliminating the possibility of user error.

the only issue with this idea is if you have a badly designed format that gives you the full block size with an alignment value...
but I suppose I could make mode flags for such to handle this data automatically.
 
Last edited:

TDRR

Smash Journeyman
Joined
Sep 18, 2017
Messages
286
Location
Venezuela
There's a game you can try to mod and it could possibly be easier, it's 007: Nightfire for the Gamecube (other versions work too i suppose) Using a modified Quake 3 engine, it's very likely that it supports the same map and model format (IBSP and MD3, respectively) apparently the vehicle sequences use another engine so i don't think that will be easy at all.

More games that use the same well-documented Q3 engine in the GC, are Call of Duty 1 (the only console it came out for, IIRC) Jedi Knight 2, 007: Agent under fire and 007: Everything or Nothing. Those are the only games to use an open-source engine on the Gamecube and have good potential for hacking, CoD1 i think is the one that modified the engine the least.

Just some suggestions that could be relatively easy to implement into UMC, given that they most likely use a well-documented model and map format.

EDIT: CoD2 also came out for the Gamecube, but it's the Quake 3 engine on steroids and that likely means they changed the model and map format.
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just wanted to notify I've legit quit Discord
I had this protection that was supposed to protect me from Punch and allthefoxes from doing things to my account
but I was recently told it was flawed and was actually used for spying by someone who was close to us

so I changed my pass close to 12AM and went to bed, and the very moment I woke up
I'd found my account posted faked lewd posts between me and a friend in a public server I was in.

so yeah, changing your token doesn't keep hackers out of your account
proof right there, so I quit, I hate Discord, even Comodo members say it's not privacy focused.
and in my experience, Discord members don't even care
the platform sucks, and I'm glad I'm off it.

anything new you hear about my account on there is fake until proven true by me.

EDIT:
also I'm P'd all this BS made me lose my streak again >.<
image(6).png

basically, I try to keep this streak going just so I can have full effort put into my work for you guys :)
it's a lot of work to make them dark blue like that, and the amount of work I put in per day is at least 40 commits

which btw, everything you see there is nothing but commits ;)

EDIT2:
nvm, I never missed it, was tired and stressed and mistook today's for yesterday's :p
I actually made 39 commits yesterday, which is just enough to make it dark blue
so my streak is just fine :3
image(7).png

and I've already made over 60 commits today :)

the most commits I've made in a day is over 200 :p

but yeah, I'm working as hard as I can ;D
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just wanted to mention
I caved a little and did an emissive map for Brawl :3

^ this one's kinda fake because the real one wouldn't work on wii due to a memory overflow (it can work though if you lower the image quality enough)

to get it working, the emissive map is only the alpha map (1/4 the size) of the original emissive image, where the RGB value is supplied from the material's Constant Color 2

the application is no different from having an image with 256*256 green pixels (the original emissive image below)

I do have a shot of a REAL emissive map on the Wii here:

^ the issue here is the emissive map is 128x128 (RGBA8) while the diffuse map is 256x256 (CMPR)
basically you're seeing the image repeated rather than scaled
you can easily see this on the eye where the cheek glow i shown in 4 places
you can also somewhat see it on the tail

but yes, that's a REAL emissive map on the Wii

if anyone wants, the full emissive hack is here: (256x256 images)
https://mega.nz/#!l4ZnzAQA!cHOYoJ2f-dUDa9fEkeiqY-k2jlL8f4ON7YXp-Zb1yPM
the TEV is actually configured for a proper RGBA8 emissive map
it should work on everything but the wii

for the hack that works on the Wii (the TEV configured for the I8 map), you can find that here:
https://mega.nz/#!Y9gjzKab!rVwEL5KIXDFUrUEwEIZCx9rLZotL81A67Ce_sMtHmJs
also posted on BrawlVault:
https://forums.kc-mm.com/Gallery/BrawlView.php?Number=217482

if the Wii weren't so limited on RAM (64MB), I could do so much more (Pokken level graphics)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
lol I never really left X3
but yeah I try to do what I can :)

I'm exclusively on tox now
so if you wanna keep in contact with me, contact me privately (burnable message or something) with your tox ID and I'll send you a FR ;)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
getting off Discord was the best thing to ever happen to me :D
I've been working like crazy and am nearly completely finished with cbin.win32.gdi32 ^_^

I've already pretty much finished translation (there's like 2 lines I need help with, and then some other non-critical stuff)
now it's really just cleanup and compatibility, along with supplying error checks from the Micro$**t documentation.

once that's done, I should be able to get started on cbin.win32.user32 or cbin.win32.kernel32 before working on a class that makes window management easy (or easier than tracking pointers)

note to recap on the reason this is taking so long:
I've completely scrapped EVERYTHING with python
I'm strictly using the raw interpreter and only a few select binary modules, as well as a few extra modules (abc, codecs, _weakrefset) just to get things working. (I don't even have TCL support)

to be able to draw windows, I've been working on cbin which interfaces through cbin.win32 to user32 and gdi32
kernel32 mentioned above is needed for constants and functions used by the first 2 modules.

but window management with just those 2 modules alone is a pain in the A because you're basically calling functions while supplying pointers and cdata
so to make things easier, I'll be working on a window class rewriting code from pywinappdbg

this should give me more control over window management than I've ever had with python
eg: animated icons (non-taxing), custom window frames, and more

let's not forget I don't need wrappers for freetype or such as gdi32 provides all of this (not sure how reliable it is across windows versions though)

but that's not all I'm doing
when I said I was scrapping everything with python
I don't have threading or multiprocessing functionality and such but through python's _threading module
so yeah, there's still a lot I have left to do before I'll have something I can trust

if anyone's wondering how hard I'm working on this
every time IDEA saves my edits, SparkleShare makes 1 commit to update the source on my sync repo.
at the start of my streak I was making between 20 to 40 commits a day, but that was before I got off Discord
after getting off, my commit rate increased to 40 being a strict minimum with 60 being a good day
that increased again to 60 being a minimum topping out between 80 to 100
and as of recently these past 3 days, I've been doing at least 100 commits a day

most of this work was on gdi32.py alone, but I've been tackling other areas as well

also note I've been making all that while dealing with life
our water heater popped recently, and I've had to franticly clean my room to be able to replace it
(with how much I do with electronics this was anything but easy)
I've just recently gotten cold water working again by using a makeshift cap from a garden hose attachment on the hot water input line...
so yeah, water again... gotta love living in a rotting home :D

my point:
the less life I have to deal with, the more I can do on UGE :)
and 100 commits while dealing with life means I can still do more, but I'm getting close to a limit ;)

just think, if I were still on Discord, I'd probably still be making 40 commits a day X3
I'm so glad I got off that suicidal platform :D

EDIT: for those wondering what my work looks like
this is absolutely beautiful: :D
1554575764884.png


for those of you who don't quite understand
just making 40 commits a day is rather difficult (10 to 20 is average with my particular collaborative setup)
and near the last 3 columns I'm doing 60 to 100

if you're questioning the skews, those are all commits, there's no issues or fork merges or other activity there.
so yeah, hard work going on with over 6000 lines per file consisting of at least 200 functions and/or structures :)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
welp... looks like today is the day that so-ends my streak:
1554678239547.png

only 22 commits made before an update brutally murdered my linux installation by somehow changing my partition order on all my HDDs
initially this was just a grub error 17
but after fiddling around and following a few instructions. I screwed up my OS drive beyond repair u.u
but that wasn't the end of it at all
I've been trying all day to reformat my HDD and reinstall linux, but every installation reboots with "Error loading operating system"
and then to add, disconnecting all of my HDDs except the OS HDD leads to "No bootable medium found"
I've recently tried a net-less installation and that seems to have worked, so it looks like a bad update is screwing with me.
quite the annoyance here u.u

EDIT: yes there's a bad update screwing up my hard drives
I've recently worked around the issue and am back up and running again ;)
should be able to pick up where I left off tomorrow :)

EDIT2:
just to update (trying not to make too many posts), I've had to cut my commit level back to 30 these past few days, as stuff is getting very VERY busy...
the old water heater didn't go out without a fight and left some pretty bad rust stains all over the carpet...
we've finally got the new one in, and I have some royal work around the house to do after not having hot water for over a month.
that aside though, I've had some recent inspiration towards the designs for both my Helix as well as my model format

if anyone's willing to help me out though with some stuff
I'm considering switching to FreeBSD as Micro$**t is getting into some major influence over Linux and have been a platinum member for some time...
but now recently, Canonical (Ubuntu) has basically (they're not yet) become a Micro$**t partner...
(aside from the fact that Ubuntu is about as secure as Android these days)
but I'm not sure if I wanna switch to FreeBSD which is arguably about as secure as (if not more than) Arch, or use an Arch-based distro like Void, which has x86 support and is currently not in Micro$**t's grip...
honestly, the more I ponder, the more I'm considering switching to FreeBSD, are there any arguments aside from mainstream support that would drive me towards Void instead??

and also
I'm looking for a secure chat service that I can host my UGE Dev Chat on
I'm currently on Tox and Retroshare, which are probably about as secure as things get (not to mention I own everything of mine, including my profiles),
but sadly, both consist of buggy clients, and are at a lack for functionality...
is there anything better that's just as secure and doesn't make compromises toward anything??

EDIT3:
welp, I'm moving to Void
I can no longer login to my XFCE session because an update killed it again
after restarting, I was greeted with this issue:
https://superuser.com/questions/887430/xfce-login-error-unable-to-load-failsafe-session
now I'm stuck in a login loop after trying to fix it (no more error, just drops the session), which nobody knows how to fix.

so yeah, thank the maintainers for the bad update
... ah well, Ubuntu is dead anyways thanks to Micro$**t
I guess they just wanted me to get off so I could stop complaining... lol

EDIT4:
just a minor update
I haven't been posting so much for numerous reasons
Void Linux hasn't exactly been the most friendliest distro to me, and there's numerous things I can't seem to get working (SparkleShare being one of them)
but other than that, development has actually been going better than when I have been using sparkleshare
I've actually overhauled the API numerous times and have done some massive restructuring to make the backend super easy to maintain
like I actually have no problem working on things myself anymore
I've done so much now I've finally caught up to working on the data objects

but anyways, I wanted to update I won't be posting updates so much anymore until I actually have something
it makes me feel horrible to say "oh I have a new feature I've worked on, but still don't have a release yet"
so yeah, I'm going dark for a while, nobody seems to really provide input or ideas anyways (I'll be more active if you do), so yeah, I can handle working on things alone for a while :)

the new API is already mostly functional, but I still have my most important class to build yet (the nearly impenetrable bubble itself)
like I've redone the way everything is loaded along with how names are now registered with specific threads
constants are now UGEObject instances, and tons of code has been cleaned up

anyways, I'll update later on once I have something...
again, don't think I'm dead, I'll never die ;)
hit me up at any time, I'm always notified on here :)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
decided to make a new post because
while I still don't have a release yet
I've actually been making some progress

so the API has gotten a complete overhaul and is now much easier for me to maintain

I've implemented a metaclass that allows python to have actually private attributes
now it's not completely invulnerable since the metaclass itself is only a mock written in python
so while it actually protects the attributes of other classes appropriately (there's literally no way to access them without breaking the backend)
there's a small vulnerability within itself that can't be patched without moving the class to the C-API
basically it allows you to access the protected attributes of all classes applying it
thank python's inability to have proper private attributes

I do intend to move the code to C
but right now I'm just focused on making a release
it'll be patched the next release ;)

anyways, on to what I was initially talking about

so the base structure for the format section of the API is complete
I just need to go through and declare private attributes appropriately :p
after that there's some minor functionality for things like Vector that needs to be added
and I also have to work on the File class

in any case
the data section is almost complete
I've ported most of the classes to a completely new standard
what's done:
u()()
s()()
f()()
h()()
Struct()()
Union()()
Array()()
Field()()
Deref()()
Vector()()
switch()()
String()()

what's left:
nothing :)

everything is now designed to share the same functionality, for example:
Code:
pu32 = u(
    __size__=4,
    __addr__=u32 # jump to this before operating
)

data = pu32() # read
data = pu32( offset=80 ) # read, override __addr__

data = pu32( 108 ) # write (typical)
data = pu32( 108, offset=80 ) # write, override current position for __addr__
data = pu32( [80, 108] ) # write, basic Struct()() behavior
data = pu32( dict( # write, advanced Struct()() behavior
    __addr__ = 80,
    __value__ = 108 ) )
so yeah, you can do whatever you like, however you like now

all data structs behave like ordered dictionaries with namespace keys ( data.__addr__ )

so anyways, once everything's done there, I should be ready for bug testing and touching up whatever's needed


also, no you won't find my updated code on gitlab... yet
due to this outrageous summer weather, it's been difficult for me to work on my code
I haven't been able to run my DNS due to it's massive heat output, so I haven't had internet to sync with gitlab
on top of that, I haven't been able to run my monitors other than in the morning when it's below 80F

it sucks being poor... =3=

so yeah, at least look forward to some good news soon
I still need to work on the plugins as well as actually securing the sub-process that actually RUNS the API
so it's still gonna be a while before a release

if anyone knows how to do input/output pipe pairs (sockets are evil) for IPC, I could REALLY use your help
basically something like this:

the blue pipe: P1 -> P2
the green pipe: P1 <- P2
yes, dual pipes, not 1 pipe

if anyone even knows of anyone who can help, it would be much appreciated :)

EDIT:
btw, the capitalization of the data type names was a design choice to fit with the format section a bit better
but if you guys want, I can chage it back before release :)

I'll see if I can edit the poll for such
once I get close to a release, I'll check the results ;)

EDIT2:
well I couldn't edit the poll here
so I had to create an external poll:
https://poll.ly/#/2N6EymE2

for the privacy aware
this site does use google analytics as well as google fonts
it also has integrated facebook and twitter buttons
as far as I'm aware though, they don't seem to be involved with data collection (selling your polls to google and the like)

yes I'm highly against the act of data collection

EDIT3:
just to notify
due to some context management issues, I've had to slightly change the way Switch() works:
Code:
with switch ( test ):
    if case ( 10 ):

        with switch ( test2 ):
            if case ( 20 ):
                pass

    if case ( 20 ): # this will no longer execute
        pass
I know it seems a bit weird using `with`, so I intend to have my pre-processor do that work: (can't be done currently, too complex)
Code:
switch ( test ):
    case ( 10 ):

        switch ( test2 ):
            case ( 20 ):
                pass

    case ( 20 ): # this will no longer execute
        pass
also yes I've went back to lowercase names here because while switch()() IS a datatype, it's also a python function-keyword in UGE

yes the parenthesis are required
I could build a code to match switch test: and case 20: appropriately, but it'd be too slow to execute
consider the case where someone tries to be a douche:
Code:
switch {
    'test':
        value,
    'test2':
        value2
    }:
this would be an absolute nightmare to parse.
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just a small update to bring back a little hype
I'm nowhere near finished, but this finally shows some promise:
new_API_progress.png

yes I'm doing attachments for now until I can find a secure equivalent to G-Photos
I will literally review every image I've ever uploaded and update the URL to the new service
Google no longer deserves my use.
(I'll also pull my image attachments to clear up some general space on here, as I'm sure I'll use a bit before finding something decent, with as few as I intend to post) :)

so anyways, yeah the API is coming along, but I still need to port ugeFormat classes to the new metaclass that privatizes attributes
as well as improve the _____Prop functions since those are starting to become a pain to manage with how many I have
there's also a bunch of holes in the functionality I need to fix after so many redesigns...

on a side note
wow I can actually map things out now progress-wise

EDIT:
to explain a bit more, modules are loaded out of order
load is based on whatever python decides for it's hash, and will be different every run
it's also dynamically structured, which is why you see the "after required objects ____ ____ ..."
this means I can add whatever functionality I want and only have to specify whatever object(s) are roughly required
(also taking into account what required objects load whatever other possibly required objects, eg, Vector loads after Constant and Collection)

I'm sure you can tell this structure is completely different from the API you've seen prior
it took a lot of knowledge and experience to get here, and I'm still learning a ton of stuff to deliver the best possible experience I can with it ;)

EDIT2:
and just for the little bit of fire I'm feeling
I can't wait to see UnclePunch eat his words after trying to tell me "UGE will fail" when he was hacking me on Discord.
if he thinks he was just trying to put fire in my heart just to get my motivation up on it, he can think again
this outcome was inevitable, UGE is something I absolutely love working on, and nothing can motivate me any more than I already am.
(I don't mean to make that sound weird, but it's true I absolutely love working on it for it's simplistic complexity)

he'd better make himself up and announce his little ploy, or I swear I will see to it him and every member in his little gang (some mentioned earlier) will NEVER get to use anything beyond the basic functionality of UGE.
I'm amazed he's still allowed to admin MeleeWorkshop after he destroyed it with my account.
and no I won't get over it, I highly respected that server, if anyone wants me to get over it, I'd better hear him be properly demoted under fair justice.
especially after what he did to me (purging my account) and my server (hacking my friend's bot and all).

what he did is appauling and shouldn't be overlooked
I may not be on Discord anymore, but his mark on me still stands.
it's a shame the Melee Workshop (Discord server) is willing to tolerate such disgusting behavior.

EDIT3: I can feel my boasting rights getting stronger :D
update:
load_stage_complete.png

Module load stage complete! :D
buuuut it can't even make the first step past that yet (crashes on creating the context) =3=

something's going on with the UGEObject property initializers that's preventing attribute creation >_>
 
Last edited:
Top Bottom