diff --git a/src/game/data/data_020df0.c b/src/game/data/data_020df0.c index d6180704e..158ebe7d4 100644 --- a/src/game/data/data_020df0.c +++ b/src/game/data/data_020df0.c @@ -3465,160 +3465,160 @@ struct modeltype g_ModelTypeRobot = { // 22f24 struct headorbody g_HeadsAndBodies[] = { // ismale - // | height - // | | - { /*0x0000*/ 1, 0, 0, 0, 167, FILE_CDJBOND, 1, 1.0446009635925, 0, FILE_GHAND_DDSECURITY }, - { /*0x0001*/ 1, 0, 0, 0, 167, FILE_CCONNERY, 1, 1.0300469398499, 0, FILE_GHAND_MRBLONDE }, - { /*0x0002*/ 1, 0, 0, 0, 165, FILE_CDALTON, 1, 1.0572769641876, 0, FILE_GHAND_DDSECURITY }, - { /*0x0003*/ 1, 0, 0, 0, 167, FILE_CMOORE, 1, 1.0399061441422, 0, FILE_GHAND_DDSECURITY }, - { /*0x0004*/ 0, 1, 0, 1, 13, FILE_CHEADDARK_COMBAT, 1, 1, 0, 0 }, - { /*0x0005*/ 1, 1, 0, 3, 27, FILE_CHEADELVIS, 1, 1, 0, 0 }, - { /*0x0006*/ 1, 1, 0, 0, 13, FILE_CHEADROSS, 1, 1, 0, 0 }, - { /*0x0007*/ 1, 1, 0, 0, 13, FILE_CHEADCARRINGTON, 1, 1, 0, 0 }, - { /*0x0008*/ 1, 1, 0, 5, 13, FILE_CHEADMRBLONDE, 1, 1, 0, 0 }, - { /*0x0009*/ 1, 1, 0, 0, 13, FILE_CHEADTRENT, 1, 1, 0, 0 }, - { /*0x000a*/ 1, 1, 0, 0, 13, FILE_CHEADDDSHOCK, 1, 1, 0, 0 }, - { /*0x000b*/ 1, 1, 0, 0, 13, FILE_CHEADGRAHAM, 1, 1, 0, 0 }, - { /*0x000c*/ 0, 1, 0, 1, 13, FILE_CHEADDARK_FROCK, 1, 1, 0, 0 }, - { /*0x000d*/ 0, 1, 0, 1, 13, FILE_CHEADSECRETARY, 1, 1, 0, 0 }, - { /*0x000e*/ 0, 1, 0, 4, 13, FILE_CHEADCASSANDRA, 1, 1, 0, 0 }, - { /*0x000f*/ 1, 1, 0, 3, 27, FILE_CHEADTHEKING, 1, 1, 0, 0 }, - { /*0x0010*/ 0, 1, 0, 0, 13, FILE_CHEADFEM_GUARD, 1, 1, 0, 0 }, - { /*0x0011*/ 1, 1, 0, 0, 13, FILE_CHEADJON, 1, 1, 0, 0 }, - { /*0x0012*/ 1, 1, 0, 0, 13, FILE_CHEADMARK2, 1, 1, 0, 0 }, - { /*0x0013*/ 1, 1, 0, 0, 13, FILE_CHEADCHRIST, 1, 1, 0, 0 }, - { /*0x0014*/ 1, 1, 0, 0, 13, FILE_CHEADRUSS, 1, 1, 0, 0 }, - { /*0x0015*/ 1, 1, 0, 3, 13, FILE_CHEADGREY, 1, 1, 0, 0 }, - { /*0x0016*/ 1, 1, 0, 0, 13, FILE_CHEADDARLING, 1, 1, 0, 0 }, - { /*0x0017*/ 1, 1, 0, 0, 13, FILE_CHEADROBERT, 1, 1, 0, 0 }, - { /*0x0018*/ 1, 1, 0, 0, 13, FILE_CHEADBEAU, 1, 1, 0, 0 }, - { /*0x0019*/ 0, 1, 0, 0, 13, FILE_CHEADFEM_GUARD2, 1, 1, 0, 0 }, - { /*0x001a*/ 1, 1, 0, 0, 13, FILE_CHEADBRIAN, 1, 1, 0, 0 }, - { /*0x001b*/ 1, 1, 0, 0, 13, FILE_CHEADJAMIE, 1, 1, 0, 0 }, - { /*0x001c*/ 1, 1, 0, 0, 13, FILE_CHEADDUNCAN2, 1, 1, 0, 0 }, - { /*0x001d*/ 1, 1, 0, 0, 13, FILE_CHEADBIOTECH, 1, 1, 0, 0 }, - { /*0x001e*/ 1, 1, 0, 0, 13, FILE_CHEADNEIL2, 1, 1, 0, 0 }, - { /*0x001f*/ 1, 1, 0, 0, 13, FILE_CHEADEDMCG, 1, 1, 0, 0 }, - { /*0x0020*/ 0, 1, 0, 1, 13, FILE_CHEADANKA, 1, 1, 0, 0 }, - { /*0x0021*/ 0, 1, 0, 1, 13, FILE_CHEADLESLIE_S, 1, 1, 0, 0 }, - { /*0x0022*/ 1, 1, 0, 0, 13, FILE_CHEADMATT_C, 1, 1, 0, 0 }, - { /*0x0023*/ 1, 1, 0, 0, 13, FILE_CHEADPEER_S, 1, 1, 0, 0 }, - { /*0x0024*/ 0, 1, 0, 1, 13, FILE_CHEADEILEEN_T, 1, 1, 0, 0 }, - { /*0x0025*/ 1, 1, 0, 0, 13, FILE_CHEADANDY_R, 1, 1, 0, 0 }, - { /*0x0026*/ 1, 1, 0, 0, 13, FILE_CHEADBEN_R, 1, 1, 0, 0 }, - { /*0x0027*/ 1, 1, 0, 0, 13, FILE_CHEADSTEVE_K, 1, 1, 0, 0 }, - { /*0x0028*/ 1, 1, 0, 0, 13, FILE_CHEADJONATHAN, 1, 1, 0, 0 }, - { /*0x0029*/ 1, 1, 0, 3, 27, FILE_CHEADMAIAN_S, 1, 1, 0, 0 }, - { /*0x002a*/ 1, 1, 0, 0, 13, FILE_CHEADSHAUN, 1, 1, 0, 0 }, - { /*0x002b*/ 1, 1, 0, 0, 13, FILE_CHEADBEAU, 1, 1, 0, 0 }, - { /*0x002c*/ 0, 1, 0, 1, 13, FILE_CHEADEILEEN_H, 1, 1, 0, 0 }, - { /*0x002d*/ 1, 1, 0, 0, 13, FILE_CHEADSCOTT_H, 1, 1, 0, 0 }, - { /*0x002e*/ 1, 1, 0, 0, 13, FILE_CHEADSANCHEZ, 1, 1, 0, 0 }, - { /*0x002f*/ 0, 1, 0, 1, 13, FILE_CHEADDARKAQUA, 1, 1, 0, 0 }, - { /*0x0030*/ 1, 1, 0, 0, 13, FILE_CHEADDDSNIPER, 1, 1, 0, 0 }, - { /*0x0031*/ 1, 1, 0, 0, 13, FILE_CHEADBEAU, 1, 1, 0, 0 }, - { /*0x0032*/ 1, 1, 0, 0, 13, FILE_CHEADBEAU, 1, 1, 0, 0 }, - { /*0x0033*/ 1, 1, 0, 0, 13, FILE_CHEADBEAU, 1, 1, 0, 0 }, - { /*0x0034*/ 1, 1, 0, 0, 13, FILE_CHEADBEAU, 1, 1, 0, 0 }, - { /*0x0035*/ 1, 1, 0, 0, 13, FILE_CHEADGRIFFEY, 1, 1, 0, 0 }, - { /*0x0036*/ 1, 1, 0, 0, 13, FILE_CHEADMOTO, 1, 1, 0, 0 }, - { /*0x0037*/ 1, 1, 0, 0, 13, FILE_CHEADKEITH, 1, 1, 0, 0 }, - { /*0x0038*/ 0, 1, 0, 1, 13, FILE_CHEADWINNER, 1, 1, 0, 0 }, - { /*0x0039*/ 1, 1, 0, 0, 13, FILE_CA51FACEPLATE, 1, 1, 0, 0 }, - { /*0x003a*/ 1, 1, 0, 3, 27, FILE_CHEADELVIS_GOGS, 1, 1, 0, 0 }, - { /*0x003b*/ 1, 1, 0, 0, 13, FILE_CHEADSTEVEM, 1, 1, 0, 0 }, - { /*0x003c*/ 0, 1, 0, 1, 13, FILE_CHEADDARK_SNOW, 1, 1, 0, 0 }, - { /*0x003d*/ 1, 1, 0, 0, 13, FILE_CHEADPRESIDENT, 1, 1, 0, 0 }, - { /*0x003e*/ 0, 1, 0, 1, 13, FILE_CHEAD_VD, 1, 1, 0, 0 }, - { /*0x003f*/ 1, 1, 0, 0, 13, FILE_CHEADKEN, 1, 1, 0, 0 }, - { /*0x0040*/ 1, 1, 0, 0, 13, FILE_CHEADJOEL, 1, 1, 0, 0 }, - { /*0x0041*/ 1, 1, 0, 0, 13, FILE_CHEADTIM, 1, 1, 0, 0 }, - { /*0x0042*/ 1, 1, 0, 0, 13, FILE_CHEADGRANT, 1, 1, 0, 0 }, - { /*0x0043*/ 1, 1, 0, 0, 13, FILE_CHEADPENNY, 1, 1, 0, 0 }, - { /*0x0044*/ 1, 1, 0, 0, 13, FILE_CHEADROBIN, 1, 1, 0, 0 }, - { /*0x0045*/ 0, 1, 0, 2, 13, FILE_CHEADALEX, 1, 1, 0, 0 }, - { /*0x0046*/ 0, 1, 0, 2, 13, FILE_CHEADJULIANNE, 1, 1, 0, 0 }, - { /*0x0047*/ 0, 1, 0, 2, 13, FILE_CHEADLAURA, 1, 1, 0, 0 }, - { /*0x0048*/ 1, 1, 0, 0, 13, FILE_CHEADDAVEC, 1, 1, 0, 0 }, - { /*0x0049*/ 1, 1, 0, 0, 13, FILE_CHEADCOOK, 1, 1, 0, 0 }, - { /*0x004a*/ 1, 1, 0, 0, 13, FILE_CHEADPRYCE, 1, 1, 0, 0 }, - { /*0x004b*/ 1, 1, 0, 0, 13, FILE_CHEADSILKE, 1, 1, 0, 0 }, - { /*0x004c*/ 1, 1, 0, 0, 13, FILE_CHEADSMITH, 1, 1, 0, 0 }, - { /*0x004d*/ 1, 1, 0, 0, 13, FILE_CHEADGARETH, 1, 1, 0, 0 }, - { /*0x004e*/ 1, 1, 0, 0, 13, FILE_CHEADMURCHIE, 1, 1, 0, 0 }, - { /*0x004f*/ 1, 1, 0, 0, 13, FILE_CHEADWONG, 1, 1, 0, 0 }, - { /*0x0050*/ 1, 1, 0, 0, 13, FILE_CHEADCARTER, 1, 1, 0, 0 }, - { /*0x0051*/ 1, 1, 0, 0, 13, FILE_CHEADTINTIN, 1, 1, 0, 0 }, - { /*0x0052*/ 1, 1, 0, 0, 13, FILE_CHEADMUNTON, 1, 1, 0, 0 }, - { /*0x0053*/ 1, 1, 0, 0, 13, FILE_CHEADSTAMPER, 1, 1, 0, 0 }, - { /*0x0054*/ 1, 1, 0, 0, 13, FILE_CHEADJONES, 1, 1, 0, 0 }, - { /*0x0055*/ 1, 1, 0, 0, 13, FILE_CHEADPHELPS, 1, 1, 0, 0 }, - { /*0x0056*/ 0, 0, 0, 1, 159, FILE_CDARK_COMBAT, 1, 0.95305162668228, 0, FILE_GCOMBATHANDSLOD }, - { /*0x0057*/ 1, 0, 0, 3, 106, FILE_CELVIS1, 1, 0.57276993989944, 0, FILE_GHAND_ELVIS }, - { /*0x0058*/ 1, 0, 1, 0, 157, FILE_CAREA51GUARD, 1, 0.92769956588745, 0, FILE_GHAND_A51GUARD }, - { /*0x0059*/ 1, 0, 0, 0, 159, FILE_COVERALL, 1, 0.92769956588745, 0, FILE_GHAND_A51GUARD }, - { /*0x005a*/ 1, 0, 0, 0, 154, FILE_CCARRINGTON, 1, 0.85915493965149, 0, FILE_GHAND_CARRINGTON }, - { /*0x005b*/ 1, 0, 0, 5, 169, FILE_CMRBLONDE, 1, 1.1032863855362, 0, FILE_GHAND_MRBLONDE }, - { /*0x005c*/ 1, 0, 1, 0, 159, FILE_CSKEDAR, 1, 1, 0, 0 }, - { /*0x005d*/ 1, 0, 0, 0, 161, FILE_CTRENT, 1, 0.93896716833115, 0, FILE_GHAND_TRENT }, - { /*0x005e*/ 1, 0, 1, 0, 157, FILE_CDDSHOCK, 1, 0.93896716833115, 0, FILE_GHAND_DDFODDER }, - { /*0x005f*/ 1, 0, 1, 0, 157, FILE_CLABTECH, 1, 0.93896716833115, 0, FILE_GHAND_MRBLONDE }, - { /*0x0060*/ 1, 0, 1, 0, 158, FILE_CSTRIPES, 1, 0.92769956588745, 0, FILE_GHAND_BLACKGUARD }, - { /*0x0061*/ 0, 0, 0, 1, 159, FILE_CDARK_FROCK, 1, 0.95305162668228, 0, FILE_GHAND_JOFROCK }, - { /*0x0062*/ 0, 0, 0, 1, 159, FILE_CDARK_TRENCH, 1, 0.95305162668228, 0, FILE_GHAND_JOTRENCH }, - { /*0x0063*/ 1, 0, 0, 0, 157, FILE_COFFICEWORKER, 1, 0.93896716833115, 0, FILE_GHAND_JOFROCK }, - { /*0x0064*/ 1, 0, 0, 0, 157, FILE_COFFICEWORKER2, 1, 0.93896716833115, 0, FILE_GHAND_JOFROCK }, - { /*0x0065*/ 0, 0, 0, 1, 140, FILE_CSECRETARY, 1, 0.87323945760727, 0, FILE_GHAND_JOFROCK }, - { /*0x0066*/ 0, 0, 0, 4, 167, FILE_CCASSANDRA, 1, 0.98591554164886, 0, FILE_GHAND_VRIES }, - { /*0x0067*/ 1, 0, 0, 3, 106, FILE_CTHEKING, 1, 0.57276993989944, 0, FILE_GHAND_ELVIS }, - { /*0x0068*/ 0, 0, 1, 2, 160, FILE_CFEM_GUARD, 1, 0.96713620424271, 0, FILE_GHAND_JOTRENCH }, - { /*0x0069*/ 1, 0, 1, 0, 157, FILE_CDD_LABTECH, 1, 0.93896716833115, 0, FILE_GHAND_DDLABTECH }, - { /*0x006a*/ 1, 0, 1, 0, 160, FILE_CDD_SECGUARD, 1, 0.93427228927612, 0, FILE_GHAND_DDSECURITY }, - { /*0x006b*/ 1, 1, 0, 0, 159, FILE_CDRCARROLL, 1, 1, 0, 0 }, - { /*0x006c*/ 1, 0, 0, 0, 159, FILE_CEYESPY, 1, 1, 0, 0 }, - { /*0x006d*/ 0, 0, 0, 1, 159, FILE_CDARK_RIPPED, 1, 0.95305162668228, 0, FILE_GHAND_JOFROCK }, - { /*0x006e*/ 1, 0, 1, 0, 160, FILE_CDD_GUARD, 1, 0.93896716833115, 0, FILE_GHAND_DDSECURITY }, - { /*0x006f*/ 1, 0, 1, 0, 157, FILE_CDD_SHOCK_INF, 1, 0.93896716833115, 0, FILE_GHAND_DDSHOCK }, - { /*0x0070*/ 1, 1, 0, 0, 159, FILE_CTESTCHR, 1, 1, 0, 0 }, - { /*0x0071*/ 1, 0, 1, 0, 155, FILE_CBIOTECH, 1, 0.93896716833115, 0, FILE_GHAND_DDBIO }, - { /*0x0072*/ 1, 0, 1, 0, 159, FILE_CFBIGUY, 1, 0.93896716833115, 0, FILE_GHAND_FBIARM }, - { /*0x0073*/ 1, 0, 1, 0, 159, FILE_CCIAGUY, 1, 0.93896716833115, 0, FILE_GHAND_CIA }, - { /*0x0074*/ 1, 0, 1, 0, 159, FILE_CA51TROOPER, 1, 0.93896716833115, 0, FILE_GHAND_JOFROCK }, - { /*0x0075*/ 1, 0, 0, 0, 157, FILE_CA51AIRMAN, 1, 0.93896716833115, 0, FILE_GHAND_A51AIRMAN }, - { /*0x0076*/ 1, 0, 0, 0, 159, FILE_CCHICROB, 1, 1, 0, 0 }, - { /*0x0077*/ 1, 0, 0, 0, 153, FILE_CSTEWARD, 1, 0.89201879501343, 0, FILE_GHAND_JOFROCK }, - { /*0x0078*/ 0, 0, 0, 1, 143, FILE_CSTEWARDESS, 1, 0.85446006059647, 0, FILE_GHAND_JOFROCK }, - { /*0x0079*/ 1, 0, 0, 0, 159, FILE_CPRESIDENT, 1, 0.93896716833115, 0, FILE_GHAND_PRESIDENT }, - { /*0x007a*/ 0, 0, 0, 1, 143, FILE_CSTEWARDESS_COAT, 1, 0.85446006059647, 0, FILE_GHAND_STEWARDESS_COAT }, - { /*0x007b*/ 1, 0, 0, 0, 159, FILE_CMINISKEDAR, 0.75, 0.5, 0, 0 }, - { /*0x007c*/ 1, 0, 0, 0, 159, FILE_CNSA_LACKEY, 1, 0.93896716833115, 0, FILE_GHAND_CARRINGTON }, - { /*0x007d*/ 1, 0, 0, 0, 159, FILE_CPRES_SECURITY, 1, 0.93896716833115, 0, FILE_GHAND_CARRINGTON }, - { /*0x007e*/ 0, 0, 0, 1, 142, FILE_CNEGOTIATOR, 1, 0.85446006059647, 0, FILE_GHAND_JOFROCK }, - { /*0x007f*/ 1, 0, 0, 0, 159, FILE_CG5_GUARD, 1, 0.93896716833115, 0, FILE_GHAND_G5GUARD }, - { /*0x0080*/ 1, 0, 1, 0, 159, FILE_CPELAGIC_GUARD, 1, 0.93896716833115, 0, FILE_GHAND_TRAGIC_PELAGIC }, - { /*0x0081*/ 1, 0, 1, 0, 158, FILE_CG5_SWAT_GUARD, 1, 0.93896716833115, 0, FILE_GHAND_G5GUARD }, - { /*0x0082*/ 1, 0, 1, 0, 158, FILE_CALASKAN_GUARD, 1, 0.93896716833115, 0, FILE_GHAND_JOSNOW }, - { /*0x0083*/ 1, 0, 1, 3, 106, FILE_CMAIAN_SOLDIER, 1, 0.57276993989944, 0, FILE_GHAND_ELVIS }, - { /*0x0084*/ 1, 0, 0, 0, 159, FILE_CPRESIDENT_CLONE, 1, 0.93896716833115, 0, FILE_GCOMBATHANDSLOD }, - { /*0x0085*/ 1, 0, 0, 0, 159, FILE_CPRESIDENT_CLONE, 1, 0.93896716833115, 0, FILE_GHAND_PRESIDENT }, - { /*0x0086*/ 0, 0, 0, 1, 159, FILE_CDARK_AF1, 1, 0.95305162668228, 0, FILE_GHAND_JOPILOT }, - { /*0x0087*/ 0, 0, 0, 1, 159, FILE_CDARKWET, 1, 0.95305162668228, 0, FILE_GHAND_JOWETSUIT }, - { /*0x0088*/ 0, 0, 0, 1, 159, FILE_CDARKAQUALUNG, 1, 0.95305162668228, 0, FILE_GHAND_JOWETSUIT }, - { /*0x0089*/ 0, 0, 0, 1, 159, FILE_CDARKSNOW, 1, 0.95305162668228, 0, FILE_GHAND_JOSNOW }, - { /*0x008a*/ 0, 0, 0, 1, 159, FILE_CDARKLAB, 1, 0.95305162668228, 0, FILE_GHAND_MRBLONDE }, - { /*0x008b*/ 0, 0, 1, 1, 159, FILE_CFEMLABTECH, 1, 0.87323945760727, 0, FILE_GHAND_MRBLONDE }, - { /*0x008c*/ 1, 0, 1, 0, 159, FILE_CDDSNIPER, 1, 0.93896716833115, 0, FILE_GHAND_DDSNIPER }, - { /*0x008d*/ 1, 0, 0, 0, 159, FILE_CPILOTAF1, 1, 0.88262909650803, 0, FILE_GHAND_JOPILOT }, - { /*0x008e*/ 1, 0, 1, 0, 159, FILE_CCILABTECH, 1, 0.93896716833115, 0, FILE_GHAND_CIFEMTECH }, - { /*0x008f*/ 0, 0, 1, 1, 159, FILE_CCIFEMTECH, 1, 0.86854463815689, 0, FILE_GHAND_CIFEMTECH }, - { /*0x0090*/ 1, 0, 0, 0, 159, FILE_CCARREVENINGSUIT, 1, 0.85915493965149, 0, FILE_GHAND_MRBLONDE }, - { /*0x0091*/ 1, 0, 0, 0, 159, FILE_CJONATHON, 1, 0.93896716833115, 0, FILE_GHAND_A51GUARD }, - { /*0x0092*/ 1, 0, 1, 0, 159, FILE_CCISOLDIER, 1, 0.93896716833115, 0, FILE_GHAND_CISOLDIER }, - { /*0x0093*/ 1, 0, 0, 0, 159, FILE_CSKEDARKING, 1, 1.25, 0, 0 }, - { /*0x0094*/ 1, 0, 0, 3, 106, FILE_CELVISWAISTCOAT, 1, 0.57276993989944, 0, FILE_GHAND_ELVIS }, - { /*0x0095*/ 0, 0, 0, 1, 159, FILE_CDARK_LEATHER, 1, 0.95305162668228, 0, FILE_GHAND_JOFROCK }, - { /*0x0096*/ 0, 0, 0, 1, 159, FILE_CDARK_NEGOTIATOR, 1, 0.95305162668228, 0, FILE_GHAND_JOAF1 }, - { /*0x0097*/ 0, 0, 0, 0, 0, 0, 1, 0, 0, FILE_GCOMBATHANDSLOD }, + // | height + // | | + { /*0x0000*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 167, FILE_CDJBOND, 1, 1.0446009635925, 0, FILE_GHAND_DDSECURITY }, + { /*0x0001*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 167, FILE_CCONNERY, 1, 1.0300469398499, 0, FILE_GHAND_MRBLONDE }, + { /*0x0002*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 165, FILE_CDALTON, 1, 1.0572769641876, 0, FILE_GHAND_DDSECURITY }, + { /*0x0003*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 167, FILE_CMOORE, 1, 1.0399061441422, 0, FILE_GHAND_DDSECURITY }, + { /*0x0004*/ 0, 1, 0, HEADBODYTYPE_FEMALE, 13, FILE_CHEADDARK_COMBAT, 1, 1, 0, 0 }, + { /*0x0005*/ 1, 1, 0, HEADBODYTYPE_MAIAN, 27, FILE_CHEADELVIS, 1, 1, 0, 0 }, + { /*0x0006*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADROSS, 1, 1, 0, 0 }, + { /*0x0007*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADCARRINGTON, 1, 1, 0, 0 }, + { /*0x0008*/ 1, 1, 0, HEADBODYTYPE_MRBLONDE, 13, FILE_CHEADMRBLONDE, 1, 1, 0, 0 }, + { /*0x0009*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADTRENT, 1, 1, 0, 0 }, + { /*0x000a*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADDDSHOCK, 1, 1, 0, 0 }, + { /*0x000b*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADGRAHAM, 1, 1, 0, 0 }, + { /*0x000c*/ 0, 1, 0, HEADBODYTYPE_FEMALE, 13, FILE_CHEADDARK_FROCK, 1, 1, 0, 0 }, + { /*0x000d*/ 0, 1, 0, HEADBODYTYPE_FEMALE, 13, FILE_CHEADSECRETARY, 1, 1, 0, 0 }, + { /*0x000e*/ 0, 1, 0, HEADBODYTYPE_CASS, 13, FILE_CHEADCASSANDRA, 1, 1, 0, 0 }, + { /*0x000f*/ 1, 1, 0, HEADBODYTYPE_MAIAN, 27, FILE_CHEADTHEKING, 1, 1, 0, 0 }, + { /*0x0010*/ 0, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADFEM_GUARD, 1, 1, 0, 0 }, + { /*0x0011*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADJON, 1, 1, 0, 0 }, + { /*0x0012*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADMARK2, 1, 1, 0, 0 }, + { /*0x0013*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADCHRIST, 1, 1, 0, 0 }, + { /*0x0014*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADRUSS, 1, 1, 0, 0 }, + { /*0x0015*/ 1, 1, 0, HEADBODYTYPE_MAIAN, 13, FILE_CHEADGREY, 1, 1, 0, 0 }, + { /*0x0016*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADDARLING, 1, 1, 0, 0 }, + { /*0x0017*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADROBERT, 1, 1, 0, 0 }, + { /*0x0018*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADBEAU, 1, 1, 0, 0 }, + { /*0x0019*/ 0, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADFEM_GUARD2, 1, 1, 0, 0 }, + { /*0x001a*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADBRIAN, 1, 1, 0, 0 }, + { /*0x001b*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADJAMIE, 1, 1, 0, 0 }, + { /*0x001c*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADDUNCAN2, 1, 1, 0, 0 }, + { /*0x001d*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADBIOTECH, 1, 1, 0, 0 }, + { /*0x001e*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADNEIL2, 1, 1, 0, 0 }, + { /*0x001f*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADEDMCG, 1, 1, 0, 0 }, + { /*0x0020*/ 0, 1, 0, HEADBODYTYPE_FEMALE, 13, FILE_CHEADANKA, 1, 1, 0, 0 }, + { /*0x0021*/ 0, 1, 0, HEADBODYTYPE_FEMALE, 13, FILE_CHEADLESLIE_S, 1, 1, 0, 0 }, + { /*0x0022*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADMATT_C, 1, 1, 0, 0 }, + { /*0x0023*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADPEER_S, 1, 1, 0, 0 }, + { /*0x0024*/ 0, 1, 0, HEADBODYTYPE_FEMALE, 13, FILE_CHEADEILEEN_T, 1, 1, 0, 0 }, + { /*0x0025*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADANDY_R, 1, 1, 0, 0 }, + { /*0x0026*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADBEN_R, 1, 1, 0, 0 }, + { /*0x0027*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADSTEVE_K, 1, 1, 0, 0 }, + { /*0x0028*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADJONATHAN, 1, 1, 0, 0 }, + { /*0x0029*/ 1, 1, 0, HEADBODYTYPE_MAIAN, 27, FILE_CHEADMAIAN_S, 1, 1, 0, 0 }, + { /*0x002a*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADSHAUN, 1, 1, 0, 0 }, + { /*0x002b*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADBEAU, 1, 1, 0, 0 }, + { /*0x002c*/ 0, 1, 0, HEADBODYTYPE_FEMALE, 13, FILE_CHEADEILEEN_H, 1, 1, 0, 0 }, + { /*0x002d*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADSCOTT_H, 1, 1, 0, 0 }, + { /*0x002e*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADSANCHEZ, 1, 1, 0, 0 }, + { /*0x002f*/ 0, 1, 0, HEADBODYTYPE_FEMALE, 13, FILE_CHEADDARKAQUA, 1, 1, 0, 0 }, + { /*0x0030*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADDDSNIPER, 1, 1, 0, 0 }, + { /*0x0031*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADBEAU, 1, 1, 0, 0 }, + { /*0x0032*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADBEAU, 1, 1, 0, 0 }, + { /*0x0033*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADBEAU, 1, 1, 0, 0 }, + { /*0x0034*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADBEAU, 1, 1, 0, 0 }, + { /*0x0035*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADGRIFFEY, 1, 1, 0, 0 }, + { /*0x0036*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADMOTO, 1, 1, 0, 0 }, + { /*0x0037*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADKEITH, 1, 1, 0, 0 }, + { /*0x0038*/ 0, 1, 0, HEADBODYTYPE_FEMALE, 13, FILE_CHEADWINNER, 1, 1, 0, 0 }, + { /*0x0039*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CA51FACEPLATE, 1, 1, 0, 0 }, + { /*0x003a*/ 1, 1, 0, HEADBODYTYPE_MAIAN, 27, FILE_CHEADELVIS_GOGS, 1, 1, 0, 0 }, + { /*0x003b*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADSTEVEM, 1, 1, 0, 0 }, + { /*0x003c*/ 0, 1, 0, HEADBODYTYPE_FEMALE, 13, FILE_CHEADDARK_SNOW, 1, 1, 0, 0 }, + { /*0x003d*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADPRESIDENT, 1, 1, 0, 0 }, + { /*0x003e*/ 0, 1, 0, HEADBODYTYPE_FEMALE, 13, FILE_CHEAD_VD, 1, 1, 0, 0 }, + { /*0x003f*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADKEN, 1, 1, 0, 0 }, + { /*0x0040*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADJOEL, 1, 1, 0, 0 }, + { /*0x0041*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADTIM, 1, 1, 0, 0 }, + { /*0x0042*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADGRANT, 1, 1, 0, 0 }, + { /*0x0043*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADPENNY, 1, 1, 0, 0 }, + { /*0x0044*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADROBIN, 1, 1, 0, 0 }, + { /*0x0045*/ 0, 1, 0, HEADBODYTYPE_FEMALEGUARD, 13, FILE_CHEADALEX, 1, 1, 0, 0 }, + { /*0x0046*/ 0, 1, 0, HEADBODYTYPE_FEMALEGUARD, 13, FILE_CHEADJULIANNE, 1, 1, 0, 0 }, + { /*0x0047*/ 0, 1, 0, HEADBODYTYPE_FEMALEGUARD, 13, FILE_CHEADLAURA, 1, 1, 0, 0 }, + { /*0x0048*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADDAVEC, 1, 1, 0, 0 }, + { /*0x0049*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADCOOK, 1, 1, 0, 0 }, + { /*0x004a*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADPRYCE, 1, 1, 0, 0 }, + { /*0x004b*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADSILKE, 1, 1, 0, 0 }, + { /*0x004c*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADSMITH, 1, 1, 0, 0 }, + { /*0x004d*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADGARETH, 1, 1, 0, 0 }, + { /*0x004e*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADMURCHIE, 1, 1, 0, 0 }, + { /*0x004f*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADWONG, 1, 1, 0, 0 }, + { /*0x0050*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADCARTER, 1, 1, 0, 0 }, + { /*0x0051*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADTINTIN, 1, 1, 0, 0 }, + { /*0x0052*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADMUNTON, 1, 1, 0, 0 }, + { /*0x0053*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADSTAMPER, 1, 1, 0, 0 }, + { /*0x0054*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADJONES, 1, 1, 0, 0 }, + { /*0x0055*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 13, FILE_CHEADPHELPS, 1, 1, 0, 0 }, + { /*0x0056*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 159, FILE_CDARK_COMBAT, 1, 0.95305162668228, 0, FILE_GCOMBATHANDSLOD }, + { /*0x0057*/ 1, 0, 0, HEADBODYTYPE_MAIAN, 106, FILE_CELVIS1, 1, 0.57276993989944, 0, FILE_GHAND_ELVIS }, + { /*0x0058*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 157, FILE_CAREA51GUARD, 1, 0.92769956588745, 0, FILE_GHAND_A51GUARD }, + { /*0x0059*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 159, FILE_COVERALL, 1, 0.92769956588745, 0, FILE_GHAND_A51GUARD }, + { /*0x005a*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 154, FILE_CCARRINGTON, 1, 0.85915493965149, 0, FILE_GHAND_CARRINGTON }, + { /*0x005b*/ 1, 0, 0, HEADBODYTYPE_MRBLONDE, 169, FILE_CMRBLONDE, 1, 1.1032863855362, 0, FILE_GHAND_MRBLONDE }, + { /*0x005c*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 159, FILE_CSKEDAR, 1, 1, 0, 0 }, + { /*0x005d*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 161, FILE_CTRENT, 1, 0.93896716833115, 0, FILE_GHAND_TRENT }, + { /*0x005e*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 157, FILE_CDDSHOCK, 1, 0.93896716833115, 0, FILE_GHAND_DDFODDER }, + { /*0x005f*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 157, FILE_CLABTECH, 1, 0.93896716833115, 0, FILE_GHAND_MRBLONDE }, + { /*0x0060*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 158, FILE_CSTRIPES, 1, 0.92769956588745, 0, FILE_GHAND_BLACKGUARD }, + { /*0x0061*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 159, FILE_CDARK_FROCK, 1, 0.95305162668228, 0, FILE_GHAND_JOFROCK }, + { /*0x0062*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 159, FILE_CDARK_TRENCH, 1, 0.95305162668228, 0, FILE_GHAND_JOTRENCH }, + { /*0x0063*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 157, FILE_COFFICEWORKER, 1, 0.93896716833115, 0, FILE_GHAND_JOFROCK }, + { /*0x0064*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 157, FILE_COFFICEWORKER2, 1, 0.93896716833115, 0, FILE_GHAND_JOFROCK }, + { /*0x0065*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 140, FILE_CSECRETARY, 1, 0.87323945760727, 0, FILE_GHAND_JOFROCK }, + { /*0x0066*/ 0, 0, 0, HEADBODYTYPE_CASS, 167, FILE_CCASSANDRA, 1, 0.98591554164886, 0, FILE_GHAND_VRIES }, + { /*0x0067*/ 1, 0, 0, HEADBODYTYPE_MAIAN, 106, FILE_CTHEKING, 1, 0.57276993989944, 0, FILE_GHAND_ELVIS }, + { /*0x0068*/ 0, 0, 1, HEADBODYTYPE_FEMALEGUARD, 160, FILE_CFEM_GUARD, 1, 0.96713620424271, 0, FILE_GHAND_JOTRENCH }, + { /*0x0069*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 157, FILE_CDD_LABTECH, 1, 0.93896716833115, 0, FILE_GHAND_DDLABTECH }, + { /*0x006a*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 160, FILE_CDD_SECGUARD, 1, 0.93427228927612, 0, FILE_GHAND_DDSECURITY }, + { /*0x006b*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CDRCARROLL, 1, 1, 0, 0 }, + { /*0x006c*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CEYESPY, 1, 1, 0, 0 }, + { /*0x006d*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 159, FILE_CDARK_RIPPED, 1, 0.95305162668228, 0, FILE_GHAND_JOFROCK }, + { /*0x006e*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 160, FILE_CDD_GUARD, 1, 0.93896716833115, 0, FILE_GHAND_DDSECURITY }, + { /*0x006f*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 157, FILE_CDD_SHOCK_INF, 1, 0.93896716833115, 0, FILE_GHAND_DDSHOCK }, + { /*0x0070*/ 1, 1, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CTESTCHR, 1, 1, 0, 0 }, + { /*0x0071*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 155, FILE_CBIOTECH, 1, 0.93896716833115, 0, FILE_GHAND_DDBIO }, + { /*0x0072*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 159, FILE_CFBIGUY, 1, 0.93896716833115, 0, FILE_GHAND_FBIARM }, + { /*0x0073*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 159, FILE_CCIAGUY, 1, 0.93896716833115, 0, FILE_GHAND_CIA }, + { /*0x0074*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 159, FILE_CA51TROOPER, 1, 0.93896716833115, 0, FILE_GHAND_JOFROCK }, + { /*0x0075*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 157, FILE_CA51AIRMAN, 1, 0.93896716833115, 0, FILE_GHAND_A51AIRMAN }, + { /*0x0076*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CCHICROB, 1, 1, 0, 0 }, + { /*0x0077*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 153, FILE_CSTEWARD, 1, 0.89201879501343, 0, FILE_GHAND_JOFROCK }, + { /*0x0078*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 143, FILE_CSTEWARDESS, 1, 0.85446006059647, 0, FILE_GHAND_JOFROCK }, + { /*0x0079*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CPRESIDENT, 1, 0.93896716833115, 0, FILE_GHAND_PRESIDENT }, + { /*0x007a*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 143, FILE_CSTEWARDESS_COAT, 1, 0.85446006059647, 0, FILE_GHAND_STEWARDESS_COAT }, + { /*0x007b*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CMINISKEDAR, 0.75, 0.5, 0, 0 }, + { /*0x007c*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CNSA_LACKEY, 1, 0.93896716833115, 0, FILE_GHAND_CARRINGTON }, + { /*0x007d*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CPRES_SECURITY, 1, 0.93896716833115, 0, FILE_GHAND_CARRINGTON }, + { /*0x007e*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 142, FILE_CNEGOTIATOR, 1, 0.85446006059647, 0, FILE_GHAND_JOFROCK }, + { /*0x007f*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CG5_GUARD, 1, 0.93896716833115, 0, FILE_GHAND_G5GUARD }, + { /*0x0080*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 159, FILE_CPELAGIC_GUARD, 1, 0.93896716833115, 0, FILE_GHAND_TRAGIC_PELAGIC }, + { /*0x0081*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 158, FILE_CG5_SWAT_GUARD, 1, 0.93896716833115, 0, FILE_GHAND_G5GUARD }, + { /*0x0082*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 158, FILE_CALASKAN_GUARD, 1, 0.93896716833115, 0, FILE_GHAND_JOSNOW }, + { /*0x0083*/ 1, 0, 1, HEADBODYTYPE_MAIAN, 106, FILE_CMAIAN_SOLDIER, 1, 0.57276993989944, 0, FILE_GHAND_ELVIS }, + { /*0x0084*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CPRESIDENT_CLONE, 1, 0.93896716833115, 0, FILE_GCOMBATHANDSLOD }, + { /*0x0085*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CPRESIDENT_CLONE, 1, 0.93896716833115, 0, FILE_GHAND_PRESIDENT }, + { /*0x0086*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 159, FILE_CDARK_AF1, 1, 0.95305162668228, 0, FILE_GHAND_JOPILOT }, + { /*0x0087*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 159, FILE_CDARKWET, 1, 0.95305162668228, 0, FILE_GHAND_JOWETSUIT }, + { /*0x0088*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 159, FILE_CDARKAQUALUNG, 1, 0.95305162668228, 0, FILE_GHAND_JOWETSUIT }, + { /*0x0089*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 159, FILE_CDARKSNOW, 1, 0.95305162668228, 0, FILE_GHAND_JOSNOW }, + { /*0x008a*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 159, FILE_CDARKLAB, 1, 0.95305162668228, 0, FILE_GHAND_MRBLONDE }, + { /*0x008b*/ 0, 0, 1, HEADBODYTYPE_FEMALE, 159, FILE_CFEMLABTECH, 1, 0.87323945760727, 0, FILE_GHAND_MRBLONDE }, + { /*0x008c*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 159, FILE_CDDSNIPER, 1, 0.93896716833115, 0, FILE_GHAND_DDSNIPER }, + { /*0x008d*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CPILOTAF1, 1, 0.88262909650803, 0, FILE_GHAND_JOPILOT }, + { /*0x008e*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 159, FILE_CCILABTECH, 1, 0.93896716833115, 0, FILE_GHAND_CIFEMTECH }, + { /*0x008f*/ 0, 0, 1, HEADBODYTYPE_FEMALE, 159, FILE_CCIFEMTECH, 1, 0.86854463815689, 0, FILE_GHAND_CIFEMTECH }, + { /*0x0090*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CCARREVENINGSUIT, 1, 0.85915493965149, 0, FILE_GHAND_MRBLONDE }, + { /*0x0091*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CJONATHON, 1, 0.93896716833115, 0, FILE_GHAND_A51GUARD }, + { /*0x0092*/ 1, 0, 1, HEADBODYTYPE_DEFAULT, 159, FILE_CCISOLDIER, 1, 0.93896716833115, 0, FILE_GHAND_CISOLDIER }, + { /*0x0093*/ 1, 0, 0, HEADBODYTYPE_DEFAULT, 159, FILE_CSKEDARKING, 1, 1.25, 0, 0 }, + { /*0x0094*/ 1, 0, 0, HEADBODYTYPE_MAIAN, 106, FILE_CELVISWAISTCOAT, 1, 0.57276993989944, 0, FILE_GHAND_ELVIS }, + { /*0x0095*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 159, FILE_CDARK_LEATHER, 1, 0.95305162668228, 0, FILE_GHAND_JOFROCK }, + { /*0x0096*/ 0, 0, 0, HEADBODYTYPE_FEMALE, 159, FILE_CDARK_NEGOTIATOR, 1, 0.95305162668228, 0, FILE_GHAND_JOAF1 }, + { /*0x0097*/ 0, 0, 0, HEADBODYTYPE_DEFAULT, 0, 0, 1, 0, 0, FILE_GCOMBATHANDSLOD }, }; u32 var8007dae4 = 0xbd8ff972; diff --git a/src/game/game_02cde0.c b/src/game/game_02cde0.c index adf4921fe..729c21385 100644 --- a/src/game/game_02cde0.c +++ b/src/game/game_02cde0.c @@ -290,7 +290,7 @@ glabel var7f1a8a84 /* f02d028: afa20054 */ sw $v0,0x54($sp) /* f02d02c: ac206680 */ sw $zero,%lo(g_FileInfo)($at) /* f02d030: 00402025 */ or $a0,$v0,$zero -/* f02d034: 0fc0b76f */ jal func0f02ddbc +/* f02d034: 0fc0b76f */ jal bodyCalculateHeadOffset /* f02d038: 8fa60048 */ lw $a2,0x48($sp) /* f02d03c: 10000014 */ b .L0f02d090 /* f02d040: 00000000 */ nop @@ -540,7 +540,7 @@ glabel var7f1a8a84 // headfiledata = fileLoad(g_HeadsAndBodies[headnum].filenum); // g_HeadsAndBodies[headnum].filedata = headfiledata; // g_FileInfo[g_HeadsAndBodies[headnum].filenum].size = 0; -// func0f02ddbc(headfiledata, headnum, bodynum); +// bodyCalculateHeadOffset(headfiledata, headnum, bodynum); // } else { // if (g_HeadsAndBodies[headnum].filedata == NULL) { // g_HeadsAndBodies[headnum].filedata = fileLoad(g_HeadsAndBodies[headnum].filenum); @@ -965,187 +965,106 @@ void func0f02ddbf(void) // empty } -GLOBAL_ASM( -glabel func0f02ddbc -.late_rodata -glabel var7f1a8a88 -.word func0f02ddbc+0x94 # f02de50 -glabel var7f1a8a8c -.word func0f02ddbc+0x84 # f02de40 -glabel var7f1a8a90 -.word func0f02ddbc+0xac # f02de68 -glabel var7f1a8a94 -.word func0f02ddbc+0x8c # f02de48 -glabel var7f1a8a98 -.word func0f02ddbc+0xa4 # f02de60 -glabel var7f1a8a9c -.word func0f02ddbc+0x9c # f02de58 -glabel var7f1a8aa0 -.word func0f02ddbc+0xd8 # f02de94 -glabel var7f1a8aa4 -.word func0f02ddbc+0xec # f02dea8 -glabel var7f1a8aa8 -.word func0f02ddbc+0xe8 # f02dea4 -glabel var7f1a8aac -.word func0f02ddbc+0xd0 # f02de8c -glabel var7f1a8ab0 -.word func0f02ddbc+0xe0 # f02de9c -glabel var7f1a8ab4 -.word func0f02ddbc+0xec # f02dea8 -.text -/* f02ddbc: 27bdffb8 */ addiu $sp,$sp,-72 -/* f02ddc0: afbf001c */ sw $ra,0x1c($sp) -/* f02ddc4: afb00018 */ sw $s0,0x18($sp) -/* f02ddc8: 848e0006 */ lh $t6,0x6($a0) -/* f02ddcc: 00a03825 */ or $a3,$a1,$zero -/* f02ddd0: 2401000d */ addiu $at,$zero,0xd -/* f02ddd4: 15c10081 */ bne $t6,$at,.L0f02dfdc -/* f02ddd8: 24050014 */ addiu $a1,$zero,0x14 -/* f02dddc: 00e50019 */ multu $a3,$a1 -/* f02dde0: 3c038008 */ lui $v1,%hi(g_HeadsAndBodies) -/* f02dde4: 2463cf04 */ addiu $v1,$v1,%lo(g_HeadsAndBodies) -/* f02dde8: 00007812 */ mflo $t7 -/* f02ddec: 006fc021 */ addu $t8,$v1,$t7 -/* f02ddf0: 8f020000 */ lw $v0,0x0($t8) -/* f02ddf4: 00c50019 */ multu $a2,$a1 -/* f02ddf8: 0002c8c0 */ sll $t9,$v0,0x3 -/* f02ddfc: 00194742 */ srl $t0,$t9,0x1d -/* f02de00: 01001025 */ or $v0,$t0,$zero -/* f02de04: 2d010006 */ sltiu $at,$t0,0x6 -/* f02de08: 00004812 */ mflo $t1 -/* f02de0c: 00695021 */ addu $t2,$v1,$t1 -/* f02de10: 8d460000 */ lw $a2,0x0($t2) -/* f02de14: 000658c0 */ sll $t3,$a2,0x3 -/* f02de18: 000b3742 */ srl $a2,$t3,0x1d -/* f02de1c: 51060070 */ beql $t0,$a2,.L0f02dfe0 -/* f02de20: 8fbf001c */ lw $ra,0x1c($sp) -/* f02de24: 10200006 */ beqz $at,.L0f02de40 -/* f02de28: 00086880 */ sll $t5,$t0,0x2 -/* f02de2c: 3c017f1b */ lui $at,%hi(var7f1a8a88) -/* f02de30: 002d0821 */ addu $at,$at,$t5 -/* f02de34: 8c2d8a88 */ lw $t5,%lo(var7f1a8a88)($at) -/* f02de38: 01a00008 */ jr $t5 -/* f02de3c: 00000000 */ nop -.L0f02de40: -/* f02de40: 1000000a */ b .L0f02de6c -/* f02de44: 00003825 */ or $a3,$zero,$zero -/* f02de48: 10000008 */ b .L0f02de6c -/* f02de4c: 00003825 */ or $a3,$zero,$zero -/* f02de50: 10000006 */ b .L0f02de6c -/* f02de54: 2407ffdd */ addiu $a3,$zero,-35 -/* f02de58: 10000004 */ b .L0f02de6c -/* f02de5c: 00003825 */ or $a3,$zero,$zero -/* f02de60: 10000002 */ b .L0f02de6c -/* f02de64: 2407ffec */ addiu $a3,$zero,-20 -/* f02de68: 2407ffd8 */ addiu $a3,$zero,-40 -.L0f02de6c: -/* f02de6c: 2cc10006 */ sltiu $at,$a2,0x6 -/* f02de70: 1020000d */ beqz $at,.L0f02dea8 -/* f02de74: 00067080 */ sll $t6,$a2,0x2 -/* f02de78: 3c017f1b */ lui $at,%hi(var7f1a8aa0) -/* f02de7c: 002e0821 */ addu $at,$at,$t6 -/* f02de80: 8c2e8aa0 */ lw $t6,%lo(var7f1a8aa0)($at) -/* f02de84: 01c00008 */ jr $t6 -/* f02de88: 00000000 */ nop -/* f02de8c: 10000006 */ b .L0f02dea8 -/* f02de90: 24e7ffe2 */ addiu $a3,$a3,-30 -/* f02de94: 10000004 */ b .L0f02dea8 -/* f02de98: 24e70023 */ addiu $a3,$a3,0x23 -/* f02de9c: 10000002 */ b .L0f02dea8 -/* f02dea0: 24e70014 */ addiu $a3,$a3,0x14 -/* f02dea4: 24e70028 */ addiu $a3,$a3,0x28 -.L0f02dea8: -/* f02dea8: 24010001 */ addiu $at,$zero,0x1 -/* f02deac: 54c1000f */ bnel $a2,$at,.L0f02deec -/* f02deb0: 24010004 */ addiu $at,$zero,0x4 -/* f02deb4: 10400003 */ beqz $v0,.L0f02dec4 -/* f02deb8: 24010005 */ addiu $at,$zero,0x5 -/* f02debc: 54410004 */ bnel $v0,$at,.L0f02ded0 -/* f02dec0: 24010004 */ addiu $at,$zero,0x4 -.L0f02dec4: -/* f02dec4: 10000010 */ b .L0f02df08 -/* f02dec8: 24e7fff6 */ addiu $a3,$a3,-10 -/* f02decc: 24010004 */ addiu $at,$zero,0x4 -.L0f02ded0: -/* f02ded0: 10410003 */ beq $v0,$at,.L0f02dee0 -/* f02ded4: 24010002 */ addiu $at,$zero,0x2 -/* f02ded8: 1441000b */ bne $v0,$at,.L0f02df08 -/* f02dedc: 00000000 */ nop -.L0f02dee0: -/* f02dee0: 10000009 */ b .L0f02df08 -/* f02dee4: 24e7fffb */ addiu $a3,$a3,-5 -/* f02dee8: 24010004 */ addiu $at,$zero,0x4 -.L0f02deec: -/* f02deec: 14c10006 */ bne $a2,$at,.L0f02df08 -/* f02def0: 00000000 */ nop -/* f02def4: 10400003 */ beqz $v0,.L0f02df04 -/* f02def8: 24010005 */ addiu $at,$zero,0x5 -/* f02defc: 14410002 */ bne $v0,$at,.L0f02df08 -/* f02df00: 00000000 */ nop -.L0f02df04: -/* f02df04: 24e7fffb */ addiu $a3,$a3,-5 -.L0f02df08: -/* f02df08: 50e00035 */ beqzl $a3,.L0f02dfe0 -/* f02df0c: 8fbf001c */ lw $ra,0x1c($sp) -/* f02df10: afa00044 */ sw $zero,0x44($sp) -/* f02df14: afa40048 */ sw $a0,0x48($sp) -/* f02df18: 8fa40048 */ lw $a0,0x48($sp) -.L0f02df1c: -/* f02df1c: 8fb00044 */ lw $s0,0x44($sp) -/* f02df20: 27a50044 */ addiu $a1,$sp,0x44 -/* f02df24: 27a6003c */ addiu $a2,$sp,0x3c -/* f02df28: 0c008c67 */ jal func0002319c -/* f02df2c: afa70038 */ sw $a3,0x38($sp) -/* f02df30: 8faf0044 */ lw $t7,0x44($sp) -/* f02df34: 8fa70038 */ lw $a3,0x38($sp) -/* f02df38: 51e00019 */ beqzl $t7,.L0f02dfa0 -/* f02df3c: 8fac0044 */ lw $t4,0x44($sp) -/* f02df40: 51f00017 */ beql $t7,$s0,.L0f02dfa0 -/* f02df44: 8fac0044 */ lw $t4,0x44($sp) -/* f02df48: 95f80000 */ lhu $t8,0x0($t7) -/* f02df4c: 24010018 */ addiu $at,$zero,0x18 -/* f02df50: 57010013 */ bnel $t8,$at,.L0f02dfa0 -/* f02df54: 8fac0044 */ lw $t4,0x44($sp) -/* f02df58: 8de50004 */ lw $a1,0x4($t7) -/* f02df5c: 00001825 */ or $v1,$zero,$zero -/* f02df60: 00002025 */ or $a0,$zero,$zero -/* f02df64: 84b90010 */ lh $t9,0x10($a1) -/* f02df68: 5b20000d */ blezl $t9,.L0f02dfa0 -/* f02df6c: 8fac0044 */ lw $t4,0x44($sp) -/* f02df70: 8ca8000c */ lw $t0,0xc($a1) -.L0f02df74: -/* f02df74: 24630001 */ addiu $v1,$v1,0x1 -/* f02df78: 01041021 */ addu $v0,$t0,$a0 -/* f02df7c: 84490002 */ lh $t1,0x2($v0) -/* f02df80: 2484000c */ addiu $a0,$a0,0xc -/* f02df84: 01275021 */ addu $t2,$t1,$a3 -/* f02df88: a44a0002 */ sh $t2,0x2($v0) -/* f02df8c: 84ab0010 */ lh $t3,0x10($a1) -/* f02df90: 006b082a */ slt $at,$v1,$t3 -/* f02df94: 5420fff7 */ bnezl $at,.L0f02df74 -/* f02df98: 8ca8000c */ lw $t0,0xc($a1) -/* f02df9c: 8fac0044 */ lw $t4,0x44($sp) -.L0f02dfa0: -/* f02dfa0: 5580ffde */ bnezl $t4,.L0f02df1c -/* f02dfa4: 8fa40048 */ lw $a0,0x48($sp) -/* f02dfa8: 8fa40048 */ lw $a0,0x48($sp) -/* f02dfac: 0fc1a25b */ jal func0f06896c -/* f02dfb0: afa70038 */ sw $a3,0x38($sp) -/* f02dfb4: 10400009 */ beqz $v0,.L0f02dfdc -/* f02dfb8: 8fa70038 */ lw $a3,0x38($sp) -/* f02dfbc: 44872000 */ mtc1 $a3,$f4 -/* f02dfc0: c446000c */ lwc1 $f6,0xc($v0) -/* f02dfc4: c44a0010 */ lwc1 $f10,0x10($v0) -/* f02dfc8: 46802020 */ cvt.s.w $f0,$f4 -/* f02dfcc: 46003200 */ add.s $f8,$f6,$f0 -/* f02dfd0: 46005400 */ add.s $f16,$f10,$f0 -/* f02dfd4: e448000c */ swc1 $f8,0xc($v0) -/* f02dfd8: e4500010 */ swc1 $f16,0x10($v0) -.L0f02dfdc: -/* f02dfdc: 8fbf001c */ lw $ra,0x1c($sp) -.L0f02dfe0: -/* f02dfe0: 8fb00018 */ lw $s0,0x18($sp) -/* f02dfe4: 27bd0048 */ addiu $sp,$sp,0x48 -/* f02dfe8: 03e00008 */ jr $ra -/* f02dfec: 00000000 */ nop -); +/** + * Tweak the head's Y offset to suit the body. + * + * By default, heads and their matching bodies align perfectly and don't need + * any tweaking. This function is used in multiplier where players can put any + * heads on any bodies. + */ +void bodyCalculateHeadOffset(struct modelfiledata *headfiledata, s32 headnum, s32 bodynum) +{ + struct modelnode *node; + struct modelnode *prev; + Gfx *gdl; + s32 offset; + struct modelrodata_bbox *bbox; + s32 i; + + if ((s16)(*(s32 *)&headfiledata->type) == MODELTYPE_HEAD) { + if (g_HeadsAndBodies[headnum].type == g_HeadsAndBodies[bodynum].type) { + return; + } + + switch (g_HeadsAndBodies[headnum].type) { + default: + case HEADBODYTYPE_FEMALE: + offset = 0; + break; + case HEADBODYTYPE_MAIAN: + offset = 0; + break; + case HEADBODYTYPE_DEFAULT: + offset = -35; + break; + case HEADBODYTYPE_MRBLONDE: + offset = 0; + break; + case HEADBODYTYPE_CASS: + offset = -20; + break; + case HEADBODYTYPE_FEMALEGUARD: + offset = -40; + break; + } + + switch (g_HeadsAndBodies[bodynum].type) { + case HEADBODYTYPE_FEMALE: + break; + case HEADBODYTYPE_MAIAN: + offset -= 30; + break; + case HEADBODYTYPE_DEFAULT: + offset += 35; + break; + case HEADBODYTYPE_MRBLONDE: + break; + case HEADBODYTYPE_CASS: + offset += 20; + break; + case HEADBODYTYPE_FEMALEGUARD: + offset += 40; + break; + } + + if (g_HeadsAndBodies[bodynum].type == HEADBODYTYPE_FEMALE) { + if (g_HeadsAndBodies[headnum].type == HEADBODYTYPE_DEFAULT + || g_HeadsAndBodies[headnum].type == HEADBODYTYPE_MRBLONDE) { + offset -= 10; + } else if (g_HeadsAndBodies[headnum].type == HEADBODYTYPE_CASS + || g_HeadsAndBodies[headnum].type == HEADBODYTYPE_FEMALEGUARD) { + offset -= 5; + } + } else if (g_HeadsAndBodies[bodynum].type == HEADBODYTYPE_CASS + && (g_HeadsAndBodies[headnum].type == HEADBODYTYPE_DEFAULT + || g_HeadsAndBodies[headnum].type == HEADBODYTYPE_MRBLONDE)) { + offset -= 5; + } + + // Apply the offset + if (offset != 0) { + node = NULL; + + do { + prev = node; + + modelIterateDisplayLists(headfiledata, &node, &gdl); + + if (node && node != prev && node->type == MODELNODETYPE_DL) { + struct modelrodata_dl *rodata = &node->rodata->dl; + + for (i = 0; i < rodata->pcount; i++) { + rodata->ptable[i].unk02 += offset; + } + } + } while (node); + + bbox = func0f06896c(headfiledata); + + if (bbox != NULL) { + bbox->ymin += offset; + bbox->ymax += offset; + } + } + } +} diff --git a/src/game/game_0b69d0.c b/src/game/game_0b69d0.c index f144cb981..c76e85e3d 100644 --- a/src/game/game_0b69d0.c +++ b/src/game/game_0b69d0.c @@ -2103,7 +2103,7 @@ glabel var7f1ad5b4 /* f0b9148: ac206680 */ sw $zero,%lo(g_FileInfo)($at) /* f0b914c: 00402025 */ or $a0,$v0,$zero /* f0b9150: 8fa50064 */ lw $a1,0x64($sp) -/* f0b9154: 0fc0b76f */ jal func0f02ddbc +/* f0b9154: 0fc0b76f */ jal bodyCalculateHeadOffset /* f0b9158: 8fa60068 */ lw $a2,0x68($sp) /* f0b915c: 10000017 */ b .L0f0b91bc /* f0b9160: 8fae005c */ lw $t6,0x5c($sp) @@ -2761,7 +2761,7 @@ glabel var7f1ad5b4 /* f0b6e60: ac20af40 */ sw $zero,-0x50c0($at) /* f0b6e64: 00402025 */ or $a0,$v0,$zero /* f0b6e68: 8fa50064 */ lw $a1,0x64($sp) -/* f0b6e6c: 0fc0b5be */ jal func0f02ddbc +/* f0b6e6c: 0fc0b5be */ jal bodyCalculateHeadOffset /* f0b6e70: 8fa60068 */ lw $a2,0x68($sp) /* f0b6e74: 10000017 */ beqz $zero,.NB0f0b6ed4 /* f0b6e78: 8fae005c */ lw $t6,0x5c($sp) diff --git a/src/game/game_0f09f0.c b/src/game/game_0f09f0.c index bd2c3adbf..8ba0bf7e3 100644 --- a/src/game/game_0f09f0.c +++ b/src/game/game_0f09f0.c @@ -5406,7 +5406,7 @@ glabel var7f1b3c40pf /* f0f42f8: 8fa40040 */ lw $a0,0x40($sp) /* f0f42fc: 8e040058 */ lw $a0,0x58($s0) /* f0f4300: 8fa50400 */ lw $a1,0x400($sp) -/* f0f4304: 0fc0b7b7 */ jal func0f02ddbc +/* f0f4304: 0fc0b7b7 */ jal bodyCalculateHeadOffset /* f0f4308: 8fa60404 */ lw $a2,0x404($sp) /* f0f430c: 0c00898a */ jal modelCalculateRwDataLen /* f0f4310: 8e040058 */ lw $a0,0x58($s0) @@ -7008,7 +7008,7 @@ glabel var7f1b2948 /* f0f3ba4: 8fa40040 */ lw $a0,0x40($sp) /* f0f3ba8: 8e040058 */ lw $a0,0x58($s0) /* f0f3bac: 8fa50400 */ lw $a1,0x400($sp) -/* f0f3bb0: 0fc0b76f */ jal func0f02ddbc +/* f0f3bb0: 0fc0b76f */ jal bodyCalculateHeadOffset /* f0f3bb4: 8fa60404 */ lw $a2,0x404($sp) /* f0f3bb8: 0c008b49 */ jal modelCalculateRwDataLen /* f0f3bbc: 8e040058 */ lw $a0,0x58($s0) @@ -8617,7 +8617,7 @@ glabel var7f1b2948 /* f0f06e8: 8fa40044 */ lw $a0,0x44($sp) /* f0f06ec: 8e240058 */ lw $a0,0x58($s1) /* f0f06f0: 8fa50428 */ lw $a1,0x428($sp) -/* f0f06f4: 0fc0b5be */ jal func0f02ddbc +/* f0f06f4: 0fc0b5be */ jal bodyCalculateHeadOffset /* f0f06f8: 8fa6042c */ lw $a2,0x42c($sp) /* f0f06fc: 0c008f6f */ jal modelCalculateRwDataLen /* f0f0700: 8e240058 */ lw $a0,0x58($s1) diff --git a/src/game/game_1a7560.c b/src/game/game_1a7560.c index 6d8edb5b4..087f9f366 100644 --- a/src/game/game_1a7560.c +++ b/src/game/game_1a7560.c @@ -133,7 +133,7 @@ glabel func0f1a7560 /* f1a75b8: afa00074 */ sw $zero,0x74($sp) /* f1a75bc: 02602025 */ or $a0,$s3,$zero /* f1a75c0: 27a50074 */ addiu $a1,$sp,0x74 -/* f1a75c4: 0c008c67 */ jal func0002319c +/* f1a75c4: 0c008c67 */ jal modelIterateDisplayLists /* f1a75c8: 27a6006c */ addiu $a2,$sp,0x6c /* f1a75cc: 8fb6006c */ lw $s6,0x6c($sp) /* f1a75d0: 3c1700ff */ lui $s7,0xff @@ -165,7 +165,7 @@ glabel func0f1a7560 /* f1a7634: 8fb10074 */ lw $s1,0x74($sp) /* f1a7638: 02602025 */ or $a0,$s3,$zero /* f1a763c: 27a50074 */ addiu $a1,$sp,0x74 -/* f1a7640: 0c008c67 */ jal func0002319c +/* f1a7640: 0c008c67 */ jal modelIterateDisplayLists /* f1a7644: 27a6006c */ addiu $a2,$sp,0x6c /* f1a7648: 8fb6006c */ lw $s6,0x6c($sp) /* f1a764c: 02602025 */ or $a0,$s3,$zero diff --git a/src/include/constants.h b/src/include/constants.h index 1c71999df..dbd5240ce 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -1043,6 +1043,13 @@ #define HATTYPE_METAL 3 #define HATTYPE_CLOTH 5 +#define HEADBODYTYPE_DEFAULT 0 +#define HEADBODYTYPE_FEMALE 1 +#define HEADBODYTYPE_FEMALEGUARD 2 +#define HEADBODYTYPE_MAIAN 3 +#define HEADBODYTYPE_CASS 4 +#define HEADBODYTYPE_MRBLONDE 5 + #define HEALTHSHOWMODE_HIDDEN 0 // health bar not visible #define HEALTHSHOWMODE_OPENING 1 // height expanding #define HEALTHSHOWMODE_PREVIOUS 2 // full height, showing previous health amount diff --git a/src/include/game/game_02cde0.h b/src/include/game/game_02cde0.h index 20ce32cdc..54c6d58bb 100644 --- a/src/include/game/game_02cde0.h +++ b/src/include/game/game_02cde0.h @@ -13,6 +13,6 @@ s32 func0f02d3f8(void); s32 bodyChooseHead(s32 bodynum); void chrUnpack(s32 stagenum, struct packedchr *packed, s32 cmdindex); struct prop *propAllocateEyespy(struct pad *pad, s16 room); -void func0f02ddbc(struct modelfiledata *headfiledata, s32 headnum, s32 bodynum); +void bodyCalculateHeadOffset(struct modelfiledata *headfiledata, s32 headnum, s32 bodynum); #endif diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index 5f6723ad2..ed11b76aa 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -78,7 +78,7 @@ s32 func0f068760(struct defaultobj *obj); s32 func0f0687b8(struct defaultobj *obj); struct modelnode *func0f0687e4(struct model *model); u32 func0f0688f4(void); -f32 *func0f06896c(void *modelfiledata); +struct modelrodata_bbox *func0f06896c(struct modelfiledata *filedata); u32 func0f068998(void); struct model08thing *func0f068aa8(struct model *model); u32 func0f068ad4(void); diff --git a/src/include/lib/model.h b/src/include/lib/model.h index 1d14aeb52..18c728c3d 100644 --- a/src/include/lib/model.h +++ b/src/include/lib/model.h @@ -99,7 +99,7 @@ void modelInitRwData(struct model *model, struct modelnode *node); void modelInit(struct model *model, struct modelfiledata *filedata, union modelrwdata **rwdatas, bool resetanim); void animInit(struct anim *anim); u32 func00023108(void); -void func0002319c(struct modelfiledata *filedata, struct modelfiledata *filedataptr, Gfx **gdlptr); +void modelIterateDisplayLists(struct modelfiledata *filedata, struct modelnode **nodeptr, Gfx **gdlptr); void modelNodeReplaceGdl(u32 arg0, struct modelnode *node, Gfx *find, Gfx *replacement); #endif diff --git a/src/include/types.h b/src/include/types.h index 2488fd46e..d869d1a1d 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -642,11 +642,20 @@ struct modelrodata_headspot { // type 0x17 u16 rwdataindex; }; +struct ptableentry { + s16 unk00; + s16 unk02; + s16 unk04; + s16 unk06; + s16 unk08; + s16 unk0a; +}; + struct modelrodata_dl { // type 0x18 /*0x00*/ Gfx *primary; /*0x04*/ Gfx *secondary; /*0x08*/ u32 *colourtable; - /*0x0c*/ struct coord *ptable; + /*0x0c*/ struct ptableentry *ptable; /*0x10*/ s16 pcount; /*0x12*/ s16 mcount; /*0x14*/ u16 rwdataindex; @@ -760,7 +769,7 @@ struct modelrwdata_headspot { // type 0x17 }; struct modelrwdata_dl { // type 0x18 - struct coord *ptable; + struct ptableentry *ptable; Gfx *gdl; u32 *unk08; }; @@ -3249,7 +3258,7 @@ struct headorbody { /*0x00*/ u16 ismale : 1; /*0x00*/ u16 unk00_01 : 1; /*0x00*/ u16 canvaryheight : 1; - /*0x00*/ u16 unk00_03 : 3; + /*0x00*/ u16 type : 3; /*0x00*/ u16 height : 8; /*0x02*/ u16 filenum; /*0x04*/ f32 scale; diff --git a/src/lib/model.c b/src/lib/model.c index 3a3723231..18bcdef49 100644 --- a/src/lib/model.c +++ b/src/lib/model.c @@ -6599,9 +6599,21 @@ glabel func00023108 /* 23198: 00000000 */ nop ); -void func0002319c(struct modelfiledata *filedata, struct modelfiledata *filedataptr, Gfx **gdlptr) +/** + * This function can be called repeatedly to iterate a model's display lists. + * + * On the first call, the value passed as nodeptr should point to a NULL value. + * Each time the function is called, it will update *gdlptr to point to the next + * display list, and will update *nodeptr to point to the current node. On + * subsequent calls, the same values should be passed as nodeptr and gdlptr so + * the function can continue correctly. + * + * Note that some node types support multiple display lists, so the function + * may return the same node while it iterates the display lists for that node. + */ +void modelIterateDisplayLists(struct modelfiledata *filedata, struct modelnode **nodeptr, Gfx **gdlptr) { - struct modelnode *node = filedataptr->rootnode; + struct modelnode *node = *nodeptr; union modelrodata *rodata; Gfx *gdl = NULL; @@ -6616,7 +6628,7 @@ void func0002319c(struct modelfiledata *filedata, struct modelfiledata *filedata case MODELNODETYPE_GUNDL: rodata = node->rodata; - if (node != filedataptr->rootnode) { + if (node != *nodeptr) { gdl = rodata->gundl.primary; } else if (rodata->gundl.secondary != *gdlptr) { gdl = rodata->gundl.secondary; @@ -6625,7 +6637,7 @@ void func0002319c(struct modelfiledata *filedata, struct modelfiledata *filedata case MODELNODETYPE_DL: rodata = node->rodata; - if (node != filedataptr->rootnode) { + if (node != *nodeptr) { gdl = rodata->dl.primary; } else if (rodata->dl.secondary != *gdlptr) { gdl = rodata->dl.secondary; @@ -6634,7 +6646,7 @@ void func0002319c(struct modelfiledata *filedata, struct modelfiledata *filedata case MODELNODETYPE_16: rodata = node->rodata; - if (node != filedataptr->rootnode) { + if (node != *nodeptr) { gdl = rodata->type16.unk08; } break; @@ -6670,7 +6682,7 @@ void func0002319c(struct modelfiledata *filedata, struct modelfiledata *filedata } *gdlptr = gdl; - filedataptr->rootnode = node; + *nodeptr = node; } void modelNodeReplaceGdl(u32 arg0, struct modelnode *node, Gfx *find, Gfx *replacement) diff --git a/src/lib/ultra/audio/csplayer.c b/src/lib/ultra/audio/csplayer.c index 96ab926c4..176c998fe 100644 --- a/src/lib/ultra/audio/csplayer.c +++ b/src/lib/ultra/audio/csplayer.c @@ -35,9 +35,6 @@ u32 var8009c374; u32 var8009c378; u32 var8009c37c; u32 var8009c380; -u32 var8009c384; -u32 var8009c388; -u32 var8009c38c; u32 var8005f150 = 0x00000000; u32 var8005f154 = 0x00002710;