nancygold's Journal
 
[Most Recent Entries] [Calendar View] [Friends View]

Wednesday, May 15th, 2024

    Time Event
    11:39a
    Can we have a programming discussion without lefties telling you what to repost on your blog?

    Stonetoss indeed constantly trolls that 41% trannies do suicide.

    Most of the girls I know ended their lives after the toxic commies bully them into suicide. We all know Stonetoss is a neo-Nazi, but you expect LGBT community to be accepting.

    Now instead of helping you to medically transition, LGBT will tell you to be bodypositive (they need freaks) and offer you to protest for Palestine. LGBT will also tell you that sole reason niggers are transphobic and kill trans girls is because they are "oppressed," and therefore even bigger part of the LGBT and people like me have to help niggers, despite there being billions of them.

    Anyway, I disagree with Stonetoess on most points (i.e. him being antisemitic and supporting Islam). But I do disagree with most people, because I have a mind of my own.




    Current Mood: contemplative
    Current Music: В защиту негров - Александр Лаэртский
    7:20p
    ECS: Component Modification Outside of It's System
    While it is possible to do
    Component[Id] = Value
    such anonymous unordered modification unfortunately breaks the abstraction and desyncs the modifications from the system. Furthermore, component tables are more efficient without random access.

    Apparently the right thing is sending messages, which have both source (the system sending the message) and destination (the system receiving the message). And the system under the receiving system has to declare in advance what messages it accept. That way the system itself could lookup the messages table for each id. I.e. we may have just a bare list of poisoned entities ids, and then the healer entity sends a "heal" message. to a specific entity, the poison system seeing such message will simply remove the messaged id from processing.

    Now that heal message can be an entity itself, if we want messages to be first class objects. One can implement messages as special components , which get cleared every cycle. In addition, we can have broadcast messages, like say `free` message, signalling that the entity id is now freed. That gives some time for the systems to stop processing it.

    We can also have reactive declarations such as:
    poison:    message(self venom 1)
    heal:      remove(poison)
    freed:     remove(_everything_)
    player_ai: message(each_owned_agent follow_plan_of self)



    Message passing promotes running systems in parallel and potentially on different machines.

    But yeah, maintaining a message buffer can be expensive.

    TLDR: OOP vs ECS is a bit more than the AoS vs SoA dilemma.

    Current Mood: contemplative
    11:23p
    Dungeon Siege Source Code
    Dungeon Siege was the game which popularized the entire composition-over-inheritance concept to the wider audience, thanks to the widely cited 2002 presentation:
    https://www.youtube.com/watch?v=Eb4-0M2a9xE

    there is also a few notes about how it all gets put together
    https://dungeonsiege.fandom.com/wiki/Guide:_Siege_University_-_301:_Introduction_to_Dungeon_Siege_Architecture

    Anyway, back in 2023 the historic source code was leaked, apparently by one of the developers:
    https://rpgwatch.com/forum/threads/dungeon-siege-source-code-leaked-online.54525/

    It has a lot of boilerplate, but the engine code is buried in
    DungeonSiege/projects/tattoo/world/Go*.{h,cpp}


    With the Go.h and GoBase.h being at the root of everything.

    Compared to the Ultima Underworld and Dark Engine, Dungeon Siege's engine doesn't implement a true ECS, where an entity consists solely out of id (primary key).
    Instead Dungeon Siege's objects are instances of your usual class, holding a list of components inside of them. Similar to modern Unity and Dwarf Fortress.
    ComponentColl m_ComponentColl; //collection of owned components, server components first, clients second

    Beside this list, the object has a ton of other garbage making it especially bloated and scary.
    It does have an id (m_Goid), but it is used for your usual OOP nonsense.
    Some objects also have m_Scid, which stands for "static content id", or using modern terminology a prefab or prototype.
    Other objects are produced dynamically and don't have m_Scid.
    For memory management, a reference counting scheme is employed.
    In other words, it is unsuitable for finer objects, like particles, voxels and even larger terrain cells.
    Dungeon Siege is a small step above traditional OOP, and still maintains most of its deficiencies.

    TLDR: painful to read.

    Current Mood: amused
    Current Music: Richard Band - Descent to Undermountain OST

    << Previous Day 2024/05/15
    [Calendar]
    Next Day >>

About LJ.Rossia.org