Skip to content

Provide function of Position -> Place name (in game callout) #390

@JanEricNitschke

Description

@JanEricNitschke

Parse default_vents for classname env_cs_place

====302====
place_name                     TSpawn
classname                      env_cs_place
origin                         -16.000000 -1520.000000 104.000000
angles                         0.000000 0.000000 0.000000
scales                         1.000000 1.000000 1.000000
hammeruniqueid                 2:31046:5
model                          maps\de_anubis\entities\unnamed_2_31046_5.vmdl

Parse the associated (all of them) model files (shape should be the same as the world_physics)

<!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7} -->
{
    m_nFlags = 0
    m_nRefCounter = 0
    m_bonesHash = 
    [
    ]
    m_boneNames = 
    [
    ]
    m_indexNames = 
    [
    ]
    m_indexHash = 
    [
    ]
    m_bindPose = 
    [
    ]
    m_parts = 
    [
        
        {
            m_nFlags = 0
            m_flMass = 0.000000
            m_rnShape = 
            {
                m_spheres = 
                [
                ]
                m_capsules = 
                [
                ]
                m_hulls = 
                [
                    
                    {
                        m_nCollisionAttributeIndex = 0
                        m_nSurfacePropertyIndex = 0
                        m_UserFriendlyName = ""
                        m_bUserFriendlyNameSealed = false
                        m_bUserFriendlyNameLong = false
                        m_nToolMaterialHash = 86479102
                        m_sHitGroupName = "HITGROUP_INVALID"
                        m_Hull = 
                        {
                            m_vCentroid = 
                            [
                                0.000000,
                                0.000000,
                                0.000000,
                            ]
                            m_flMaxAngularRadius = 40.422768
                            m_Bounds = 
                            {
                                m_vMinBounds = 
                                [
                                    -23.000000,
                                    -23.000004,
                                    -24.000000,
                                ]
                                m_vMaxBounds = 
                                [
                                    23.000000,
                                    23.000004,
                                    24.000000,
                                ]
                            }
                            m_vOrthographicAreas = 
                            [
                                1.000000,
                                1.000000,
                                1.000000,
                            ]
                            m_MassProperties = 
                            [
                                37410896.000000,
                                0.000000,
                                0.000000,
                                0.000000,
                                0.000000,
                                37410888.000000,
                                0.000000,
                                0.000000,
                                0.000000,
                                0.000000,
                                35819664.000000,
                                0.000000,
                            ]
                            m_flVolume = 101568.015625
                            m_flSurfaceArea = 13064.000977
                            m_nFlags = 3
                            m_pRegionSVM = 
                            {
                                m_Planes = 
                                #[
                                    00 00 00 00 00 00 80 3F 00 00 00 00 02 00 B8 41 00 00 00 00 00 00 00 00 00 00 80 BF 00 00 C0 41
                                    00 00 00 00 00 00 80 BF 00 00 00 00 02 00 B8 41 00 00 80 3F 00 00 00 00 00 00 00 00 00 00 B8 41
                                    00 00 00 00 00 00 00 00 00 00 80 3F 00 00 C0 41 00 00 80 BF 00 00 00 00 00 00 00 00 00 00 B8 41
                                    00 00 00 00 00 00 00 00 00 00 80 BF 00 00 C0 41 00 00 80 3F 00 00 00 80 00 00 00 00 00 00 B8 C1
                                    00 00 00 00 00 00 00 00 00 00 80 3F 00 00 C0 41 00 00 00 00 00 00 80 BF 00 00 00 00 02 00 B8 C1
                                    00 00 00 00 00 00 00 00 00 00 80 3F 00 00 C0 41 00 00 80 BF 00 00 00 00 00 00 00 00 00 00 B8 C1
                                    00 00 00 00 00 00 00 00 00 00 80 BF 00 00 C0 41 00 00 00 00 00 00 80 BF 00 00 00 00 02 00 B8 C1
                                    00 00 80 BF 00 00 00 00 00 00 00 00 00 00 B8 41 00 00 00 80 00 00 80 BF 00 00 00 80 02 00 B8 C1
                                    00 00 80 3F 00 00 00 00 00 00 00 00 00 00 B8 41 00 00 00 00 00 00 00 00 00 00 80 3F 00 00 C0 C1
                                    00 00 80 3F 00 00 00 00 00 00 00 00 00 00 B8 41 00 00 00 80 00 00 80 3F 00 00 00 00 02 00 B8 C1
                                    00 00 80 BF 00 00 00 00 00 00 00 00 00 00 B8 41 00 00 00 00 00 00 00 00 00 00 80 3F 00 00 C0 C1
                                    00 00 80 3F 00 00 00 00 00 00 00 00 00 00 B8 41 00 00 00 00 00 00 00 00 00 00 80 BF 00 00 C0 C1
                                    00 00 80 BF 00 00 00 00 00 00 00 00 00 00 B8 41 00 00 00 00 00 00 80 3F 00 00 00 80 02 00 B8 C1
                                    00 00 00 00 00 00 80 BF 00 00 00 00 02 00 B8 41 00 00 80 3F 00 00 00 00 00 00 00 00 00 00 B8 C1
                                    00 00 00 00 00 00 80 3F 00 00 00 00 02 00 B8 41 00 00 00 00 00 00 00 80 00 00 80 3F 00 00 C0 C1
                                    00 00 00 00 00 00 00 00 00 00 80 3F 00 00 C0 41 00 00 00 00 00 00 80 3F 00 00 00 00 02 00 B8 C1
                                    00 00 00 00 00 00 00 00 00 00 80 BF 00 00 C0 41 00 00 80 BF 00 00 00 80 00 00 00 80 00 00 B8 C1
                                    00 00 00 00 00 00 80 3F 00 00 00 00 02 00 B8 41 00 00 80 BF 00 00 00 00 00 00 00 00 00 00 B8 C1
                                    00 00 00 00 00 00 80 BF 00 00 00 00 02 00 B8 41 00 00 00 80 00 00 00 00 00 00 80 3F 00 00 C0 C1
                                    00 00 00 00 00 00 80 BF 00 00 00 00 02 00 B8 41 00 00 80 BF 00 00 00 00 00 00 00 00 00 00 B8 C1
                                    00 00 00 00 00 00 80 3F 00 00 00 00 02 00 B8 41 00 00 00 00 00 00 00 00 00 00 80 BF 00 00 C0 C1
                                    00 00 00 00 00 00 80 3F 00 00 00 00 02 00 B8 41 00 00 80 3F 00 00 00 00 00 00 00 00 00 00 B8 C1
                                    00 00 00 00 00 00 80 BF 00 00 00 00 02 00 B8 41 00 00 00 80 00 00 00 80 00 00 80 BF 00 00 C0 C1
                                    00 00 80 3F 00 00 00 00 00 00 00 00 00 00 B8 41 00 00 00 00 00 00 80 BF 00 00 00 00 02 00 B8 C1
                                    00 00 80 BF 00 00 00 00 00 00 00 00 00 00 B8 41 00 00 00 00 00 00 00 00 00 00 80 BF 00 00 C0 C1
                                    00 00 00 00 00 00 00 00 00 00 80 3F 00 00 C0 41 00 00 80 3F 00 00 00 00 00 00 00 80 00 00 B8 C1
                                    00 00 00 00 00 00 00 00 00 00 80 BF 00 00 C0 41 00 00 00 00 00 00 80 3F 00 00 00 00 02 00 B8 C1
                                ]
                                m_Nodes = 
                                #[
                                    00 00 00 80 01 00 06 80 02 00 02 80 03 00 0E 80 04 00 08 80 05 00 12 80 06 00 01 80 05 00 00 20
                                    06 00 10 80 07 00 2E 80 08 00 07 80 09 00 1E 80 0A 00 14 80 0B 00 1B 80 0C 00 04 80 04 03 00 20
                                    04 00 00 40 00 02 00 20 0A 00 30 80 0B 00 0B 80 00 00 00 40 02 08 00 20 0A 00 20 80 0B 00 32 80
                                    0C 00 15 80 0D 00 23 80 0A 00 00 40 0D 00 27 80 0E 00 03 80 01 01 00 20 14 00 00 40 00 00 00 60
                                    02 00 00 40 06 06 00 20 0C 00 00 40 03 09 00 20 08 00 34 80 09 00 17 80 06 00 00 40 01 00 00 60
                                    0E 00 00 40 07 00 2B 80 10 00 00 40 03 00 00 60 06 00 05 80 07 07 00 20 16 00 00 40 02 00 00 60
                                    08 00 00 40 04 00 00 60 12 00 00 40 05 00 00 60 00 00 00 00 
                                ]
                            }
                            m_Vertices = 
                            #[
                                14 12 10 16 0E 04 06 0A 
                            ]
                            m_VertexPositions = 
                            #[
                                00 00 B8 41 02 00 B8 41 00 00 C0 41 00 00 B8 C1 02 00 B8 41 00 00 C0 41 00 00 B8 41 02 00 B8 C1
                                00 00 C0 41 00 00 B8 C1 02 00 B8 C1 00 00 C0 41 00 00 B8 41 02 00 B8 41 00 00 C0 C1 00 00 B8 C1
                                02 00 B8 41 00 00 C0 C1 00 00 B8 41 02 00 B8 C1 00 00 C0 C1 00 00 B8 C1 02 00 B8 C1 00 00 C0 C1
                            ]
                            m_Edges = 
                            #[
                                15 01 05 00 0B 00 01 05 05 03 00 00 11 02 04 03 0E 05 05 01 00 04 04 00 0A 07 06 01 0D 06 07 02
                                16 09 02 02 10 08 03 04 04 0B 07 01 17 0A 05 05 0F 0D 02 03 08 0C 06 02 06 0F 04 01 03 0E 06 03
                                14 11 02 04 0C 10 00 03 09 13 01 04 01 12 03 05 12 15 00 04 02 14 01 00 07 17 03 02 13 16 07 05
                            ]
                            m_Faces = 
                            #[
                                00 04 08 0C 10 0B 
                            ]
                            m_Planes = 
                            #[
                                00 00 00 00 00 00 80 3F 00 00 00 00 02 00 B8 41 00 00 00 00 00 00 00 00 00 00 80 BF 00 00 C0 41
                                00 00 00 00 00 00 80 BF 00 00 00 00 02 00 B8 41 00 00 80 3F 00 00 00 00 00 00 00 00 00 00 B8 41
                                00 00 00 00 00 00 00 00 00 00 80 3F 00 00 C0 41 00 00 80 BF 00 00 00 00 00 00 00 00 00 00 B8 41
                            ]
                        }
                    },
                ]
                m_meshes = 
                [
                ]
                m_CollisionAttributeIndices = 
                [
                ]
            }
            m_nCollisionAttributeIndex = 0
            m_nReserved = 0
            m_flInertiaScale = 1.000000
            m_flLinearDamping = 0.000000
            m_flAngularDamping = 0.000000
            m_bOverrideMassCenter = false
            m_vMassCenterOverride = 
            [
                0.000000,
                0.000000,
                0.000000,
            ]
        },
    ]
    m_constraints2 = 
    [
    ]
    m_joints = 
    [
    ]
    m_pFeModel = null
    m_boneParents = 
    [
    ]
    m_surfacePropertyHashes = 
    [
        1977497166,
    ]
    m_collisionAttributes = 
    [
        
        {
            m_CollisionGroup = 1977497166
            m_InteractAs = 
            [
            ]
            m_InteractWith = 
            [
            ]
            m_InteractExclude = 
            [
            ]
            m_CollisionGroupString = "default"
            m_InteractAsStrings = 
            [
            ]
            m_InteractWithStrings = 
            [
            ]
            m_InteractExcludeStrings = 
            [
            ]
        },
    ]
    m_debugPartNames = 
    [
    ]
    m_embeddedKeyvalues = ""
}

Then we have can build a dataclass

@dataclass
class Place:
    callout: str
    origin: Vector3
    triangles: list[Triangles]

We can probably save a mapping map_name -> list[Place] in a json. Will have to see how big it is.
Then we can define a function

def callout(player_pos: Vector3, places: list[Place]) -> str:
    for place in places:
        collision_checker = VisibilityChecker(triangles=place.triangles)
        if collision_checker.is_visible(player_pos, place.origin):
            return place.callout
    return "Unknown"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions