Super Mario 64 Source
A Super Mario 64 decompilation, brought to you by a bunch of clever folks.
Data Structures | Enumerations | Functions | Variables
draw_objects.c File Reference

This file contains the functions and helpers for rendering the various GdObj primitives to the screen. More...

#include <ultra64.h>
#include <macros.h>
#include <config.h>
#include "gd_types.h"
#include "gd_macros.h"
#include "gd_main.h"
#include "objects.h"
#include "dynlist_proc.h"
#include "old_menu.h"
#include "debug_utils.h"
#include "gd_math.h"
#include "shape_helper.h"
#include "renderer.h"
#include "prevent_bss_reordering.h"
#include "draw_objects.h"

Data Structures

struct  BetaVtx
 A possible remnant of an early ObjVertex structure that contained texture S,T coordinates. More...
 

Enumerations

enum  SceneType { RENDER_SCENE = 26, FIND_PICKS = 27 }
 Modes for drawscene() More...
 

Functions

void func_80179B64 (struct ObjGroup *group)
 Forms uncalled recursive loop with Unknown80179ACC() More...
 
void update_shaders (struct ObjShape *, struct GdVec3f *)
 
void draw_shape_faces (struct ObjShape *shape)
 Render the faceGroup of an ObjShape. More...
 
void register_light (struct ObjLight *light)
 Count input ObjLight as an active light, if it wasn't already counted. More...
 
void setup_lights (void)
 Set the ambient light color and turn on G_CULL_BACK. More...
 
void Unknown801781DC (struct ObjZone *zone)
 
void draw_shape (struct ObjShape *shape, s32 flag, f32 c, f32 d, f32 e, f32 f, f32 g, f32 h, f32 i, f32 j, f32 k, f32 l, f32 m, f32 n, s32 colorIdx, Mat4f *rotMtx)
 
void draw_shape_2d (struct ObjShape *shape, s32 flag, UNUSED f32 c, UNUSED f32 d, UNUSED f32 e, f32 f, f32 g, f32 h, UNUSED f32 i, UNUSED f32 j, UNUSED f32 k, UNUSED f32 l, UNUSED f32 m, UNUSED f32 n, UNUSED s32 color, UNUSED s32 p)
 
void draw_light (struct ObjLight *light)
 
void draw_material (struct ObjMaterial *mtl)
 
void create_mtl_gddl_if_empty (struct ObjMaterial *mtl)
 Create a GdDisplayList and store its number in the input ObjMaterial if this material doesn't have one. More...
 
void check_face_bad_vtx (struct ObjFace *face)
 A function for checking if an ObjFace has bad vertices. More...
 
struct GdColourgd_get_colour (s32 idx)
 Convert a numeric index into pointer to a struct GdColour. More...
 
void Unknown80178ECC (f32 v0X, f32 v0Y, f32 v0Z, f32 v1X, f32 v1Y, f32 v1Z)
 Uncalled function that would render a triangle. More...
 
void draw_face (struct ObjFace *face)
 Rendering function for ObjFace structures. More...
 
void draw_rect_fill (s32 color, f32 ulx, f32 uly, f32 lrx, f32 lry)
 Render a filled rectangle from (ulx, uly) to (lrx, lry). More...
 
void draw_rect_stroke (s32 color, f32 ulx, f32 uly, f32 lrx, f32 lry)
 Render a stroked rectangle (aka border box) from (ulx, uly) to (lrx, lry). More...
 
void Unknown801792F0 (struct GdObj *obj)
 Uncalled function that calls other orphan stub functions. More...
 
void draw_label (struct ObjLabel *label)
 
void draw_net (struct ObjNet *self)
 
void draw_gadget (struct ObjGadget *gdgt)
 
void draw_camera (struct ObjCamera *cam)
 
void Unknown80179ACC (struct GdObj *obj)
 Forms uncalled recursive loop with func_80179B64(). More...
 
void func_80179B9C (struct GdVec3f *pos, struct ObjCamera *cam, struct ObjView *view)
 
void check_grabable_click (struct GdObj *input)
 Check if the current cursor position is near enough to input to grab that GdObj. More...
 
void drawscene (enum SceneType process, struct ObjGroup *interactables, struct ObjGroup *lightgrp)
 The main function for rendering the components of an ObjView. More...
 
void nop_obj_draw (UNUSED struct GdObj *nop)
 A drawing function that does nothing. More...
 
void draw_particle (struct GdObj *obj)
 Rendering function for ObjParticle. More...
 
void draw_bone (struct GdObj *obj)
 Rendering fucntion for ObjBone. More...
 
void draw_joint (struct GdObj *obj)
 Rendering function for ObjJoint. More...
 
void draw_group (struct ObjGroup *grp)
 Call apply_obj_draw_fn() to all GdObj in input ObjGroup More...
 
void draw_plane (struct GdObj *obj)
 Rendering function for ObjPlane. More...
 
void apply_obj_draw_fn (struct GdObj *obj)
 Apply GdObj.objDrawFn to the input GdObj if that object is draw-able. More...
 
void Proc8017A980 (struct ObjLight *light)
 
void create_shape_mtl_gddls (struct ObjShape *shape)
 Create GdDisplayLists for any ObjMaterials in shape that don't already have a GdDL. More...
 
void unref_8017AEDC (struct ObjGroup *grp)
 Uncalled function that calls a stubbed function (func_8017BED0()) for all GdObjs in grp. More...
 
s32 create_shape_gddl (struct ObjShape *s)
 Start a new GdDisplayList struct and store its reference index in the input ObjShape. More...
 
void create_gddl_for_shapes (struct ObjGroup *grp)
 Create GdDisplayList structs for all ObjShapes in grp by calling create_shape_gddl(). More...
 
void map_face_materials (struct ObjGroup *faces, struct ObjGroup *mtls)
 Map material id's to ObjMaterial pointers for an ObjGroup of ObjFace structs. More...
 
void calc_vtx_normal (struct ObjVertex *vtx, struct ObjGroup *facegrp)
 Calculate the normal for vtx based on ObjFaces in facegrp. More...
 
void find_thisface_verts (struct ObjFace *face, struct ObjGroup *verts)
 Convert vertex indices in an ObjFace into pointers. More...
 
void map_vertices (struct ObjGroup *facegrp, struct ObjGroup *vtxgrp)
 Convert vertex ID numbers for an ObjGroup of ObjFaces into pointers to ObjVertex structures. More...
 
void unpick_obj (struct GdObj *obj)
 Unselect a grabbable objects. More...
 
void find_closest_pickable_obj (struct GdObj *input)
 Find the closest object to the cursor on an A-button press. More...
 
void set_view_update_camera (struct ObjCamera *cam)
 Set the global view camera if not already set. More...
 
void update_view (struct ObjView *view)
 The main per-frame function for handling a view. More...
 
void unref_8017BC94 (void)
 Stub function. More...
 

Variables

static struct GdColour sClrWhite = { 1.0, 1.0, 1.0 }
 
static struct GdColour sClrRed = { 1.0, 0.0, 0.0 }
 
static struct GdColour sClrGreen = { 0.0, 1.0, 0.0 }
 
static struct GdColour sClrBlue = { 0.0, 0.0, 1.0 }
 
static struct GdColour sClrErrDarkBlue = { 0.0, 0.0, 6.0 }
 
static struct GdColour sClrPink = { 1.0, 0.0, 1.0 }
 
static struct GdColour sClrBlack = { 0.0, 0.0, 0.0 }
 
static struct GdColour sClrGrey = { 0.6, 0.6, 0.6 }
 
static struct GdColour sClrDarkGrey = { 0.4, 0.4, 0.4 }
 
static struct GdColour sClrYellow = { 1.0, 1.0, 0.0 }
 
static struct GdColour sLightColours [1] = { { 1.0, 1.0, 0.0 } }
 
static struct GdColoursSelectedColour = &sClrRed
 
struct ObjCameragViewUpdateCamera = NULL
 
static voidsUnref801A80FC = NULL
 
static s32 sUnreadShapeFlag = 0
 
struct GdColoursColourPalette [5]
 
struct GdColoursWhiteBlack [2]
 
static Mat4f sUnref801A8120
 
static Mat4f sUnrefIden801A8160
 
static s32 sLightDlCounter = 1
 
static s32 sUnref801A81A4 [4] = { 0 }
 
u8 gUnref_801B9B30 [0x88]
 
struct ObjGroupgGdLightGroup
 
static u8 sUnref_801B9BBC [0x40]
 
static enum SceneType sSceneProcessType
 
static s32 sUseSelectedColor
 
static s16 sPickBuffer [100]
 buffer of objects near click More...
 
static s32 sPickDataTemp
 now, only data is the object number of a selected joint More...
 
static f32 sPickObjDistance
 distance between object position and cursor click location More...
 
static struct GdObjsPickedObject
 object selected with cursor More...
 
struct {
   u32   pad00
 
   struct ObjView *   view
 
   s32   unreadCounter
 
   s32   mtlDlNum
 
   s32   shapesDrawn
 
   s32   unused18
 
sUpdateViewState
 Various counters and pointers set in update_view() and used in various draw_XXX functions. More...
 
static struct ObjLightsPhongLight
 
static struct GdVec3f sPhongLightPosition
 
static struct GdVec3f sLightPositionOffset
 
static struct GdVec3f sLightPositionCache [8]
 
static s32 sNumActiveLights
 
static struct GdVec3f sGrabCords
 x, y grabbable point near cursor More...
 

Detailed Description

This file contains the functions and helpers for rendering the various GdObj primitives to the screen.

Enumeration Type Documentation

◆ SceneType

enum SceneType

Modes for drawscene()

Enumerator
RENDER_SCENE 

render the primitives to screen

FIND_PICKS 

only check position of primitives relative to cursor click

Function Documentation

◆ apply_obj_draw_fn()

void apply_obj_draw_fn ( struct GdObj obj)

Apply GdObj.objDrawFn to the input GdObj if that object is draw-able.

Parameters
objGdObj to draw
Returns
void

◆ calc_vtx_normal()

void calc_vtx_normal ( struct ObjVertex vtx,
struct ObjGroup facegrp 
)

Calculate the normal for vtx based on ObjFaces in facegrp.

Calculate the normal for the input ObjVetex vtx based on the ObjFace structures in facegrp of which that vertex is a part.

Parameters
vtxObjVertex to update normal
facegrpObjGroup of ObjFace structures that use vtx
Returns
void

◆ check_face_bad_vtx()

void check_face_bad_vtx ( struct ObjFace face)

A function for checking if an ObjFace has bad vertices.

These could be either unconverted vertex data, or old vertex structures (like BetaVtx)

Note
Not called

◆ check_grabable_click()

void check_grabable_click ( struct GdObj input)

Check if the current cursor position is near enough to input to grab that GdObj.

The range is +/- 20 units for being close to a grab point.

If the object can be grabbed, its information is stored in a buffer by store_in_pickbuf().

Parameters
inputGdObj to check position of
Returns
void

◆ create_gddl_for_shapes()

void create_gddl_for_shapes ( struct ObjGroup grp)

Create GdDisplayList structs for all ObjShapes in grp by calling create_shape_gddl().

Parameters
grpObjGroup containing ObjShape to create GdDLs for
Returns
void
Note
Contains string literals that suggest a removed printf call

◆ create_mtl_gddl_if_empty()

void create_mtl_gddl_if_empty ( struct ObjMaterial mtl)

Create a GdDisplayList and store its number in the input ObjMaterial if this material doesn't have one.

◆ create_shape_gddl()

s32 create_shape_gddl ( struct ObjShape s)

Start a new GdDisplayList struct and store its reference index in the input ObjShape.

Parameters
sObjShape to create GdDL for
Returns
Either -1 if the DL couldn't be created, or the created DL's reference index
Bug:
Nothing is returned if the DL is created
Note
Contains string literals that suggest a removed printf call

◆ create_shape_mtl_gddls()

void create_shape_mtl_gddls ( struct ObjShape shape)

Create GdDisplayLists for any ObjMaterials in shape that don't already have a GdDL.

Doesn't do anything if shape's mtlGroup is NULL

Parameters
shapeInput ObjShape to create material GdDLs for
Returns
void

◆ draw_bone()

void draw_bone ( struct GdObj obj)

Rendering fucntion for ObjBone.

Note
This function returns before doing any work. It seems that Goddard moved away from using bones in the final code

◆ draw_camera()

void draw_camera ( struct ObjCamera cam)

◆ draw_face()

void draw_face ( struct ObjFace face)

Rendering function for ObjFace structures.

It has a fair amount of stub code

Bug:
This function seems to have some parts based on older versions of ObjVertex as the struct requests fields passed the end of an ObjVertex. The bad code is statically unreachable, so...

◆ draw_gadget()

void draw_gadget ( struct ObjGadget gdgt)

◆ draw_group()

void draw_group ( struct ObjGroup grp)

Call apply_obj_draw_fn() to all GdObj in input ObjGroup

Parameters
grpObjGroup of objects to draw
Returns
void

◆ draw_joint()

void draw_joint ( struct GdObj obj)

Rendering function for ObjJoint.

◆ draw_label()

void draw_label ( struct ObjLabel label)

◆ draw_light()

void draw_light ( struct ObjLight light)

◆ draw_material()

void draw_material ( struct ObjMaterial mtl)

◆ draw_net()

void draw_net ( struct ObjNet self)

◆ draw_particle()

void draw_particle ( struct GdObj obj)

Rendering function for ObjParticle.

◆ draw_plane()

void draw_plane ( struct GdObj obj)

Rendering function for ObjPlane.

◆ draw_rect_fill()

void draw_rect_fill ( s32  color,
f32  ulx,
f32  uly,
f32  lrx,
f32  lry 
)

Render a filled rectangle from (ulx, uly) to (lrx, lry).

Parameters
colorGdColour index
ulx,ulyupper left point
lrx,lrylower right point

◆ draw_rect_stroke()

void draw_rect_stroke ( s32  color,
f32  ulx,
f32  uly,
f32  lrx,
f32  lry 
)

Render a stroked rectangle (aka border box) from (ulx, uly) to (lrx, lry).

Parameters
colorGdColour index
ulx,ulyupper left point
lrx,lrylower right point

◆ draw_shape()

void draw_shape ( struct ObjShape shape,
s32  flag,
f32  c,
f32  d,
f32  e,
f32  f,
f32  g,
f32  h,
f32  i,
f32  j,
f32  k,
f32  l,
f32  m,
f32  n,
s32  colorIdx,
Mat4f rotMtx 
)

◆ draw_shape_2d()

void draw_shape_2d ( struct ObjShape shape,
s32  flag,
UNUSED f32  c,
UNUSED f32  d,
UNUSED f32  e,
f32  f,
f32  g,
f32  h,
UNUSED f32  i,
UNUSED f32  j,
UNUSED f32  k,
UNUSED f32  l,
UNUSED f32  m,
UNUSED f32  n,
UNUSED s32  color,
UNUSED s32  p 
)

◆ draw_shape_faces()

void draw_shape_faces ( struct ObjShape shape)

Render the faceGroup of an ObjShape.

This is called from draw_shape() and draw_shape_2d(), or when creating the shape GdDisplayList when calling create_shape_gddl()

◆ drawscene()

void drawscene ( enum SceneType  process,
struct ObjGroup interactables,
struct ObjGroup lightgrp 
)

The main function for rendering the components of an ObjView.

It called both for drawing the various GdObj primatives as well as when checking the location of a cursor click.

Note
This has to be called from update_view() due to that function setting state variables on which this function relies
Parameters
processdetermines if this is rendering the scene or just checking click location
interactablescomponents of ObjView
lightgrplights of `ObjView

◆ find_closest_pickable_obj()

void find_closest_pickable_obj ( struct GdObj input)

Find the closest object to the cursor on an A-button press.

This function is applied to all objects in an ObjView.components group to find the object closest to the cursor when there's an A press

Parameters
inputGdObj to check
Returns
void

◆ find_thisface_verts()

void find_thisface_verts ( struct ObjFace face,
struct ObjGroup verts 
)

Convert vertex indices in an ObjFace into pointers.

Using the group of ObjVertex or ObjParticle structures in verts, convert indices in face into pointers. The indices are offests into the list contained in verts group

Parameters
faceObjFace to find vertices for
vertsObjGroup to index in for ObjVertex or ObjPaticle structures
Returns
void

◆ func_80179B64()

void func_80179B64 ( struct ObjGroup group)

Forms uncalled recursive loop with Unknown80179ACC()

Note
Not called

◆ func_80179B9C()

void func_80179B9C ( struct GdVec3f pos,
struct ObjCamera cam,
struct ObjView view 
)

◆ gd_get_colour()

struct GdColour* gd_get_colour ( s32  idx)

Convert a numeric index into pointer to a struct GdColour.

A simple switch case to convert from index idx to a pointer to the three f32 GdColour structure. Goddard stored the index in a structure, and uses this function to get the colour RGB values if needed. -1 uses the environment colour. A possible enhancement for this is to ennumerate all colours, and then use those enumerations and/or enum type where ever a colour is requested

Parameters
idxIndex of colour
Returns
Pointer to a GdColour struct

◆ map_face_materials()

void map_face_materials ( struct ObjGroup faces,
struct ObjGroup mtls 
)

Map material id's to ObjMaterial pointers for an ObjGroup of ObjFace structs.

This is the final function used in dynlist processing (see chk_shapegen())

Parameters
[in,out]facesObjGroup of ObjFace structs to map over
[in]mtlsObjGroup of ObjMaterial structs to map ids to pointers
Returns
void

◆ map_vertices()

void map_vertices ( struct ObjGroup facegrp,
struct ObjGroup vtxgrp 
)

Convert vertex ID numbers for an ObjGroup of ObjFaces into pointers to ObjVertex structures.

This function takes an ObjGroup of ObjFace structures whose vertices field has indices and not pointers. These indices are transformed into pointers of ObjVertex or ObjParticle structures from the vtxgrp ObjGroup.

Parameters
facegrpObjGroup of ObjFaces to map vertex indices to pointers
vtxgrpObjGroup of ObjVertices/ObjParticles to be mapped against
Returns
void
Note
It seems that this function was replaced by chk_shapegen(), which performs a very similar task...

◆ nop_obj_draw()

void nop_obj_draw ( UNUSED struct GdObj nop)

A drawing function that does nothing.

This function is used for GdObjs that don't need to be rendered

◆ Proc8017A980()

void Proc8017A980 ( struct ObjLight light)

◆ register_light()

void register_light ( struct ObjLight light)

Count input ObjLight as an active light, if it wasn't already counted.

◆ set_view_update_camera()

void set_view_update_camera ( struct ObjCamera cam)

Set the global view camera if not already set.

This function is used to find the first ObjCamera when running update_view().

Parameters
camObjCamera to set to the update camera, if possible
Returns
void

◆ setup_lights()

void setup_lights ( void  )

Set the ambient light color and turn on G_CULL_BACK.

◆ Unknown801781DC()

void Unknown801781DC ( struct ObjZone zone)
Note
Not called

◆ Unknown80178ECC()

void Unknown80178ECC ( f32  v0X,
f32  v0Y,
f32  v0Z,
f32  v1X,
f32  v1Y,
f32  v1Z 
)

Uncalled function that would render a triangle.

Note
Not called

◆ Unknown801792F0()

void Unknown801792F0 ( struct GdObj obj)

Uncalled function that calls other orphan stub functions.

Note
Not called

◆ Unknown80179ACC()

void Unknown80179ACC ( struct GdObj obj)

Forms uncalled recursive loop with func_80179B64().

This function seems to turn off the otherwise unused OBJ_DRAW_UNK01 flag for the GdObj.drawFlags

Note
Not called

◆ unpick_obj()

void unpick_obj ( struct GdObj obj)

Unselect a grabbable objects.

Parameters
objGdObj to unselect
Returns
void
Note
Not Called

◆ unref_8017AEDC()

void unref_8017AEDC ( struct ObjGroup grp)

Uncalled function that calls a stubbed function (func_8017BED0()) for all GdObjs in grp.

Parameters
grpUnknown group of objects
Returns
void
Note
Not called

◆ unref_8017BC94()

void unref_8017BC94 ( void  )

Stub function.

Note
Not Called

◆ update_shaders()

void update_shaders ( struct ObjShape shape,
struct GdVec3f offset 
)

◆ update_view()

void update_view ( struct ObjView view)

The main per-frame function for handling a view.

This function handles updating and rendering a given ObjView structure. It also handles the A button input for grabbing an area of an ObjShape that is contained in the ObjView.components group

Parameters
viewThe ObjView to update
Returns
void

Variable Documentation

◆ gGdLightGroup

struct ObjGroup* gGdLightGroup

◆ gUnref_801B9B30

u8 gUnref_801B9B30[0x88]

◆ gViewUpdateCamera

struct ObjCamera* gViewUpdateCamera = NULL

◆ mtlDlNum

s32 mtlDlNum

◆ pad00

u32 pad00

◆ sClrBlack

struct GdColour sClrBlack = { 0.0, 0.0, 0.0 }
static

◆ sClrBlue

struct GdColour sClrBlue = { 0.0, 0.0, 1.0 }
static

◆ sClrDarkGrey

struct GdColour sClrDarkGrey = { 0.4, 0.4, 0.4 }
static

◆ sClrErrDarkBlue

struct GdColour sClrErrDarkBlue = { 0.0, 0.0, 6.0 }
static

◆ sClrGreen

struct GdColour sClrGreen = { 0.0, 1.0, 0.0 }
static

◆ sClrGrey

struct GdColour sClrGrey = { 0.6, 0.6, 0.6 }
static

◆ sClrPink

struct GdColour sClrPink = { 1.0, 0.0, 1.0 }
static

◆ sClrRed

struct GdColour sClrRed = { 1.0, 0.0, 0.0 }
static

◆ sClrWhite

struct GdColour sClrWhite = { 1.0, 1.0, 1.0 }
static

◆ sClrYellow

struct GdColour sClrYellow = { 1.0, 1.0, 0.0 }
static

◆ sColourPalette

struct GdColour* sColourPalette[5]
Initial value:
= {
}
static struct GdColour sClrWhite
Definition: draw_objects.c:49
static struct GdColour sClrBlack
Definition: draw_objects.c:55
static struct GdColour sClrYellow
Definition: draw_objects.c:58
static struct GdColour sClrRed
Definition: draw_objects.c:50

◆ sGrabCords

struct GdVec3f sGrabCords
static

x, y grabbable point near cursor

◆ shapesDrawn

s32 shapesDrawn

◆ sLightColours

struct GdColour sLightColours[1] = { { 1.0, 1.0, 0.0 } }
static

◆ sLightDlCounter

s32 sLightDlCounter = 1
static

◆ sLightPositionCache

struct GdVec3f sLightPositionCache[8]
static

◆ sLightPositionOffset

struct GdVec3f sLightPositionOffset
static

◆ sNumActiveLights

s32 sNumActiveLights
static

◆ sPhongLight

struct ObjLight* sPhongLight
static

◆ sPhongLightPosition

struct GdVec3f sPhongLightPosition
static

◆ sPickBuffer

s16 sPickBuffer[100]
static

buffer of objects near click

◆ sPickDataTemp

s32 sPickDataTemp
static

now, only data is the object number of a selected joint

◆ sPickedObject

struct GdObj* sPickedObject
static

object selected with cursor

◆ sPickObjDistance

f32 sPickObjDistance
static

distance between object position and cursor click location

◆ sSceneProcessType

enum SceneType sSceneProcessType
static

◆ sSelectedColour

struct GdColour* sSelectedColour = &sClrRed
static

◆ sUnreadShapeFlag

s32 sUnreadShapeFlag = 0
static

◆ sUnref801A80FC

void* sUnref801A80FC = NULL
static

◆ sUnref801A8120

Mat4f sUnref801A8120
static
Initial value:
= {
{ 1.0, 0.0, 0.0, 0.0 }, { 0.0, 0.0, 0.0, 0.0 }, { 0.0, 0.0, 1.0, 0.0 }, { 0.0, 0.0, 0.0, 1.0 }
}

◆ sUnref801A81A4

s32 sUnref801A81A4[4] = { 0 }
static

◆ sUnref_801B9BBC

u8 sUnref_801B9BBC[0x40]
static

◆ sUnrefIden801A8160

Mat4f sUnrefIden801A8160
static
Initial value:
= {
{ 1.0, 0.0, 0.0, 0.0 }, { 0.0, 1.0, 0.0, 0.0 }, { 0.0, 0.0, 1.0, 0.0 }, { 0.0, 0.0, 0.0, 1.0 }
}

◆ sUpdateViewState

struct { ... } sUpdateViewState

Various counters and pointers set in update_view() and used in various draw_XXX functions.

◆ sUseSelectedColor

s32 sUseSelectedColor
static

◆ sWhiteBlack

struct GdColour* sWhiteBlack[2]
Initial value:
= {
}
static struct GdColour sClrWhite
Definition: draw_objects.c:49
static struct GdColour sClrBlack
Definition: draw_objects.c:55

◆ unreadCounter

s32 unreadCounter

◆ unused18

s32 unused18

◆ view

struct ObjView* view