• 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
hahaha I never would've thought getting likes would actually motivate me more
I've just turned on my monitors even though it's still 88F in here (turning night, I'm melting)
if this keeps up, I might just post more about progress regardless if it makes me depressed I'm not making a release :D
(I'll just ignore the depression, thanks for the support) :)

which btw speaking of progress, I've gotten as far as loading the scripts, libs, and plugins now
of course though, everything is broken XD
scripts are even being loaded as plugins for some reason

at least my watchers work X3
(the threads that automatically reload scripts on change)

EDIT: fixed the mixup issue, still got a few issues to work out though:
Code:
Connected to pydev debugger (build 191.7479.19)
beginning load stage...
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_object.py
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_datatype.py
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_constant.py after required objects UGEObject
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_union.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_array.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_vector.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_string.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_animation.py after required objects UGEObject
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_switch.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_struct.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_s.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_u.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_collection.py after required objects UGEObject
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_vector.py after required objects Collection Constant
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_material.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_rig.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_plugin.py after required objects Collection
loading module /media/tcll/https://proxy.duckduckgo.com/iu/?u=http%3A%2F%2Fthessdreviewcdn2.thessdreview1.netdna-cdn.com%2Fwp-content%2Fuploads%2F2017%2F09%2F121A0791.jpg&f=11TB_SG/tcll/Projects/python/UGE/API/ugeFormat_texture.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_shader.py after required objects Collection Constant
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_world.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_bone_anim.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_channels.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_lib.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_h.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_workspace.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_script.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_mesh.py after required objects Bone Channels
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_image.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_scene.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_scope.py after required objects Channels Constant
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_f.py after required objects DataType Scope
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_file.py after required objects Collection Constant
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_deref.py after required objects DataType File
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_field.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_object.py after required objects Primitive
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_root.py after required objects Scene World Object File Material Image Animation Texture Shader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_data.py after required objects Script Workspace Library Plugin Root Scope
creating context...
NOTICE: undocumented function s8
NOTICE: undocumented function byte
NOTICE: undocumented function s16
NOTICE: undocumented function short
NOTICE: undocumented function s24
NOTICE: undocumented function s32
NOTICE: undocumented function word
NOTICE: undocumented function s64
NOTICE: undocumented function dword
NOTICE: undocumented function s128
NOTICE: undocumented function f8
NOTICE: undocumented function f16
NOTICE: undocumented function half
NOTICE: undocumented function f24
NOTICE: undocumented function f32
NOTICE: undocumented function f64
NOTICE: undocumented function double
NOTICE: undocumented function f128
NOTICE: undocumented function u8
NOTICE: undocumented function ubyte
NOTICE: undocumented function u16
NOTICE: undocumented function ushort
NOTICE: undocumented function u24
NOTICE: undocumented function u32
NOTICE: undocumented function uword
NOTICE: undocumented function u64
NOTICE: undocumented function udword
NOTICE: undocumented function u128
NOTICE: undocumented function Vec2
NOTICE: undocumented function Vec3
NOTICE: undocumented function Vec4
NOTICE: undocumented function h8
NOTICE: undocumented function h16
NOTICE: undocumented function h24
NOTICE: undocumented function h32
NOTICE: undocumented function h64
NOTICE: undocumented function h128
Loading Plugins:
loading plugin: terminal
Unregistered plugin: terminal.py
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_plugin.py", line 74, in reload
<class 'IsADirectoryError'>: [Errno 21] Is a directory: 'plugins/terminal'
Loading Libraries:
loading library: RVL_IMG
Unregistered script: RVL_IMG.py
loading library: pillow
Unregistered script: pillow.py
loading library: GX2_IMG
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_lib.py", line 191, in reload
<class 'IsADirectoryError'>: [Errno 21] Is a directory: 'libraries/RVL_IMG'
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_lib.py", line 191, in reload
<class 'IsADirectoryError'>: [Errno 21] Is a directory: 'libraries/pillow'
Unregistered script: GX2_IMG.py
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_lib.py", line 191, in reload
<class 'IsADirectoryError'>: [Errno 21] Is a directory: 'libraries/GX2_IMG'
Registering names...
Loading scripts...
loading script: Quake_IQM.py
Traceback (most recent call last):
  File "/home/tcll/.IdeaIC2019.1/config/plugins/python-ce/helpers/pydev/pydevd.py", line 1758, in <module>
    main()
  File "/home/tcll/.IdeaIC2019.1/config/plugins/python-ce/helpers/pydev/pydevd.py", line 1752, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "/home/tcll/.IdeaIC2019.1/config/plugins/python-ce/helpers/pydev/pydevd.py", line 1147, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/media/tcll/500GB_SG/data/config/idea/config/plugins/python-ce/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "/home/tcll/Projects/python/UGE/test_FORMAT.py", line 5, in <module>
    api = API.init()
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/__init__.py", line 530, in __new__
    api.context = context = objects.Context(frontends,None,None, '',0 ) # TODO: proxy object across IPC to api.data
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_data.py", line 141, in __new__
    if script[-3:] == '.py': Scripts[script[:-3]]
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_collection.py", line 205, in __getitem__
    return __call__(cl,item,update=True)
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_collection.py", line 191, in __call__
    current = base(getparent(cl),cl,item,Index)
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_script.py", line 40, in __new__
    script.reload()
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_script.py", line 57, in reload
    ugeScriptType = ugeScriptType,
NameError: name 'ugeScriptType' is not defined
that last bit with the NameError is gonna be my biggest hurdle until I get to adding the missing functionality to the Format functions
and I still have to port them to my protected metaclass yet, which is also gonna be a pain since I won't be able to access protected attributes in the properties for initializers.

yes my properties provide initializers that initialize a variable with a value on creation
rather than making a code mess by setting them in __new__, which is actually more difficult to maintain than property defaults...

also yeah, I'm doing a stupid somewhere with plugins and libs
probably not handling packages correctly :p

also, the text is undergoing major changes, nothing is final
but loading will be more minecraft-like as seen (easier for debugging)
for general use though I will disable verbose info like loaded modules and undocumented functions ;)

EDIT2:
just to notify, I'm working on a separate module loader class to make the script, library, and plugin classes easier to manage
they're quite blocky, and share quite a bit of similar functionality (copied between them)
so yeah, less copied code is more managable ;)

this is pretty much the same thing I've done for objects and datatypes
it'll take a bit but should make things much simpler for me (without changing the complexity for everyone else)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
decided to make a separate post for this because I finally have something decently big

I'm actually finally hitting my data submission function in test_FORMAT.py
if you realize the name, this was designed to test the old FORMAT section of the API which has now been pulled from it's folder into a bunch of "ugeFormat_********.py" modules in the API directory as of the recent redesign:
Code:
Connected to pydev debugger (build 191.7479.19)
loading modules...
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_object.py
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_collection.py after required objects UGEObject
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_texture.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_datatype.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_s.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_struct.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_u.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_vector.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_string.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_channels.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_h.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_constant.py after required objects UGEObject
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_file.py after required objects Constant Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_vector.py after required objects Constant Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_rig.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_mesh.py after required objects Bone Channels
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_bone_anim.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_image.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_animation.py after required objects UGEObject
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_material.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_scene.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_shader.py after required objects Constant Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_scope.py after required objects Constant Channels
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_f.py after required objects Scope DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_script.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_lib.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_switch.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_workspace.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_array.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_plugin.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_union.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_object.py after required objects Primitive
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_field.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_deref.py after required objects File DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_world.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_root.py after required objects Image File World Object Shader Scene Texture Material Animation
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_context.py after required objects Workspace Script Root Library Scope Plugin
creating context...
NOTICE: undocumented function Vec2
NOTICE: undocumented function Vec3
NOTICE: undocumented function Vec4
NOTICE: undocumented function s8
NOTICE: undocumented function byte
NOTICE: undocumented function s16
NOTICE: undocumented function short
NOTICE: undocumented function s24
NOTICE: undocumented function s32
NOTICE: undocumented function word
NOTICE: undocumented function s64
NOTICE: undocumented function dword
NOTICE: undocumented function s128
NOTICE: undocumented function ugeScriptType
NOTICE: undocumented function ugeScriptFormats
NOTICE: undocumented function ugeScriptLibs
NOTICE: undocumented function u8
NOTICE: undocumented function ubyte
NOTICE: undocumented function u16
NOTICE: undocumented function ushort
NOTICE: undocumented function u24
NOTICE: undocumented function u32
NOTICE: undocumented function uword
NOTICE: undocumented function u64
NOTICE: undocumented function udword
NOTICE: undocumented function u128
NOTICE: undocumented function h8
NOTICE: undocumented function h16
NOTICE: undocumented function h24
NOTICE: undocumented function h32
NOTICE: undocumented function h64
NOTICE: undocumented function h128
NOTICE: undocumented function f8
NOTICE: undocumented function f16
NOTICE: undocumented function half
NOTICE: undocumented function f24
NOTICE: undocumented function f32
NOTICE: undocumented function f64
NOTICE: undocumented function double
NOTICE: undocumented function f128
loading plugins...
loading plugin terminal
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 116, in reload
<class 'SyntaxError'>: invalid syntax (__init__.py, line 25)
unloaing plugin terminal
loading libraries...
loading library RVL_IMG
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 114, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 58, in walk
<class 'NameError'>: name 'skw' is not defined
unloaing library RVL_IMG
loading library pillow
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 114, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 58, in walk
<class 'NameError'>: name 'skw' is not defined
unloaing library pillow
loading library GX2_IMG
unloaing library GX2_IMG
registering names...
loading scripts...
loading script Quake_IQM
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 114, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 58, in walk
<class 'NameError'>: name 'skw' is not defined
unloaing script Quake_IQM
loading script NW4R_BRMDL
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 113, in reload
<class 'SyntaxError'>: invalid syntax (NW4R_BRMDL.py, line 418)
unloaing script NW4R_BRMDL
loading script MMD_PMX
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 114, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 58, in walk
<class 'NameError'>: name 'skw' is not defined
unloaing script MMD_PMX
loading script Pillow_formats
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 114, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 58, in walk
<class 'NameError'>: name 'skw' is not defined
unloaing script Pillow_formats
loading script Zymotic_ZYM
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 114, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 58, in walk
<class 'NameError'>: name 'skw' is not defined
unloaing script Zymotic_ZYM
loading script NW4R_BRTEX
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 114, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 58, in walk
<class 'NameError'>: name 'skw' is not defined
unloaing script NW4R_BRTEX
loading script HAL_Labs_HSD
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 114, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 58, in walk
<class 'NameError'>: name 'skw' is not defined
unloaing script HAL_Labs_HSD
loading script Wavefront_OBJ
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 114, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 58, in walk
<class 'NameError'>: name 'skw' is not defined
unloaing script Wavefront_OBJ
loading script Blender
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 114, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 58, in walk
<class 'NameError'>: name 'skw' is not defined
unloaing script Blender
loading script Sm4sh_NUD
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 114, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 58, in walk
<class 'NameError'>: name 'skw' is not defined
unloaing script Sm4sh_NUD
loading script MMD_PMD
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 114, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 58, in walk
<class 'NameError'>: name 'skw' is not defined
unloaing script MMD_PMD
loading script HSF
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 114, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 58, in walk
<class 'NameError'>: name 'skw' is not defined
unloaing script HSF
so what's immediate is I've fixed up the logged text and redone my loaders
but what's not so immediate is I've fixed up the way functions are registered to the default namespace, for example ugeScriptType() is now made available to scripts specifically
the registrars that register these functions now do more than register only to namespace constants like UGE_MODEL_SCRIPT
this makes things much easier to manage the namespaces for the functions provided to other loaders

and with the fact I now have a base class doing all the work, it's so much easier to make these sorts of changes and have them be applied dynamically.


but anyways, this is huge in that it's the first time everything actually works as I want up to this point
it only gets up to the submission function, executing it is another story because almost everything in the frontend is still broken XD
there's still a major interface of deprecated code being used to handle private attributes, and removing it will be anything but easy
(all of the ugeFormat modules make use of it, especially for properties)

but heck, I still need to go back and redo the way importing and exporting works
before I only had the frontend loader, now I actually have the backend File class and registration, as well as a rough handler for datatype functions
I need to work on refining all of this and linking everything together yet

so yeah, I've still got a ways to go before I'll be able to actually run the submission function :p
still though, the fact I'm able to at least load the API is a huge leap (this is the part where everything works as I want it to)
but I still need to proxy everything and actually load it through the built-in interpreter, which I need IPC to be able to do
again I need help with TX and RX pipes linked to a spawned process (can't be forked) for IPC

UGE's interpreters are specifically Python 3.4.3 (Anaconda 2.3.0) which are 100% portable (no dependencies required)
my interface is designed to be run from any interpreter, so the proxy needs to be compatible with things like:
py27 <> py343
py35 <> py343
which can only be done by manually spawning the py343 subprocess with OS-native functionality, which is what I'm working on cbin for.


hopefully someone will be willing to provide me with the knowledge by the time I actually finish up the frontend
otherwise I'll have to spend extra time probing about for this knowledge
if you guys want this faster, please help me out
it'll be done regardless, but I would prefer to speed things along so I can actually get started on the plugins
(the plugins shouldn't be too complex to work on, I already know what to do roughly with modern OpenGL/GLSL to have an appropriate viewer and GUI)
^ not to mention I'll be using cbin with user32/gdi32 for drawing the windows

for Blender, I won't need the viewer plugin, but working on a wrapper for a blender script that implements UGE's API as a library won't exactly be straight forward...
especially for the fact Blender's python API isn't exactly good (it's full of errors and incompatibilities and isn't too well thought out)

you guys have no idea the amount of stuff I've had to hack into just to learn everything I talk about above
documentation on Blender's API is almost non-existant and hardly provides anything other than what you can find out by python's dir() function
and for the python side of things, there's almost nothing frontward giving me the info I need for ctypes and such (everyone's too obsessed with how your code should look rather than the important stuff)

EDIT:
fixed up the tracebacks above so you can tell where the errors actually happened
currently the code runs too fast for the frames to keep up

EDIT2:
and I've just figured out a way to make properties work properly with my protected metaclass using something that's been staring me in the face this entire time

my unfinished object-extensions interface which registers python properties of subclasses with parent classes before the parent class is created
for example Object.Bones is an object-extensions property

may as well merge this with Property since believe it or not, I wanted to deprecate it anyways for being unfinished XD
what's even funnier is this is the exact interface which will allow me to work with mods in the future :D

EDIT3:
welp, here's some good but depressing news
I finally hit the spot in test_FORMAT.py where it references Object.Bones
buuuuuut I'm currently at a standstill as this point is one of my large hurdles for what I have to do yet
if Ob.Data is None: Ob.Data = rig(Ob)
AttributeError: 'Object' object has no attribute 'Data'

the fix:
class UGEObject( object, metaclass=protectedtype ):
....__protected__ = [ 'Data' ]


while it looks simple enough, this will break literally the entire functionality of the format section until I port every last class to this thing x_x
I know I made this simple to manage, but still, you see how many ugeFormat_*******.py modules I have to work on
and then we have ugeFormat_mesh.py which defines annoyingly complex custom properties for vertices

blarg
I'm not ready for something this big at this moment. u.u
 
Last edited:

TDRR

Smash Journeyman
Joined
Sep 18, 2017
Messages
286
Location
Venezuela
Glad to see progress is being made. I can't wait for the release! (Guess it's still a couple more decades until then hehe)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
haha, sadly u.u
(that's a punch I deserve)
thanks for being patient :)

to notify of progress at least, my extensions system no longer uses the common, insecure `protected` interface that's been deprecated for some time
(insecure because there was ways to tie into it through closures)
but I've hit another rock with property initializers ALSO using that interface
I've been trying to work on a better interface since, since __inits__ is now a metaclass-protected attribute that can't be accessed externally
(that includes my backend)

about the only thing I can think to do here is pull a method from UGEObject itself and reference that method in Property
buuuuut there's a catch
I have other classes that aren't based on UGEObject that also use Property

so yeah, this means removal of that deprecated interface in one fell swoop

hoooo weee, this trip suuuure is fuuun :awesome:

EDIT:
API.protected has been removed :)
Collection objects are now unofficial UGEObject types (still got some work to do to make them official)

since Collections are now UGEObjects, I can also remove Channels objects with a little work :)
buuuut I still need to make them official before they'll actually be usable as collection bases :p
(by "official" I mean Collection.__new__ needs to match the signature of UGEObject.__new__)

so yeah, so close, yet so far :p

EDIT2:
well, I'm almost ready to start working on the finer details like how files are handled when opened, or how vectors automatically manage given data. :)

buuuuut I'm currently dealing with the stuff of nightmares:
craziness.png

the problem is getattr() calling __getattr__ which calls __getattribute__ before the frame is grabbed to compare the calling namespace with natives
I'm not sure what the grabbed frame is, but it's certainly not one of the native functions
as a result, "Constants" is inaccessible to the namespace calling getattr() which results in the AttributeError shown in the image

ah the joys of actual security in python :awesome:

EDIT3:
also, just a quick note, I'm getting rid of Channels before the release (noting since you still see them loaded above)
Collection objects are more than capable now that they've been ported to be a UGEObject themselves (they just need a tiny bit of work to fully support channels properly)
and to add Channels still runs on old code (no point in putting effort into deprecated code unless it's getting removed) meaning it's still insecure and unmaintainable

it's a lot of work to remove tightly integrated deprecated code, which is why it's not done yet
heck I'm still removing small bits of deprecated code for the old protected interface X3

hey at least I'm not pulling a Solar Freaking Roadways stunt and releasing an unfinished piece of software that doesn't work at all ;)
no, I'm delivering on everything I've promised for the release the very moment it sees light ;D

EDIT4:
lol like I said, I'm still cleaning up bits and peices of deprecated code: XD
another.png

(the image works, just click it)
+1 if you understand the meme X3

EDIT5:
please don't say anything to me about broken images in previous posts
the problem is smashboards incorrectly parsing some img tags
the links to the images that should be displayed work just fine (see the above image from ytimg)
I'm sure the staff team will have things sorted out soon ;)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
if anyone's willing to help me
does anyone have a version of OSX that works on Oracle Virtual Box on Linux??
(I haven't been able to get anything to work, best result is a freeze after a bunch of boot text)

with this I can test my portable interpreter for mac and actually start building some mac support into UGE
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
here's some fun
I've apparently discovered quantum state manipulation in python dictionaries

here's what happens on the context class's creation: (property initializers are supplied)
UGEObjectConstructor_inits.png


but when the context class is instantiated, the initializers somehow disappear: (there's literally nothing that removes them)
UGEObject_inits.png


which leads to this error when the context tries to create it's scopes:
Code:
Connected to pydev debugger (build 191.7479.19)
loading modules...
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_property.py
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_object.py after required objects Property
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_collection.py after required objects UGEObject
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_texture.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_channels.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_scene.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_datatype.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_vector.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_s.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_string.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_switch.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_u.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_script.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_world.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_lib.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_struct.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_array.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_deref.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_field.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_plugin.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_union.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_h.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_constant.py after required objects UGEObject
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_shader.py after required objects Constant, Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_scope.py after required objects Constant, Channels
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_f.py after required objects Scope, DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_file.py after required objects Constant, Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_vector.py after required objects Constant, Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_rig.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_mesh.py after required objects Bone, Channels
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_image.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeAnimation_action.py after required objects Vector, UGEHierarchicalObject
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_animation.py after required objects Action
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_object.py after required objects Primitive
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_material.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_root.py after required objects Texture, Image, Scene, File, Material, Shader, World, Object, Animation
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_workspace.py after required objects Root
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_context.py after required objects Script, Workspace, Root, Library, Scope, Plugin
creating context...
Traceback (most recent call last):
  File "/home/tcll/.IdeaIC2019.1/config/plugins/python-ce/helpers/pydev/pydevd.py", line 1758, in <module>
    main()
  File "/home/tcll/.IdeaIC2019.1/config/plugins/python-ce/helpers/pydev/pydevd.py", line 1752, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "/home/tcll/.IdeaIC2019.1/config/plugins/python-ce/helpers/pydev/pydevd.py", line 1147, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/media/tcll/500GB_SG/data/config/idea/config/plugins/python-ce/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "/home/tcll/Projects/python/UGE/test_FORMAT.py", line 5, in <module>
    api = API.init()
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/__init__.py", line 413, in __new__
    api.context = context = objects.Context(frontends,None,None, '',0 ) # TODO: proxy object across IPC to api data
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_context.py", line 86, in __new__
    '''.split() # automation FTW
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/__init__.py", line 321, in __getsetattr__
    super(cls,inst).__setattr__(attr,*val) if val else super(cls,inst).__getattribute__(attr))
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/__init__.py", line 321, in __getsetattr__
    super(cls,inst).__setattr__(attr,*val) if val else super(cls,inst).__getattribute__(attr))
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_property.py", line 39, in <lambda>15
    __get__ = lambda p, obj, own: p.__getset__(p, obj)
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_channels.py", line 121, in __getset__
    if val is ...: return Pr.__dscget__(obj)
AttributeError: Constants

Process finished with exit code 1
context.Constants is being referenced on the "automation FTW" line with a setitem call with automation
but there's nothing to return because the initializer never filled the property with a Collection object (AttributeError)

I've spent the past 2 days verifying literally everything else works perfectly
the initializers have just left the building #tableflip

EDIT:
so I decided to make __inits__ an open attribute for debugging purposes (so I could access it externally)
and low and behold (as I expected), the initializers show up in context.__inits__ now :srs:
(I also expect that if I set it back, they'll disappear again)

I'm not sure how it's being affected because the metaclass is only supposed to be setting a static attribute when a protected attribute exists in the namespace
meaning the dict object on context.__inits__ should be stored as a function argument to be referenced if allowed

yes I went with storing getset functions as the items for protected attributes rather than storing the values directly...
this because the functions offer me more control and reliability (less logic to have to execute on namespace verification, meaning more performance)

I know wrapping values in functions seems like a performance cost, but consider that I'm getting rid of verbose branching logic which eats more performance than calling the functions.


but anyways the only guess I could really have is the garbage collector mistakenly deleting the property initializers on instantiation
which doesn't make sense as the initializers HAVE references on both Pr.__initialize__ (protected) AND context.__inits__ (protected)
... unless that's part of a larger chunk of stuff that gets cleared >_>

...
welp, I think this is punishment for being too good at python
let be smitten by the python gods
lmfao

EDIT2:
yeah I'm literally stumped
stumped.png

tracking['Context'] is the same object passed to Context.__inits__ on class creation (this attribute is protected and inaccessible before Context is returned)
obj is a Context() instance which is supposed to be able to access obj.__inits__ (or rather obj.__class__.__inits__ to be accurate)

on class creation, Context.__inits__ is stored in a protected dict associated with Context specifically
that dict is then looked up for each instance of that class, the result of which should be the static attribute, being the dict supplied to Context.__inits__

an id() check should return the same memory address, but:
id(tracking['Context']) is 140153852680968
id(obj.__inits__) is 140153856325064

so something's going on with the metaclass namespace associating the protected dict to the class
obj.__inits__ doesn't belong to Context, but instead belongs to UGEObject

EDIT3:
I think I may have figured it out
this isn't an association error, but a lookup error
Context calls UGEObject.__new__ to create it's instance
in doing so, the lookup flips to UGEObject from Context, while the supplied class is Context
looks like everything's working correctly after all... heh

so yeah, this is a problem with how I designed my metaclass
recursive framing wasn't considered upon lookup >.<
hoo boy this is turning out to be quite a nightmare
I can't allow external manipulation without breaking the security of protected attributes, everything MUST be contained
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
for some good news

I fixed the issue, take a guess what it was :D
yet another problem with natives

dir() and getattr() only returned Context.__new__ to add to the natives, where I needed UGEObject.__new__ for things to be valid
so since the frame for UGEObject.__new__ being analyzed was invalid for Context, but valid for UGEObject (the superclass), UGEObject.__inits__ was returned rather than Context.__inits__

I fixed that by making natives able to be passed down privately so subclasses could inherit super natives better

and since that's been fixed, I just caught my debugger lying to me red handed:
debugger_caught_lying.png


debugger: your class isn't working, obj.__inits__ is still UGEObject.__inits__
me: then why is 'Scripts' a key from Context.__inits__ and not UGEObject.__inits__?
debugger: ...

EDIT:
BLARG!!!
another issue with natives
this time it has to do with my shoddy implementation of extensions
yes, that again >.<

so what happens is on creation of the scopes
yes it actually gets this far finally :D
Collection needs to access base.new
as you can probably guess, this attribute is protected
so I implemented an extension for UGEObject that would allow collections specifically to access it
but for some reason, the extension returns AttributeError

how much more of this pain and suffering must I endure to finally have something that works properly >.<

EDIT2:
cool, attachments are working again

figured out my problem with Collection
I'm stupid, that's my problem :D
look at what the 3rd blue entry is here (after extensions are added)
stupidity.png


Patrick: that looks like the name 'gethandler' to me :D

lmao, guess that's what I get for using a lambda function XD

EDIT3:
after fixing that, now it's an issue with Constant.new not being available
apparently adding it to NS in the UGEObjectConstructor doesn't work :srs:

more pain and suffering u.u
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
finally the nightmares are over:
finally_loaded_scopes.png

the context actually gets created and everything supplied appropriately

I am now walking out of my complex and into an open field of half-ported mutant code
lol, what do I mean by that?
look at the first channel of context.Constants
notice how it's the number -3810426877618554621
that number is the result hash(Scope)
context.Constants[Scope] returns the Collection displayed, which also needs it's __repr__ remade

with that said, Channels is actually scheduled for removal now that everything works
it's code hasn't even been ported, so yeah, it's literally running off the code from UMC 3.0 dev4.5
it's functionality is actually quite small and should be relatively easy to merge with Collection now that I'm able to
(now that Collection objects can hold Collection objects)

so that's the first thing I'm tackling since this will help me clean up the broken functionality of a lot of modules
my next main focus resulting from this being the properties on Vertex objects
this is gonna be a buttload of work, but it's still a big chunk of unstandardized stuff
once standardized, the functionality should be added to CollectionProp/Collection as well

let's just say this is stuff I've been wanting to do for a while, now that I'm able to :p
we're moving >:3

EDIT:
also I should note, you will not be able to access context objects from the frontend (scripts)
you'll only be allowed to access the current Root from the script as well as contained File objects in that Root
everything above that is inaccessible

also in the code, I know you've seen Workspaces quite a number of times and are probably wondering what they are
currently this is functionality to be expanded upon for the future
Workspaces are an asthetic functionality that allow you to have different Layouts (not built yet) similar to Blender

if I was to compare the functionality, the Workspace would be the blend file, and the Layout would be the same as the screen layout in Blender
what's not comparable is you can't open multiple blend files in blender, where you'll be able to manage multiple Workspaces in the same UGE window

so yeah, future treat ;)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
owie, this rock hurts:
Code:
pydev debugger: process 9418 is connecting

Connected to pydev debugger (build 191.7479.19)
loading modules...
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_property.py
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_object.py after required objects Property
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_constant.py after required objects UGEObject
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_collection.py after required objects UGEObject
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_file.py after required objects Constant, Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_shader.py after required objects Constant, Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_vector.py after required objects Constant, Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_image.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_material.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_world.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_channels.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_scope.py after required objects Constant, Channels
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeAnimation_action.py after required objects UGEHierarchicalObject, Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_rig.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_mesh.py after required objects Bone, Channels
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_object.py after required objects Primitive
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_animation.py after required objects Action
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_lib.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_script.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_datatype.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_struct.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_switch.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_vector.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_deref.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_field.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_array.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_u.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_union.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_scene.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_s.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_string.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_texture.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_root.py after required objects Animation, Object, Texture, Shader, Scene, File, Material, Image, World
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_workspace.py after required objects Root
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_h.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_plugin.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_context.py after required objects Plugin, Script, Workspace, Scope, Library, Root
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_f.py after required objects DataType, Scope
creating context...
NOTICE: undocumented function u8
NOTICE: undocumented function ubyte
NOTICE: undocumented function u16
NOTICE: undocumented function ushort
NOTICE: undocumented function u24
NOTICE: undocumented function u32
NOTICE: undocumented function uword
NOTICE: undocumented function u64
NOTICE: undocumented function udword
NOTICE: undocumented function u128
NOTICE: undocumented function s8
NOTICE: undocumented function byte
NOTICE: undocumented function s16
NOTICE: undocumented function short
NOTICE: undocumented function s24
NOTICE: undocumented function s32
NOTICE: undocumented function word
NOTICE: undocumented function s64
NOTICE: undocumented function dword
NOTICE: undocumented function s128
NOTICE: undocumented function ugeScriptType
NOTICE: undocumented function ugeScriptFormats
NOTICE: undocumented function ugeScriptLibs
NOTICE: undocumented function Vec2
NOTICE: undocumented function Vec3
NOTICE: undocumented function Vec4
NOTICE: undocumented function f8
NOTICE: undocumented function f16
NOTICE: undocumented function half
NOTICE: undocumented function f24
NOTICE: undocumented function f32
NOTICE: undocumented function f64
NOTICE: undocumented function double
NOTICE: undocumented function f128
NOTICE: undocumented function h8
NOTICE: undocumented function h16
NOTICE: undocumented function h24
NOTICE: undocumented function h32
NOTICE: undocumented function h64
NOTICE: undocumented function h128
loading plugins...
loading plugin terminal
loading libraries...
loading library RVL_IMG
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 118, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 60, in walk
<class 'TypeError'>: walk() missing 1 required positional argument: 'structs'
unloaing library RVL_IMG
loading library pillow
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 118, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 60, in walk
<class 'TypeError'>: walk() missing 1 required positional argument: 'structs'
unloaing library pillow
loading library GX2_IMG
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 118, in reload
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 60, in walk
<class 'TypeError'>: walk() missing 1 required positional argument: 'structs'
unloaing library GX2_IMG
registering names...
loading scripts...
Traceback (most recent call last):
  File "/home/tcll/.IdeaIC2019.1/config/plugins/python-ce/helpers/pydev/pydevd.py", line 1758, in <module>
    main()
  File "/home/tcll/.IdeaIC2019.1/config/plugins/python-ce/helpers/pydev/pydevd.py", line 1752, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "/home/tcll/.IdeaIC2019.1/config/plugins/python-ce/helpers/pydev/pydevd.py", line 1147, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/media/tcll/500GB_SG/data/config/idea/config/plugins/python-ce/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "/home/tcll/Projects/python/UGE/test_FORMAT.py", line 5, in <module>
    api = API.init()
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/__init__.py", line 429, in __new__
    context.load()
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_context.py", line 157, in load
    if script[-3:] == '.py': Scripts[script[:-3]]
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_collection.py", line 153, in __getitem__
    return cl(item,update=True)
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_collection.py", line 103, in __call__
    elif strtype: current = base(cl.__parent__,cl,item,Index); objects[current] = current
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 69, in __new__
    ldr = UGEObject.__new__(cls,*other,**kw)
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_object.py", line 95, in __new__
    else: initializer(obj)
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_collection.py", line 199, in __initialize__
    cl = Collection( own, getattr(own.__parents__[base],baseattr) if strbase else base, __builtin__=__builtin__ )
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/__init__.py", line 325, in __getsetattr__
    super(cls,inst).__setattr__(attr,*val) if val else super(cls,inst).__getattribute__(attr))
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/__init__.py", line 324, in __getsetattr__
    return privateattrs[attr](inst,*val) if f.f_code in nativecodes and attr in privateattrs else (
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/__init__.py", line 364, in <lambda>
    privateattrs[attr] = method( lambda dsc, inst,*val: dsc.__set__(inst,*val) if val else dsc.__get__(inst), item )
AttributeError: __parents__

Process finished with exit code 1
lol, this was a known error
just wasn't expecting to hit it so soon :D
(I'm sure you can tell where the state is at) ;D

basically, CollectionProp can't access UGEObject.__parents__, which is of course private :p
own in own.__parents__ is used by mesh and rig object types, as well as shape, action, and ipo animation types to work as extension objects

I'm thinking about solving this with own.Parents('name') instead, which would do the same thing as own.__parents__['name'] did for the backend
for the frontend however (yes I intend to provide access to parents because it's useful), you'll only be able to access up to the allowed object level

EDIT:
well I solved the issues and just wanted to how where I'm at now:
Code:
pydev debugger: process 324 is connecting

Connected to pydev debugger (build 191.7479.19)
loading modules...
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_property.py
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_object.py after required objects Property
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_collection.py after required objects UGEObject
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_channels.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_scene.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_world.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_datatype.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_h.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_deref.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_s.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_array.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_u.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_string.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_field.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_plugin.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_union.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_lib.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_texture.py after required objects Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_script.py after required objects Loader
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_vector.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_struct.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_switch.py after required objects DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_constant.py after required objects UGEObject
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_shader.py after required objects Constant, Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_scope.py after required objects Channels, Constant
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_f.py after required objects Scope, DataType
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeData_file.py after required objects Constant, Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_vector.py after required objects Constant, Collection
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_image.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_rig.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_mesh.py after required objects Channels, Bone
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_material.py after required objects Vector
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_object.py after required objects Primitive
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeAnimation_action.py after required objects Vector, UGEHierarchicalObject
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_animation.py after required objects Action
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_root.py after required objects World, Texture, Shader, Image, Scene, Material, Animation, File, Object
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeFormat_workspace.py after required objects Root
loading module /media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_context.py after required objects Root, Library, Workspace, Scope, Plugin, Script
creating context...
NOTICE: undocumented function s8
NOTICE: undocumented function byte
NOTICE: undocumented function s16
NOTICE: undocumented function short
NOTICE: undocumented function s24
NOTICE: undocumented function s32
NOTICE: undocumented function word
NOTICE: undocumented function s64
NOTICE: undocumented function dword
NOTICE: undocumented function s128
NOTICE: undocumented function Vec2
NOTICE: undocumented function Vec3
NOTICE: undocumented function Vec4
NOTICE: undocumented function ugeScriptType
NOTICE: undocumented function ugeScriptFormats
NOTICE: undocumented function ugeScriptLibs
NOTICE: undocumented function f8
NOTICE: undocumented function f16
NOTICE: undocumented function half
NOTICE: undocumented function f24
NOTICE: undocumented function f32
NOTICE: undocumented function f64
NOTICE: undocumented function double
NOTICE: undocumented function f128
NOTICE: undocumented function h8
NOTICE: undocumented function h16
NOTICE: undocumented function h24
NOTICE: undocumented function h32
NOTICE: undocumented function h64
NOTICE: undocumented function h128
NOTICE: undocumented function u8
NOTICE: undocumented function ubyte
NOTICE: undocumented function u16
NOTICE: undocumented function ushort
NOTICE: undocumented function u24
NOTICE: undocumented function u32
NOTICE: undocumented function uword
NOTICE: undocumented function u64
NOTICE: undocumented function udword
NOTICE: undocumented function u128
loading plugins...
loading plugin terminal
loading libraries...
loading library RVL_IMG
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 120, in reload
<class 'TypeError'>: required field "lineno" missing from expr
unloading library RVL_IMG
loading library pillow
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 122, in reload
  File "libraries/pillow/__init__.py", line 3, in <module>
<class 'SystemError'>: Parent module 'pillow' not loaded, cannot perform relative import
unloading library pillow
loading library GX2_IMG
registering names...
loading scripts...
loading script Quake_IQM
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 120, in reload
<class 'TypeError'>: required field "lineno" missing from expr
unloading script Quake_IQM
loading script NW4R_BRMDL
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 117, in reload
<class 'SyntaxError'>: invalid syntax (NW4R_BRMDL.py, line 418)
unloading script NW4R_BRMDL
loading script MMD_PMX
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 120, in reload
<class 'TypeError'>: required field "lineno" missing from expr
unloading script MMD_PMX
loading script Pillow_formats
loading script Zymotic_ZYM
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 120, in reload
<class 'TypeError'>: required field "lineno" missing from expr
unloading script Zymotic_ZYM
loading script NW4R_BRTEX
loading script HAL_Labs_HSD
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 120, in reload
<class 'TypeError'>: required field "lineno" missing from expr
unloading script HAL_Labs_HSD
loading script Wavefront_OBJ
loading script Blender
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 120, in reload
<class 'TypeError'>: required field "lineno" missing from expr
unloading script Blender
loading script Sm4sh_NUD
loading script MMD_PMD
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 120, in reload
<class 'TypeError'>: required field "lineno" missing from expr
unloading script MMD_PMD
loading script HSF
  File "/media/tcll/1TB_SG/tcll/Projects/python/UGE/API/ugeBase_loader.py", line 120, in reload
<class 'TypeError'>: required field "lineno" missing from expr
unloading script HSF
actually, I've made it to my breakpoint on test_FORMAT.py :)
this means everything works as it's supposed to, but only up to this point
if I was to execute anything past this point, I'd surely run into errors

so right now, I'm working on what's left to take care of in the backend
all of the missing functionality will now be fixed

also I should note, I've decided to go back on my standards
datatypes will be lowercase for ease, as well as avoiding potential conflict in the future
for example, currently I have Vector(UGEObject) (backend formatting object) and Vector(UGEDataStruct) (backend data I/O object)
after the change, Vector will be for formatting, and vector will be for data I/O

if the objects should ever be merged into a general space, they shouldn't conflict with each other

so yeah, Struct is going back to struct, Array to array, Field to field, Deref to deref, and so on
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
first test after porting Channels functionality to Collection :D
even redid __repr__ a bit (index is no longer displayed as it's now standard)
channeled_collections.png

what you see here is from the backend context.Constants containing the channel Scope (a subclass of Constant), being the Base class for the Collection in that channel

I was afraid there would probably be parenting conflicts, but no, everything works exactly as it did before :D
only difference is now you have the added functionality of:
context.Constants.Index(Scope)

... I might actually rename that to context.Constants.index(Scope)
reason for that is it behaves exactly like list('ABCDE').index('A'), except with the added benefit of automation

speaking of that, stuff like this is also possible now:
Code:
context.Constants[:] = {
    Scope: """
        UGE_MODEL_SCRIPT
        ...""".split()
}
what's that mean?
how bout something like this:
Code:
CurrentObject.Primitives[:] = {
    "MeshName": [
        { 'Type': UGE_TRIANGLES, 'Vertices': [
                { 'PositionIndex': 0, 'NormalIndex': 0, ... },
                ...
            ]
        },
        ...
    ]
}
yeah that's actually a thing now ;)

EDIT:
here's something big :o
probably pointless to everyone, but still big regardless :smirk:
I've just figured out a legit way to globalize the functionality of the attributes on Vector, and it has to do with all properties :D

Prop( collected='Parent.Collection' )

meaning now I can go all out:

UVs = VectorProp( allowNone=True, collected='Object.UVs' )

and since Object.UVs is a collection, indexing is inherent, meaning VectorProp will allow int input.
what does that mean for you?
it means I can scrap the above for this:
Code:
CurrentObject.Primitives[:] = {
    "MeshName": [
        { 'Type': UGE_TRIANGLES, 'Vertices': [
                { 'Position': 0, 'Normal': 0, 'Colors': [0], 'UVs': { 0:0, 7:0 }, ... },
                ...
            ]
        },
        ...
    ]
}
and everything should behave as expected
yes you can also of course supply the vector rather than the index of the vector and it'll still associate appropriately
that's just inherent functionality of Collection objects ;)

EDIT:
you know what, screw 70% less code than a Blender script
now that I've done this, I'm actually gonna bump that up to ~85% less code max (not exactly easy to achieve)
(I legit don't believe I can do better unless I start removing (auto-filling) syntax, which I'm NOT going to do)

you can never have 100% less code, that's simply not even writing a script XD
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
had to add some functionality to get things to really work

meshObject.Parents('Object.Type', 'rig')

the above will return the first Object up the hierarchy who's Type attribute is 'rig'
in particular this is useful for:

Vertex.Weights['BoneName'] = 0 # index

the nice thing about this is it's currently a very rough search
later on I intend to introduce more attributes for indexing and comparators (JQuery-like traversal) to better refine a search.
that's within an allowed scope however, don't think you can circumvent this to gain access to Context ;)

EDIT:
just to show what I've been working on:
Vertex_class.png

that's the new Vertex class
so much simpler, and so much more functional

yes I've actually had to create a base property
more like I had to create a whole interface just to add this functionality
but it's actually globally supported now and can be applied to any class

I'm still working on some minor support, like UGECollection supporting channel-bases
meaning referencing Vertex.Weights['BoneName'] references Object.Parents('Object.Type','rig').Bones['BoneName'] to create a Bone object.

yeah this wasn't easy to globalize, but at least now I can remove a huge chunk of ghetto code (more code than I added for UGEObjectProp)

also, might I add doing this makes things much easier to support animations :)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just a minor update to show everyone where I'm at :)

everything works almost as expected up to this point
frontend_automation.png

there's a minor issue I have with how namespaces are handled for things like scopes (should be privately integrated into the context)
but it's something I can fix up later ;)

currently having an issue with automation where the parent reference isn't working as expected and causing an error to raise
but yeah, things are finally looking up :)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
well I have some news that's a big oof
apparently I'd been running on my old focus for automation, which only focused on the current backend class, and not it's children
this is gonna be some work to fix x_x

so that's what's been causing me my hassles with where the blue line is in test_FORMAT.py on my previous post

EDIT:
alright, the first thing I've changed is UGEObject.new() is now entirely backend
initially I had this support made frontend for primitives, but now that automation is available, this confusing functionality is no longer needed.

instead you can do this:

Object.Primitives[:] = [
...
]

rather than some fancy way of doing Object.Primitives.new( ... ) for every primitive

for the second thing I've changed
the representation object used in automation MUST be iterable:

( UGEObject or UGECollection )[:] = ( list()-like or dict()-like )

both UGEObject and UGECollection count as dict()-like objects

for a 3rd thing I'm currently working on
automation should be customizable as to what you can allow to be set:

( UGEObject or UGECollection )[ : ] = ( list()-like or dict()-like )

I'm still working on a standard, but this is support to allow you to select specific hierarchical attributes to merge with what you're setting.

EDIT2:
on 2nd thought, I think I'll make that 3rd thing future support
considering I've been working on the standard for a bit, but still don't have much done on it
for now I think I'll just keep things direct
 
Last edited:

TDRR

Smash Journeyman
Joined
Sep 18, 2017
Messages
286
Location
Venezuela
Does this mean we might see a release next year? Whatever it is, glad to hear that even more progress is done and apparently many things now work as intended.
 

BubsCooper

Smash Rookie
Joined
Mar 13, 2019
Messages
2
Switch FC
SW-0192-9571-1144
Does this mean we might see a release next year? Whatever it is, glad to hear that even more progress is done and apparently many things now work as intended.
he is only one person. i'm sure you understand he hasn't hit beta yet with his build, and he's using python to make it.
 

TDRR

Smash Journeyman
Joined
Sep 18, 2017
Messages
286
Location
Venezuela
he is only one person. i'm sure you understand he hasn't hit beta yet with his build, and he's using python to make it.
Don't get me wrong, i know that he's one person and that making such a large project takes time, but i'm excited about the progress he has posted so i wanted to ask to see if there was some chance of a build happening sometime soon. Maybe not but it's better to ask in my opinion.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
lol calm down Bubs, he's fine to ask ;D

I can't promise, though I do hope to achieve something within the year :)
... erm, not this year since it's almost over, but next year, which development should boost within the cool seasons.
so yeah, with the overall simplicity of the new API on ALL aspects, maybe ;)

though I still have yet to actually port my plugins, which are their own baskets of complexity I still need to simplify
(one thing in particular being relative loading of compressed binaries WITHOUT copying to an external directory)

honestly though, I'm just as excited about working on getting this thing released as you are to see it released ;D
and to be completely honest, I've kinda made it a mental job, to the point where I can't work on anything else without feeling like I'm betraying everyone.
(I'm not hurting myself over it though, just I don't really play games or work on anything else much due to deliberate lack of interest)
^ sadly though this means cutting away most of the fun from my friends (eg: playing multiplayer minecraft for months)

for a small update I was hoping to post yesterday (got busy and sidetracked), while I haven't fixed the automation issue yet...
(it's more complex than you think, working with mechanisms that are used to get up to the point of the error)
I HAVE at least gotten repr() to work as expected: (for help with debugging)
better_repr.png


so that's another thing I'm working on perfecting,
where frontend access is provided through my properties,
while backend access is relatively privatized and restricted.
This is much more difficult than you'd think when you're working entirely in RAM rather than in source.
(I can't even trust my debugger anymore to return accurate results)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
ok wow, I thought my handler functionality for collections did more than it actually did
literally everything that makes use of them, use them for nothing more than shoddy automation

now that collections support automation on call, I literally don't need this entire section
so yay, I can actually remove the functionality from objects now for a boost in both performance and security
(the way handlers were ported is shoddy in itself, so I broke a few security rules using closures to apply the secure function)
^ access was secure, but the function applying that access through extensions was not

so yeah, huge bit of shoddy functionality is now being removed :D
what's the benefit?
this was greatly interfering with design

collection.new() would refer back to base.new() for all objects, meaning I had a separate tangent for functionality
while that's not necessarily a bad thing, in this case I basically had 2 interfaces that did the exact same thing, one being shoddy af

the only thing collection.new() had over collection() was you could use dictionaries (specifically) as items for automation
but yeah, that's now inherent with collection() (and collection[], though this may change for automation selectors) as of the prior channel integration.
(the difference between calling and keying is extra arguments can be supplied when calling, where keying just works as expected)

so this will be a performance boost on both load and run times
as well as make backend management much easier :D
 

BubsCooper

Smash Rookie
Joined
Mar 13, 2019
Messages
2
Switch FC
SW-0192-9571-1144
okay. i just don't want you to be rushed Dark. also it's fine TDRR i don't want him to rush UGE like all of the other programs out there that were rushed or made not so well. So ou're pretty much fine. ^^
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
lol I'm not your average corporate coding noob, I ain't rushin nothin ;D
I'm getting things to a level of perfection I (and everyone else) can be happy with ;)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
well now I'm at yet another point where my updated work is sucking in my shoddy work just to get things working
the code can't run with the previous design because I need __owner__ to be set within UGEObject.__new__ before the initializers are executed

so basically, I need to think of a way to make __owner__ a global functionality AND make it accessible to CollectionProp.__initialize__


but that gets into yet a whole nother slew of ...wait for it... native function namespaces, just to provide access to the property
wonder how many times I'm gonna need to re-visit this just to make sure everything works as expected

in all regards though, CollectionProp IS applied to rig, so given the proper handling of properties, the initializer SHOULD be able to access rig.__owner__

geeze, I didn't think engineering private attributes in python would mean building a metaclass boppo

EDIT: FINALLY!
automation_finally_working.png

now I can finally get to the hard part I was hoping to tackle days ago

and yes I know repr() isn't working for whatever reason
it's indecisive and going through an existential crisis on occasion
there's no reason for it not to work
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
I knew this was gonna be very difficult :smirk:
already had to redo the edits I made for automation on UGECollection
I actually pulled that down to UGEObject, which, fun fact, already roughly had the functionality
though what UGEObject had was a safety mechanic in case you supplied a dict as a Name
so that just made the job easier for UGECollection ^_^

buuuuut I'm not done yet
UGECollection now needs to compare dict-like objects to what UGEObject instances it contains
this is needed since primitives don't contain a Name or Index rep-spec

so yeah this'll probably be the most difficult thing I've worked on yet
why?
iterative attributes on UGEObject types currently aren't directly comparable and aren't tested:
UGECollection == [ ... ] or { ... }
most of the time this will likely result in an error since collection objects likely won't be created
I'm not looking forward to adding this functionality... u.u

for the performance on this, it'll have to be garbage O(n log(n)) because I'll have to compare every object representation recursively
if anything fails hierarchically, the result is False


also, I made a mistake earlier when I referenced Object.Primitives
I'd forgotten a change I made to make things more intuitive because I hadn't updated my test
so yeah, I've done that here:
automation_test_update.png


I've also included Materials and Weights, which is exactly what I wanted to test on this part.

EDIT:
btw, I should actually note that when you're doing automation on an attribute, it's actually slower if you specify the [:] because the property on that attribute usually applies this behind the scenes

meaning meshObject.Meshes = {} would be perfectly fine
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
progress update, I'm where I want to be :)
everything works decently up to this point, only minor bugs present currently (like meshObject.Parent is Root instead of Scene)
where_wanted.png

I haven't stepped into it's creation yet, but the attribute's creation here is what I've been interested in making sure will work accordingly.

for some extra notes, since I know automation works appropriately, I want to increase some performance by removing the blue line and integrating it with the for loop on the red line.
what that'll do is only select valid attributes (public properties) to automate, preventing invalid attributes from being set
this is where the O(log(n)) applies ;)

this of course means a slight change to my properties to accept values on initialization

the reason you commonly hear me mention coming back to these classes is there's only about 6 base classes I have to deal with that build the entire API.
- privatetype (metaclass)
- Property
- UGEObject
- UGECollection
- UGEDataStruct (metaclass)
- UGEDataType
the subclasses of these classes don't need much added to them
for management reasons, this is actually the best approach to reduce complexity.

EDIT:
well I made it through the rat's maze of private attribute initialization, and as I suspected, I found an issue where I wanted to test:
exact_wanted_position.png

the issue here is Vertex.BiTangent should reference a Vector object from the collection on Object.BiTangets
not create a child collection

this shouldn't be too difficult to fix, I just need to figure out how... heh

EDIT2: and I just realized a potential issue in my main test XD
the Vertex var should be:
Vertex = Primitives[0].Vertices[0]

not sure how I missed that one for so long, lmao

EDIT3:
just wanted to give an update on support progress for the Vertex class's attributes

- Position
- Normal
- BiTangent
- Tangent
- Colors
- UVs
- Weights
- Materials


for what's in red, UGEObjectProp doesn't quite support direct-channel collection references yet
for what's in Yellow, while everything works properly on UGEObjectProp, what doesn't yet work is in UGECollection channel management

progress is going though, it's just not so easy to focus on when you have to worry about everything else the class does as well... heh
still beats how unmanageable the old API was though XD

EDIT4:
the suspense is getting very real, like building a custom XML model reader and traversing deep into the hierarchy hoping not to hit an error
getting_closer.png

I'm happy I no longer need the breakpoint in my test since Vertex is literally the only class that uses this functionality currently
the reason I have 2 breakpoints is because the load order between attributes is as random as quantum state, and I want to make sure everything works accordingly

the currently highlighted breakpoint is where the green attributes above go
the yellow attributes go to the red breakpoint

I'm happy it gets this far ^_^

EDIT5:
well I just want to update, I'm currently experiencing brain-lock
basically, everything is falling together, but doesn't exactly fit, and I'm starting to write shoddy code to make things fit...
I've defined too many ways of doing things within the properties that's currently causing conflictions with my ideas
something is going to be removed while the other is improved, but I'm not sure what yet,
while most of the functionality gets down-ported to the base classes in a decent way...

the issue is I'm doing stuff on property creation, property initialization, and UGEObject/UGECollection creation
some of this stuff I don't need, and it's over-complicating things to have to manage
it's simple, yes, there's only about 1000 lines of code I need to manage to make a base-level chage
but it's a lot to have to think about when you're building a huge dynamic hierarchy that manages itself, all relying on the same master class
(it's a matter of deciding what functionality should be at the roots vs subclasses, and what should be avoided to ensure simplicity while maintaining compatibility)

so yeah, I just need a break for a bit before I start to untangle this mass of wires

fun fact
while it sounds like I'm bulking and bloating UGEObject
down-porting code from sub-classes to base-classes actually helps to reduce overall bloat and improve maintainability
as well as increase performance since you can optimize value testing through a more refined non-recursive elimination process with organized code
it also helps to carve appropriate standards for extendability
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
made some progress on the properties and got farther ahead than the last time I was at this point
if you don't recall, repr actually works fully now
figured out it's because the initializers weren't always firing with the default values on all properties,
leading to some properties raising an error on repr and breaking the whole thing
fixed_properties.png

and yes, I'm also working on a theme in IDEA I'm calling "Dark SIDE"
(yes I actually plan to put this in SIDE after I get it looking decent enough) :)

EDIT: oooooooh boooooy
I've just found a major issue that'd been missed for some time
with the recent added functionality of using representation objects to create UGEObject instances with
you could only use dict-like objects as representation objects, list-like objects weren't considered
this is leading to issues with the creation of Vertex.Colors and Vertex.UVs
but everything else works so far:
problems.png

except for Vertex.Weights, that attribute is saved for last, because there's a lot more I need to do to get that working properly

what does the image mean?
look in the debugger Variables, where I've expanded the Vertex object in RAM
everything marked with a Traceback hasn't been processed yet, while UVs is currently in processing (just a blank Collection)

and yes I haven't disabled Vertex.Name yet, it hasn't been top priority, so it's kinda gone unfocused and untouched :p

so yeah, I get to fix UGEObject by working on properties again
yaaaaaaaaaaaaaaay
(the order of the list-like representation object determines what properties the values are assigned to)
^ property order however is currently unordered for performance... ugh
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just a minor update I wanted to share
I finally got around to working on a decent traceback printer (it's exactly like python's default printer, but omits the "raise" line in the stack)
code: (feel free to copy)
printer_code.png

results: (ran with different exception types)
printer_results.png

in UGE, various backend components raise critical errors whenever a runtime-breaking case happens (doesn't happen normally)
so rather than having the stack display the raise line as would happen normally
it now behaves more like python errors and omits the line to focus on what actually matters


in other news, I've redone my standards a bit
rather than focusing on creating UGEObject instances with a Name
the focus now directs toward a representation object (usually a list-like or dict-like iterable)

doing this has actually improved the performance of UGEObject instantation, as the handling for this is much simpler


and on a side note
the issue with properties from my previous post...
yeah I actually got that working too with a decently fast method
which allowed me to actually improve how __inits__ was created for UGEObject classes
so yeah, more performance there as well, with better maintainability (less hacky code) :)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
well this is some downing news I didn't foresee
looks like GitLab is going down the disrespectful path as well...
GitLab_BS.png

that's a shame, cause I've been looking forward to going full FOSS when things were ready...
but I'll be honest, I did kinda anticipate this sort of action, just hadn't really thought they'd actually do it...

guess that just goes to show...
you can never trust 3rd party resources

I'm aware I can use the GL-CE software which they claim won't have the telemetry BS (aka Data Collection)
but last I knew about that, it was actually less secure, prone to remote privilege escalation

so yeah, I'll probably work on my own solution in time, and have something up when I'm actually ready to beta test
I'll build my own solution if I have to, I'm sick of everything working to screw me over.

EDIT:
I just want to mention right here, UGE will NEVER collect any form of telemetry
this type of data threatens your rightfully owed privacy and anonymity

I say this because I do intend to use UGE for collaboration purposes (including chat) which would be valid locations to collect telemetry with.
but no, the only things UGE will track are whatever content you view whenever I introduce extended P2P networking
all tracked contents will be stored locally, and may be used as fuzz data (think of BitChute or Mastodon, maybe UseNet)

so yeah, rest assured UGE won't ever do any of these filthy practices
(and neither will I, but of course, I won't be hosting anything for UGE to rely on nor send to)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
not sure how this went overlooked for so long without issues
so UGECollection has been hashable as it's been bunking off UGEObject
but what has me stumped is how everything's been seemingly working properly

UGECollection needs to be hashable for channeled collections to function appropriately
but in this case, I do believe there's a few exceptions that haven't been thrown

so I've been working on __hash__ which should now return the same value for like collections:
hash( Root.Scenes ) == hash( Root.Objects )
if both collections are empty, the above test should be True

this will be for the various comparisons you'll be able to do against collections:

Scene.Objects == { 'Object0', 'Object1', 'Object2' }
Object.Positions == [ (0,0,0), (0.5,0.5,0.5), (1,1,1) ]
Vertex.Colors == { 0: 0 }
and more

with the new standards of creating UGEObject instances with representation objects, this functionality is actually needed to verify things are correct...
however, I think python has other ideas currently:
python_please.png


to explain in detail, items is a dict holding { current: 0 }
current is a UGECollection instance

when iterating manually over items and comparing that k is current, you can see that for the 1 item contained, k is in fact current
but when comparing if current is in items, the test returns False

so items is holding current, but current is not in items.

python... please... :srs:

no I'm not deliborately fudging __eq__ to make it return False
in fact, __eq__ should be returning if k is current (o is cl; current.__eq__(cl=current, o=k)), since that's really the only beta I'm testing atm
so k is current, but o is not cl
python... wake up! >.<

EDIT:
ok it's not my code causing this (at least not directly)
my code's actually working perfectly :grin:
it's just IDEA's evaluator with my metaclass that's causing this to happen

after running stepping through the code and watching things as my backend creates it's objects
they appear to be compared properly :)
proper_comparison.png


oh and btw
hashing a collection is O(n) for UGEObject.__hash__ due to hash( tuple( cl.__indices__.values() ) )
I could probably make it O(1) again by buffering the hash value every time it's updated

and what's even worse:
items.setdefault( current, Index ) is O(n*n) due to __eq__ :(

at least I'm doing as much as I can with C logic before it comes back to python to try to make up for the hit.
but like I said, it can be better where UGECollection.__hash__ instead returns cl.__hashvalue__ (not official yet, but will be soon)

hey list objects use __index__ for speed, so I can borrow some tricks too... lol

EDIT2:
nvm... apparently it's NOT just my debugger affected by this:
dupes.png

indices is holding duplicates while items is updated to match
 
Last edited:

TDRR

Smash Journeyman
Joined
Sep 18, 2017
Messages
286
Location
Venezuela
Here's a recommendation of a game to crack: Nicktoons: Globs of Doom. There's a whole slew of very good Nick character models that actually look like the character they should be, which is extremely rare to see in a Nick game.

By this point i already got the ones i care the most for, but that's not to say i wouldn't re-rip them just to get the original rigging + animations and a far less distorted model.

Even if you don't, i'm still looking forward to the release of this program. I'm not losing hopes for a 2019/early 2020 release! :D
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
honestly, with the way things are looking, these constant issues with things not working right is driving me up the wall >.<
like I actually think this is just python not wanting to behave
don't be surprised if this takes longer than early 2020 :(

when something does this, I'm really not sure what to think anymore:
>>> o = SomeObject()
>>> o is o # there's literally no way to fudge this
False


that's basically what's going on here
after this, I still got a lot of work to do, this is just the API alone
tbh I'm getting tired of working on it without being able to think of a decent solution >.<
but like... I literally can't think of any other way to do things while keeping them simple

I'm trying to do what I can, but I can't promise anything soon :(
all I can really say is to join as a beta tester to get early access
(I don't have anything up rn, I'll probably end up setting up my own git repo when it's getting close to being ready)

yeah I'm not doing any of this EA, Activision, Bethesda BS where the release IS the beta
anyone who wants to beta test will know they're beta testing
while the actual release gets the polish for everyone else.

F the corporate scum

EDIT:
well, after a good break, and an uncontrolled re-run (letting go of the reigns (removing all breakpoints) and seeing what happens)

the good news is it gets as far as it did before the new standards
that bad news is I don't trust the integrity of what's going on in the backend.

Context.Constants is not able to display it's repr unlike every other collection up to the current point
(the length of Constants is 11 channels (being the constant types), which I'm not too sure is correct)
at least the contents of every other collection appears to be correct

I think my privatetype metaclass might be doing a bit too well at keeping things private
causing IDEA's debugger to have a mind of it's own :dizzy:

I think I might just integrate a debug flag to make privatetype not so private
just so it doesn't delete the private attributes from the classes, so I can see what goes on...
rather than relying on internal variables that might not display the value they actually hold
(pretty sure this is an issue with debugger inspection frame interference (out of my control))
^ I doubt it's an issue with __closure__, but this is also plausible at worst
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
figured this was too good to simply post an edit
I literally can't predict how UGE is gonna behave whenever an operation completes
I just fixed a minor issue with UGEObjectProp and now the Vertex object in my test gets created without crashing:
Vertex_progress.png

it's not perfect, pretty much the only valid attributes are Materials, Normal, and UVs
but we haven't crashed yet :D

on a side note, you can probably notice from the image just how much work the UGECollection class has to do,
and why it's quite mind boggling to have to maintain...
(this is why I designed it so I wouldn't have to maintain it, because it just does soooo much)
^ the maintenance is supposed to be everywhere but the core classes (UGEObject, UGECollection, UGEDataType, and the like)

so hey, TDRR, if I keep getting luck like this, that early beta might just happen after all :)
 

TDRR

Smash Journeyman
Joined
Sep 18, 2017
Messages
286
Location
Venezuela
it's not perfect, pretty much the only valid attributes are Materials, Normal, and UVs
but we haven't crashed yet :D

on a side note, you can probably notice from the image just how much work the UGECollection class has to do,
and why it's quite mind boggling to have to maintain...
(this is why I designed it so I wouldn't have to maintain it, because it just does soooo much)
^ the maintenance is supposed to be everywhere but the core classes (UGEObject, UGECollection, UGEDataType, and the like)

so hey, TDRR, if I keep getting luck like this, that early beta might just happen after all :)
That's quite interesting, and it's nice that you got it running without any crashes! (yet)

If that early beta does end up happening, make sure to PM me a build, i got a TON of models to test it on!
 

KeyGaff

Smash Rookie
Joined
Oct 29, 2019
Messages
4
This looks super exciting!! I'm just getting into model editing now after doing a fair amount of texture editing. Is there any way to import models right now? I'm using DAT texture wizard but I'm not sure if you can add in models with it.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
K KeyGaff try to avoid the earlier stuff for now
I was quite the python noob more than 4 years ago and UMC isn't really worth using, despite it's looks
currently UGE is just the API, there's no UI or anything to go with it, heck I still have yet to integrate that command line functionality I'd worked on earlier... heh
but at least the earlier images for UMC are what's in the works (to be improved) for UGE ;)

as for DATTW, I think that's only for textures
iirc, SmashForge is the only thing I know of that's claimed to be capable of importing models into Melee

as for UGE, it's not meant to be direct, you basically export a DAT that's supposed to match Melee's structure (it's a bit more complicated than that)
where you should be able to use another tool to write it to the ISO
sadly nobody's worked on a file patch code yet for your console to be able to load them on the fly


also, a minor update strictly for hype XD
audio and video WILL be supported :)
can't say how well though (don't have the classes built yet, just the script support, much like animation support)
I hope to have it available by the release, but I can't promise anything :)

I've worked with PCM audio in the past, and know how to copy samples from a WAV file, and paste them directly into a BRSTM file...
better yet, I've known exactly how PCM sampling works for some time
here's a triangle wave made with 8-bit samples:
[ 128, 86, 44, 2, 44, 86, 128, 170, 212, 254, 212, 170, 128, 86, 44, 2, 44, 86, 128, 170, 212, 254, 212, 170, 128 ]
Code:
         -           -   
        - -         - -  
       -   -       -   - 
-     -     -     -     -
 -   -       -   -       
  - -         - -        
   -           -
^ note that this doesn't factor in sample rate
the only thing you'll hear from that is a tick at 44100 Hz as it's far too fast
you'll need something slower and will need to duplicate the data a good 50 times to be able to actually hear anything. ;)


TDRR TDRR lol the build will be on my repo ;D
(I actually don't need to build it due to the fact I use python and include the (py34) interpreters for windows and linux)
^ the interpreters don't include the bloat of the standard library, and only include a few C modules, so they're extremely small (12MB for the win version)

to beta test, you'll need to git clone my beta repo and run ;)

yes I still intend to have downdate support in case things work in ways you don't like

also, speaking of git:
GitLab_good.png

I'll probably use them for issue tracking, since that's apparently hard to do on your own (hopefully nobody pulled their accounts yet)
as for my sources, yeah I'll probably just self-host
that previous action they did made me weary of trusting anyone with my stuff, even if they are good...


EDIT:
btw, remember, if you're going to request access to my gitlab group, contact me first if you want to be accepted.
since UGE is currently nowhere near a beta, I'm not just accepting anyone.
once UGE is more complete, I'll open up the repo to the public (wouldn't be FOSS otherwise) ;)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just to notify, I'd gotten more stuff working properly in the backend:
Vertex_progress_2.png

constants were giving me a hard time previously
but now I've even fixed up repr values :)
properties now display in their defined order on ALL objects

now I'm just back to what I was working on before the new standards
Collection_problems.png

though don't get me wrong, Repr={} actually helped me out here by quite a bit, whilst also reducing CPU use from double iteration:

old:
obj = UGEObject()
obj[:] = default # 2nd iteration over properties


new:
obj = UGEObject( Repr=default ) # single iteration, applying values on property initialization

although you may have passively noticed Vertex.Position no longer has the combined attribute.
the reason for this is vector()() supports custom ordering (including augments), or you can even use struct()() to define your own order with other attributes
so yeah { 'wxyz': [1,0,0,0] } is no longer supported :p

I may add it back later depending on demand (legit cases, not just preference)

anyways, I'll currently be working on rebuilding __call__ on UGECollection due to the issue shown in the image:
Vertex.Colors retrieves it's value from Object.Colors, which of course returns a collection
cl.__singular__ is False for Object.Colors, but True for Vertex.Colors, so that the returned value from the channel is a Vector from Object.Colors

the other issue there is objects[item], where item is a tuple when we expect an int for the channel

yeah, I got a lot of work to do here :p

EDIT:
well I remembered something from my past history dealing with channels, but I'm not sure of my reasoning for why it's not available now:
collection( val, channel=ch )
I can't seem to find anything related to it on this thread, so I'm thinking it may have been something Punch griefed when he destroyed my discord server:
unknown.png
dangit >.<

well anyways... current logic is telling me it would probably be a good idea to re-implement it for the new standards
since it would help fix both of my current problems while also giving users a greater level of control...

if I end up repeating a past mistake, I'll just fix it again.

EDIT2:
There is a CHANCE... THIS WILL WORK!
Collection_restructure.png


EDIT3:
elif item in objects: current = objects[item]
TypeError: unhashable type: 'slice'


FOOL, THIS WILL NNNNEVER WORK!

EDIT4:
oh I'm r#tarded hahaha
I see the problem right there in my screenshot
there's a little something missing after the for loop in __setitem__ XD

EDIT5:
elif item in objects: current = objects[item]
TypeError: unhashable type: 'list'

U WOT M8?

EDIT6:
huuuh guya buh
I found the problem
the automation object for creating the mesh is being passed as the item for the collection

his didn't happen before because I used to call cl(k)[:] = v
which would handle the automation recursively as would be proper

but after changing that to cl(v, channel=k), the recursive behavior is now left up to __call__ to manage
which of course it's not
the item validation section is what's tripping the error, since yeah, for some reason, lists aren't hashable.

if collections can be hashable, so can lists
tuples iterate the exact same way, and if a hashable item within a tuple changes, the tuple's overall hash changes

*sigh* hoooow annoying
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
thanks for the info
honestly I've been quite busy dealing with life as of recent as well as other issues such as possible termination of my youtube account this december.

UGE has been open in IDEA on my primary machine this entire time, but I haven't been able to work on it
so just to explain, that's why there's been no updates on here as of recent

heck I haven't even been able to work on my DNS just to get internet on my primary

so yeah, if you start seeing images on older posts not be displayed, it's because of all the work I've been doing to manage things
(this is an issue with smashboards, eg my signature, the same URL works just fine on other sites)

EDIT:
just a minor update to add some info
I've been working on Vector a bit cause it's been giving me some issues within collections

I've already taken care of hashing and made that proper
for example if X and Z are supplied:
# vec: Vector{ X: 0.0, Y: None, Z: 1.0, W: None }
hash(vec) == hash( ( 0, None, 1 ) )


what I'm currently working on is __eq__ in which these should all be valid:
vec == ( 0, None, 1 )
vec == [ 0, None, 1, None ]
vec == dict( X=0, Z=1 )
vec == dict( X=0, Y=None, Z=1, W=None )


the fun part though is gonna be working with external data types like numpy.array

pretty much the only thing I can think of to make this work is to treat everything as a tuple or dict, which may not work well for external data types >_>

also, the major issue I'm having with this is dicts are not hashable
UGEObject types can be represented with dicts, which should be allowed to be passed to collections[dict()]
this is why I haven't really had anything to say for a while (aside from dealing with life)

EDIT2:
just tested to verify that repr comparison is complete (can't test None with given data, but I'm already sure it works properly)
vector_repr_cmp.png

you may notice I'm not testing for current == current
the reason is because it currently returns False due to a complex issue with __iter__
which of course, is the functionality I need to make this work properly in collections... u.u

oh and btw, while dict comparison is valid
dicts likely won't be used to grab the vector
instead, the likely use will be vec()() or struct()(), which are both dict-like

what exactly determines a dict-like object?
if hasattr( obj, 'items' ): obj = dict(obj)

and yes, since struct()() has `items`, that means you can't use that attribute for R/W in scripts
would've been nice if Guido had thought about that ahead of time and made a magic attribute instead
or better yet made dicts iter items by default, that way I wouldn't have to follow broken standards with UGEObject types.

I swear, I'm considering writing my own derivative of python just to:
- fix broken standards
- make solid standards efficient and performative
- provide better cross platform reliability (screw OS reliance, ASM FTW)
- trigger the followers of the pythonist religion (beautiful fireworks)
- provide a viable alternative to python that devs can actually rely on

whoever says you can't have readable code that performs well needs to learn how to program.
(if we didn't have to jump through so many tedious hoops, there wouldn't be any reason to fuss)

EDIT3:
also, you may notice `flag` is not being compared
the reason for this is because it doesn't have any external affects
it only affects the internal methods that apply any sort of prior transformation math to the vector

in fact, most methods like Vector.rotate() will have arguments for returning an untransformed or pretransformed result
so the value is the same regardless of the internal transformation spec.

EDIT4:
updated
items() was actually the problem with everything (and some of my stupidiy) :p
vector_repr_cmp_full.png

fixed some extra issues too like len() and dict()
sadly I can't do dict(current) like I can do dict(mappingproxy())
I'll have to look into what makes them special, but for now, items() works :p
(after all, collections function exactly like that too)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
I think I may have figured out how to fix my issues I'm having with collections and representation data.
by adding a classmethod that's specifically designed to take an input representation value, and return a specific hash value based on the class's needs.
this would allow customization without over-complicating the logic in UGECollection like I'm currently doing

it's actually quite difficult to work with trying to figure out what 1 of 100 values would be compared with 1 of 100 classes and return the appropriate instance
this is completely the inverse of what this rebuild was intended to achieve, so I'm doing a minor redesign
all that should be needed is a few functions added to UGEObject, UGECollection, Vector, and a few other classes

btw, I got Vertex.Colors working properly, buuut that fix broke Vertex.Weights again
my brain can't physically process the exponential comparisons with the given attributes needed to build UGECollection appropriately
so that's why I'm redesigning
might be a little slower (or faster, who knows), but at least it'll be more manageable and provide option for new classes
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
oh holy S, this is something I've actually been looking for! (not top priority, but still)
THANK YOU! ^_^

I'm absolutely backing this up :D

while I'm on the topic, I actually need to recover a lot of old GCN sources like that since Western Digital ate most of what I had >.<
I'm never using a WD drive again because they always die
my trust is with Seagate, since these drives have lasted me over 14 years:

^ ignore the model number, just pay attention to the chassis
Seagate Barracuda (not slim)

they've been running swap+EXT4 for at most 7 years now, and I haven't had 1 issue with them
meanwhile I have a pile of 12 dead WD-based brands like Maxtor, Hitachi, and even a few from WD themselves

also regarding seagate, stay away from these models: (pay attention to the metal, not the sticker)
slim: (power issues, likes to stall)

rosewood: (WILL die)
 

StarLand

Smash Rookie
Joined
Aug 28, 2015
Messages
5
Location
Germany
I thought I gonna post a post again!

You absolutely have to get a Seagate HDD.
I scrolled trough the conversation here and found out I was working on a Kirby Air Ride Editor some years ago.
Fortunately I have some backups I can continue working with (just need time to understand my old code).

Unfortunately I can't do it this year because I am fed up with school based stuff and an invation for university (lecture hall & schoolarship).
Same goes for my work at Chaos Computer Club.

You're right Tcll that I have been interested into hacking till today, but there was a big phase, where somebody like "StapleButter"
and a lot of other people hated on me. Well, I can't deny that it's not just their fault. It was my fault too, because I acted liked a kid (to be honest
I was 16/17 years old this time; now I am 20 and I am pretty sure how to act now).

I recently built a tool which you can use to import custom wav files into a Sonic Steam game (In C# and C/C++).
Tcll, you really have to get this Seagte, I probably will send you a HDD next year.

I didn't exactly read the whole thread (it was too much) but what I read is that you've been good in UMC.
And I am really sorry that you weren't able to recover your files and that you don't trust WD anymore.

Well, as soon as I am free of exams and moving stress AND as soon as I prepared my new Internet access I will send you some files
via my personal cloud (I can also directly link to your account on my cloud, if you want to.)

Ps. I probably move Server Provider to Host Europe GmbH.

So far I am working on bigger projects, which are hosted on a Folks Highschool (they're working with me), therefore I will be unavailable till next year like I mentioned above.

Project Photo: https://goo.io/rQfbJN


I'll tell you my progress asap!
 
Last edited:
Top Bottom