XC_Engine version 25c for UT v469c (includes FerBotz)

Mar
Novice
Posts: 26
Joined: Tue Aug 27, 2013 1:04 am

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by Mar »

Is it possible to create a lite version of XC_Engine just with the native function "ReplaceFunction"? It would better if 469e would include it.
ReplaceFunction is a game changer for MH fixes.
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by Higor »

Techincally it can be done as a simple native addon... the problem is that some functions need to be replaced before the level spins up for play (that means prior to InitGame too!).
XC_Engine needs to dig deeper into the level loader in order to achieve that.

Right now I'm kind of blocked in the ARM64 build, both of my compilers (gcc-10) and (clang-13) produce code that is incompatible with the UT v469d release :nonono: and I'm working with anth to figure out why, Aarch64 documentation doesn't even hint at what's going on (disassembled code shows GCC doing insane things on my end).

I could abandon ARM64 for v469d and skip to working with the Linux x86-64 builds next (it has it's own set of issues)... I'll give it one more week of tries before I do that though.
Code audit going a little slow, there's tons of garbage code and I'll likely release the XC_Engine v26 before I get to cleanup the whole thing, which means no public source code, but I hope to make it for v469e.
User avatar
Shrimp
Adept
Posts: 301
Joined: Wed Oct 10, 2018 11:15 am
Location: Australia

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by Shrimp »

Mar wrote: Sat Jan 20, 2024 7:50 am Is it possible to create a lite version of XC_Engine just with the native function "ReplaceFunction"? It would better if 469e would include it.
ReplaceFunction is a game changer for MH fixes.
Would you consider contributing such fixes to MH itself via Pull Requests, thereby negating the need for monkey patching, and improving it for everyone?

https://github.com/shrimpza/monsterhunt
ShrimpWorks
Unreal Archive - preserving over 25 years of user-created content for the Unreal series!
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by Higor »

Shrimp wrote: Sun Jan 21, 2024 3:46 am
Mar wrote: Sat Jan 20, 2024 7:50 am Is it possible to create a lite version of XC_Engine just with the native function "ReplaceFunction"? It would better if 469e would include it.
ReplaceFunction is a game changer for MH fixes.
Would you consider contributing such fixes to MH itself via Pull Requests, thereby negating the need for monkey patching, and improving it for everyone?

https://github.com/shrimpza/monsterhunt
Ohh, you just reminded me of one old experimente of mine: https://github.com/CacoFFF/MonsterHunt-Rebuild
A rebuild from scratch with network compatibility, maybe some things from this can be applied on the real MH   
Auto merged new post submitted 4 minutes later
The old Linux v436+ XC_Engine this MH server may still be alive somewhere (or packaged), it stopped working with v469 clients at one point but if I update it I may be able to recover it and do a demo of the cool features that exist in the extension packages.
Old UT Veteran
Skilled
Posts: 169
Joined: Sat Mar 24, 2012 1:37 am

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by Old UT Veteran »

Higor wrote: Sun Jan 21, 2024 4:17 am Ohh, you just reminded me of one old experimente of mine: https://github.com/CacoFFF/MonsterHunt-Rebuild
A rebuild from scratch with network compatibility, maybe some things from this can be applied on the real MH
It did have a bunch of other QoL improvements as well: hud, AI, etc. Event logger was definitely nice.
screenshot1.PNG
You do not have the required permissions to view the files attached to this post.
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by Higor »

@sektor2111 do you have a working v469d installation running on Windows XP?
I intend to send some builds out to test compatibility with that OS, expect more than one since I changed the entire build system.
User avatar
sektor2111
Godlike
Posts: 6438
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by sektor2111 »

Higor wrote: Tue Jan 23, 2024 12:58 am do you have a working v469d installation running on Windows XP?
Yes, I do... As I told already about a map-scaling - flawless addition... Full Respect for that feature... I would like to see more options but...

With regard to 469d, I don't understand why
- "bad spots" are not named in logs;
- funky errors from brushes are not named which ones are evil;
- still cannot touch ReachSpecs ? WTF is that hard to implement this natively as I did in prior UT+XC versions :mad2: ? It could even be a smart GUI interface - a CleanUp in C++ would work in less than an eye blink - in my 440 + XC 24 I can do some tasks where simply 469d has no business;
- "Level Validate Map" doesn't "validate" anything - except MapGarbage - code "adapted" in UScript (clumsy trans-coding...);
- "PlayerCanSeeMe()" it's a crash-free solution... but the same nonsense as in v400 -> 469c - you have positive result behind you (somebody there in 1999 had an eye in his a$$...), and year 2023 did not solve this "biological" flaw... This is one of reasons for which I did not updated my private UT server because I don't have any XC related fixes and options for said 469d.
More speech concerning some checks are off-topic at this point... however XC solutions makes some supposed "hard-core" map to run flawless due to faster iterators and methods used in XC_MonsterHunt based on "ReplaceFunction" add-on from the same XC_Engine.
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by Higor »

Mar wrote: Wed Aug 30, 2023 5:55 pm Currently I have the following error when CollisionGrid is activated on XC_Engine on some maps.

Code: Select all

NSC: [ EVENT ] you has started the game.
NSC: [ EVENT ] The game has started.
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Repeats until server crash or someone changes map. When sever travel occurs sometimes it crash also.
You can test this with map MH-(_@_)_MJD_lite_v1
Just start the map and wait some seconds.
Server gets 100% of CPU when this happens. Map become laggy with ping up to 600ms+

My setup is 469c with XC_Engine 25c on Ubuntu 22.04 (Docker Container), also tested on a local Windows server and also happens.
Any idea?
Found the bug with this, it starts happening when you get more than 1500 collidables in a level.
Took a couple hours of logging everything and going thru 30mb logs :loool:
Mar
Novice
Posts: 26
Joined: Tue Aug 27, 2013 1:04 am

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by Mar »

Higor wrote: Fri Feb 02, 2024 9:12 pm
Mar wrote: Wed Aug 30, 2023 5:55 pm Currently I have the following error when CollisionGrid is activated on XC_Engine on some maps.

Code: Select all

NSC: [ EVENT ] you has started the game.
NSC: [ EVENT ] The game has started.
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] Allocating extra element holder for ActorInfo
Log: [CG] Allocated element holder for ActorInfo with 1500 entries
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Log: [CG] ActorInfo::IsValid -> Using invalid object
Repeats until server crash or someone changes map. When sever travel occurs sometimes it crash also.
You can test this with map MH-(_@_)_MJD_lite_v1
Just start the map and wait some seconds.
Server gets 100% of CPU when this happens. Map become laggy with ping up to 600ms+

My setup is 469c with XC_Engine 25c on Ubuntu 22.04 (Docker Container), also tested on a local Windows server and also happens.
Any idea?
Found the bug with this, it starts happening when you get more than 1500 collidables in a level.
Took a couple hours of logging everything and going thru 30mb logs :loool:
If you want help testing, let us know. We can test on our MH server.
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by Higor »

Great! I'm still refining some issues Sektor2111 is finding in the Windows build, once that is done I'll jump onto Linux.
I intend to build XC_Engine for both 32 and 64 bit targets, but I'll likely prioritize 64 bits.
User avatar
sektor2111
Godlike
Posts: 6438
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by sektor2111 »

Recent behavior of this version is not bad, clearly things are improved, of course some things in 469d are not working exactly as expected - like they did in old versions prior to 469 types...
On the other hand... I did an experiment with some "Deck bots8" map for "Paths Rebuilder" from this v26. Then I checked ReachSpecs...
XC_PathsWorker has checked and solved these:

Code: Select all

LostData: ________________________________________________________________
LostData: ReachSpecs missing from PrunedPaths[0-15] 	= 4356.
FixedWithSuccess: ReachSpecs successfully attached 	= 4356.
FixFailures: ReachSpecs attaching failures - probably no place = 0.
LostData: ________________________________________________________________
SpecTest: Testing and fixing specs took: 
	0.616735 seconds.
In such stage clearly sektor will work a little bit... nulling 4356 spam data and then... deleting it.
Technique used in poorly UScript language is actually simple.
Each normal ReachSpec is copy-hosted in a dummy ReachSpec actor - a sort of "Array". Then deleting ALL ReachSpecs - cleaning Nodes from debris fake data, then adding ReachSpecs from dummy array back in corresponding nodes - clearly only valid ReachSpecs and only usable data, and similar classes will spawn concerning InventorySpots and Warps - including a custom class of these but without initial properties (those new properties of these custom classes) I cannot capture properties for unknown new actors for keeping them in next copies. At end of transferring data, dummy ReachSpecs are deleted, nodes are reordered and Navigation Chain is reconstructed. This task takes less that 2 seconds on my rigs - I can only imagine the speed of such C++ code in powerful machines - under an eye blink. In C++ are not needed actors because there is wider access at objects and such a copy Array it's doable with more capabilities and options.

Edit: The other note.
Finally I managed to trigger Command "Level Validate" as Buggie did but... It's probably more useless than useful compared to my checks.
It does the report for "PlayerStart" bad placed but... not explaining WHICH ONE. For the rest is printed some stupidity about whatever scripts from certain builder that actually doesn't have any problem. If I'm removing that builder, another one is being reported - to me it seems a nonsense.

Code: Select all

			// Check scripts.
			if( GEditor && !GEditor->CheckScripts( GWarn, UObject::StaticClass(), *Results ) )
			{
				Results->Logf( TEXT("\r\nError: Scripts need to be rebuilt!\r\n") );
				return 1;
			}
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by Higor »

For maps where you're likely to find a lot of items clumped up together we could use a script/brush builder to manually place something like MultiInventorySpot where multiple items point to the same marker. And in the build process we could 'generate' the class from a template and automatically place it in MyLevel if it already doesn't exist.
User avatar
sektor2111
Godlike
Posts: 6438
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by sektor2111 »

I have something dynamic... already playing such map, indeed it's pretty...
DynInventorySpot

Code: Select all

class DynInventorySpot expands InventorySpot;

/*
Dynamic InventorySpot is a class that needs a manual placement in map.
It has internal items Configurable which are added in run-time randomly.
Items spawns with MyMarker integrated as being this Navigation Actor.
Strategy it's aiming dynamic items in maps not plain hard-coded weaponry.
In case that item is a weapon, several specific ammo is also added nearby.
At mapping paths this is taken in account. If you are rebuilding, removing paths
this will get lost because it's an InventorySpot after all.
*/

var() class<Inventory> MyInventory[9];
var int NumItems;
var() float KeepTime;

event PreBeginPlay()
{
	InitialState = 'DeployRandom';
	AcquireConfiguration();
	CreateMarkedItem();
}

function AcquireConfiguration()
{
	local Inventory Inv;
	local int I;

	for (i = 0; i < 9; i++)
	{
		if ( MyInventory[i] != None )
			NumItems++;
	}
	log(Self.Name@"has found"@NumItems@"defined.",'DynInventorySpot');
	if ( NumItems == 0 )
	{
		log (Self.Name@"will cause appearance of random stock items from BotPack.",'DynInventorySpot');
		MyInventory[0] = class 'Enforcer';
		MyInventory[1] = class 'ut_biorifle';
		MyInventory[2] = class 'ShockRifle';
		MyInventory[3] = class 'PulseGun';
		MyInventory[4] = class 'ripper';
		MyInventory[5] = class 'Minigun2';
		MyInventory[6] = class 'UT_FlakCannon';
		MyInventory[7] = class 'UT_Eightball';
		MyInventory[8] = class 'SniperRifle';
	}
}

function CreateMarkedItem()
{
	local int NumInv, RandItem;
	local Inventory Ispw;
	local class<Ammo> A;
	local Ammo Am;

	if ( NumItems > 0 )
		NumInv = NumItems;
	else
		NumInv = 9;

	RandItem = Rand(NumInv);
	Ispw = Spawn( MyInventory[RandItem],,'DynItem',Location+vect(0,0,-10));
	if ( Ispw != None )
	{
		Ispw.MyMarker = Self;
		MarkedItem = Ispw;
		if (Ispw.Physics == PHYS_Falling)
		{
			Ispw.SetPhysics(PHYS_None);
			Ispw.Enable('Touch');
		}
		if (Ispw.IsA('Weapon') && Weapon(Ispw).AmmoName != None )
		{
			A = class<Ammo>(dynamicloadobject(string(Weapon(Ispw).AmmoName),class'class'));
//			log (Self.Name@"will use"@Ispw.Name@" as MarkedItem.",'DynInventorySpot');
			if ( FRand() > 0.5 )
			{
				Am = Spawn(A,,'DynItem',Location+vect(50,0,-10));
				if( Am != None )
				{
					if ( Am.Physics == PHYS_Falling )
					{
						Am.SetPhysics(PHYS_None);
						Am.Enable('Touch');
					}
					Am = None;
				}
				Am = Spawn(A,,'DynItem',Location+vect(-50,0,-10));
				if( Am != None )
				{
					if ( Am.Physics == PHYS_Falling )
					{
						Am.SetPhysics(PHYS_None);
						Am.Enable('Touch');
					}
					Am = None;
				}
			}
			else
			{
				Am = Spawn(Weapon(Ispw).AmmoName,,'DynItem',Location+vect(0,50,-10));
				if( Am != None )
				{
					if ( Am.Physics == PHYS_Falling )
					{
						Am.SetPhysics(PHYS_None);
						Am.Enable('Touch');
					}
					Am = None;
				}
				Am = Spawn(Weapon(Ispw).AmmoName,,'DynItem',Location+vect(0,-50,-10));
				if( Am != None )
				{
					if ( Am.Physics == PHYS_Falling )
					{
						Am.SetPhysics(PHYS_None);
						Am.Enable('Touch');
					}
					Am = None;
				}
			}
		}
		PlaySound(Sound'RespawnSound2',,2.5);
	}
	else
	{
		log (Self.Name@":: Bork :: couldn't add configured item - perhaps it was quickly removed/replaced or the spawn place is bugged.");
	}
}

function DoRemovals()
{
	local Inventory I;

	foreach RadiusActors(class'Inventory',I,60,Location)
	{
		if ( I.Tag == 'DynItem' && I.Owner == None )
			I.Destroy();
	}
}

state() DeployRandom
{
Begin:
	Sleep(1.0);
Loop:
	Sleep(KeepTime+RandRange(0.5,1.5));
	DoRemovals();
	Sleep(0.3);
	MarkedItem = None;
	if ( Level.Game != None )
		if ( (Level.Game).bGameEnded )
			GoTo('End');
	CreateMarkedItem();
	GoTo('Loop');
End:
	GoToState('');
	Stop;
}

defaultproperties
{
	bStatic=False
	bNoDelete=True
	bHiddenEd=False
	Style=STY_Translucent
	Texture=Texture'S_Inventory'
	DrawScale=0.7
}
On the other hand, by example MapGarbage can generate some script for actors from MyLevel, another builder (a private one) is generating pathing scripts for plugins concerning NavAdder delegated to map paths in run-time, no more Scout is needed in run-time.
For me is easy do release a script doing 1492 ReachSpecs in run-time because actually... I'm not writing that code, code is generated, the same as for tweaking actors, deploying run-time decorations, non static "BlockAlls", etc... If a code without syntax errors was generated, clearly all further codes are normal as well.
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by Higor »

Well, breakthrough! I got XC_Engine working on the Raspberry PI4 game client.
All I need to do is get lzma built on ARM64 and AMD64 platforms, thinking with deprecating 32 bit linux completely though, I don't see any reason to prefer running the 32 bit client/server on any semi-modern system.   
Auto merged new post submitted 11 minutes later
Anyone with a working UT installation or server in a RPI4/5 willing to test XC_Engine?
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine version 25c for UT v469c (includes FerBotz)

Post by Higor »