Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
ManGen.txt322 linesDownload Raw Back to GrModels
1 2//Makes a mesh man.3 4#define VERTICES_NUM    10245#define TRIS_NUM        10246 7class Man8{9  I32 vertex_cnt;10  I32 tri_cnt;11  CD3I32   v[VERTICES_NUM];12  CMeshTri t[TRIS_NUM];13} *m;14 15class ManDefineStruct16{17  F64 head_rad   format18        "$DA-TRM,A=\"Head Radius                :%8.3f\"$\n";19 20  F64 torso_len  format21        "$DA-TRM,A=\"Torso Length               :%8.3f\"$\n";22  F64 arm_len    format23        "$DA-TRM,A=\"Arm Length                 :%8.3f\"$\n";24  F64 hand_len   format25        "$DA-TRM,A=\"Hand Length                :%8.3f\"$\n";26  F64 leg_len    format27        "$DA-TRM,A=\"Leg Length                 :%8.3f\"$\n";28  F64 foot_len   format29        "$DA-TRM,A=\"Foot Length                :%8.3f\"$\n";30  F64 torso_width format31        "$DA-TRM,A=\"Torso Width                :%8.3f\"$\n";32  F64 torso_depth format33        "$DA-TRM,A=\"Torso Depth                :%8.3f\"$\n";34  F64 arm_rad    format35        "$DA-TRM,A=\"Arm Radius                 :%8.3f\"$\n";36  F64 hand_rad   format37        "$DA-TRM,A=\"Hand Radius                :%8.3f\"$\n";38  F64 leg_rad    format39        "$DA-TRM,A=\"Leg Radius                 :%8.3f\"$\n";40  F64 foot_rad   format41        "$DA-TRM,A=\"Foot Radius                :%8.3f\"$\n\n";42 43  F64 r_shoulder_a1      format44        "$DA-TRM,A=\"R.Shoulder Front/Back Angle:%8.3f\"$\n";45  F64 l_shoulder_a1      format46        "$DA-TRM,A=\"L.Shoulder Front/Back Angle:%8.3f\"$\n";47  F64 r_hip_a1   format48        "$DA-TRM,A=\"R.Hip Front/Back Angle     :%8.3f\"$\n";49  F64 l_hip_a1   format50        "$DA-TRM,A=\"L.Hip Front/Back Angle     :%8.3f\"$\n";51 52  F64 r_shoulder_a2      format53        "$DA-TRM,A=\"R.Shoulder Side Angle      :%8.3f\"$\n";54  F64 l_shoulder_a2      format55        "$DA-TRM,A=\"L.Shoulder Side Angle      :%8.3f\"$\n";56  F64 r_hip_a2   format57        "$DA-TRM,A=\"R.Hip Side Angle           :%8.3f\"$\n";58  F64 l_hip_a2   format59        "$DA-TRM,A=\"L.Hip Side Angle           :%8.3f\"$\n";60 61  F64 r_elbow_a  format62        "$DA-TRM,A=\"R.Elbow Angle              :%8.3f\"$\n";63  F64 l_elbow_a  format64        "$DA-TRM,A=\"L.Elbow Angle              :%8.3f\"$\n";65  F64 r_knee_a   format66        "$DA-TRM,A=\"R.Knee Angle               :%8.3f\"$\n";67  F64 l_knee_a   format68        "$DA-TRM,A=\"L.Knee Angle               :%8.3f\"$\n";69 70  F64 r_wrist_a  format71        "$DA-TRM,A=\"R.Wrist Angle              :%8.3f\"$\n";72  F64 l_wrist_a  format73        "$DA-TRM,A=\"L.Wrist Angle              :%8.3f\"$\n";74  F64 r_ankle_a  format75        "$DA-TRM,A=\"R.Ankle Angle              :%8.3f\"$\n";76  F64 l_ankle_a  format77        "$DA-TRM,A=\"L.Ankle Angle              :%8.3f\"$\n";78 79};80 81U0 MDInit(ManDefineStruct *md)82{83  MemSet(md,0,sizeof(ManDefineStruct));84 85  md->head_rad  =5.0;86 87  md->torso_len =35.0;88  md->arm_len   =30.0;89  md->hand_len  =8.0;90  md->leg_len   =32.0;91  md->foot_len  =16.0;92  md->torso_width=20.0;93  md->torso_depth=10.0;94  md->arm_rad   =3.5;95  md->hand_rad  =2.0;96  md->leg_rad   =4.0;97  md->foot_rad  =3.0;98 99  md->r_shoulder_a1     =30;100  md->l_shoulder_a1     =-30;101  md->r_hip_a1  =-45;102  md->l_hip_a1  =45;103 104  md->r_shoulder_a2     =10;105  md->l_shoulder_a2     =10;106  md->r_hip_a2  =-5;107  md->l_hip_a2  =-5;108 109  md->r_elbow_a =30;110  md->l_elbow_a =0;111  md->r_knee_a  =0;112  md->l_knee_a  =30;113 114  md->r_wrist_a =0;115  md->l_wrist_a =0;116  md->r_ankle_a =0;117  md->l_ankle_a =0;118}119 120U0 MDCorrect(ManDefineStruct *md)121{122  md->r_ankle_a    =-md->r_ankle_a;123  md->l_ankle_a    =-md->l_ankle_a;124  md->r_knee_a    =-md->r_knee_a;125  md->l_knee_a    =-md->l_knee_a;126  md->r_hip_a2     =-md->r_hip_a2;127  md->r_shoulder_a2=-md->r_shoulder_a2;128  md->r_ankle_a+=90;129  md->l_ankle_a+=90;130 131  md->foot_len-=md->leg_rad;132 133  md->r_elbow_a+=md->r_shoulder_a1;134  md->l_elbow_a+=md->l_shoulder_a1;135  md->r_knee_a+=md->r_hip_a1;136  md->l_knee_a+=md->l_hip_a1;137 138  md->r_wrist_a+=md->r_elbow_a;139  md->l_wrist_a+=md->l_elbow_a;140  md->r_ankle_a+=md->r_knee_a;141  md->l_ankle_a+=md->l_knee_a;142}143 144I64 AddVertex(ManDefineStruct *md,I64 x,I64 y,I64 z)145{146  I64 res=m->vertex_cnt++;147  m->v[res].x=-x;148  m->v[res].y=-y-md->leg_len-md->foot_rad*2;149  m->v[res].z=-z;150  return res;151}152 153I64 AddTri(ManDefineStruct *,I64 c,I64 n0,I64 n1,I64 n2)154{155  I64 res=m->tri_cnt++;156  m->t[res].color=c;157  m->t[res].nums[0]=n1;158  m->t[res].nums[1]=n0;159  m->t[res].nums[2]=n2;160  return res;161}162 163U0 AddBox(ManDefineStruct *md,I64 c,I64 x1,I64 y1,I64 z1,164        F64 w,F64 h,F64 d,F64 h2,F64 h3,F64 az,F64 ay,F64 ax,165        I64 *ox,I64 *oy,I64 *oz)166{167  I64 *r;168  I64 p1a,p2a,p3a,p4a;169  I64 p1b,p2b,p3b,p4b;170  I64 wx=w/2,wy=0,wz=0,hx=0,hy=h,hz=0,h2x=0,h2y=h2,h2z=0,171        h3x=0,h3y=h3,h3z=0,dx=0,dy=0,dz=d/2;172 173  r=Mat4x4IdentNew;174  Mat4x4RotZ(r,az*pi/180.0);175  Mat4x4RotY(r,ay*pi/180.0);176  Mat4x4RotX(r,ax*pi/180.0);177  Mat4x4MulXYZ(r,&wx,&wy,&wz);178  Mat4x4MulXYZ(r,&hx,&hy,&hz);179  Mat4x4MulXYZ(r,&h2x,&h2y,&h2z);180  Mat4x4MulXYZ(r,&h3x,&h3y,&h3z);181  Mat4x4MulXYZ(r,&dx,&dy,&dz);182 183  p1a=AddVertex(md,x1+dx        -wx+h2x,y1+dy   -wy+h2y,z1+dz   -wz+h2z);184  p2a=AddVertex(md,x1+dx        +wx+h2x,y1+dy   +wy+h2y,z1+dz   +wz+h2z);185  p3a=AddVertex(md,x1+dx+hx-wx    ,y1+dy+hy-wy    ,z1+dz+hz-wz);186  p4a=AddVertex(md,x1+dx+hx+wx    ,y1+dy+hy+wy    ,z1+dz+hz+wz);187  AddTri(md,c,p1a,p2a,p3a);188  AddTri(md,c,p4a,p3a,p2a);189 190  p1b=AddVertex(md,x1-dx        -wx+h2x,y1-dy   -wy+h2y,z1-dz   -wz+h2z);191  p2b=AddVertex(md,x1-dx        +wx+h2x,y1-dy   +wy+h2y,z1-dz   +wz+h2z);192  p3b=AddVertex(md,x1-dx+hx-wx    ,y1-dy+hy-wy    ,z1-dz+hz-wz);193  p4b=AddVertex(md,x1-dx+hx+wx    ,y1-dy+hy+wy    ,z1-dz+hz+wz);194  AddTri(md,c,p1b,p2b,p3b);195  AddTri(md,c,p4b,p3b,p2b);196 197  AddTri(md,c,p1a,p2a,p1b);198  AddTri(md,c,p2b,p1b,p2a);199  AddTri(md,c,p3a,p4a,p3b);200  AddTri(md,c,p4b,p3b,p4a);201  AddTri(md,c,p1a,p3a,p1b);202  AddTri(md,c,p3b,p1b,p3a);203  AddTri(md,c,p2a,p4a,p2b);204  AddTri(md,c,p4b,p2b,p4a);205 206  *ox=x1+hx-h3x;207  *oy=y1+hy-h3y;208  *oz=z1+hz-h3z;209 210  Free(r);211}212 213U8 *Man2CSprite()214{215//See ::/Adam/Gr/GrSpritePlot.HC for how CSprite are stored.216  U8 *res=MAlloc(sizeof(CSpriteMeshU8s)+217        m->vertex_cnt*sizeof(CD3I32)+m->tri_cnt*sizeof(CMeshTri)+218        sprite_elem_base_sizes[SPT_END]),219        *dst=res;220  *dst++ =SPT_MESH;221  *dst(I32 *)++ =m->vertex_cnt;222  *dst(I32 *)++ =m->tri_cnt;223  MemCpy(dst,&m->v,m->vertex_cnt*sizeof(CD3I32));224  dst+=m->vertex_cnt*sizeof(CD3I32);225  MemCpy(dst,&m->t,m->tri_cnt*sizeof(CMeshTri));226  dst+=m->tri_cnt*sizeof(CMeshTri);227  *dst++ =SPT_END;228  return res;229}230 231public U8 *ManGen()232{233  U8 *res;234  I64 x,y,z,c1,c2,c3,c4;235  ManDefineStruct md1,md2;236  MDInit(&md1);237 238  while (TRUE) {239    if (!DocForm(&md1))240      return NULL;241    MemCpy(&md2,&md1,sizeof(ManDefineStruct));242    MDCorrect(&md2);243 244    c1=PopUpColorLighting("$BK,1$Shirt$BK,0$\n");245    if (c1<0) return NULL;246    c2=PopUpColorLighting("$BK,1$Pants$BK,0$\n");247    if (c2<0) return NULL;248    c3=PopUpColorLighting("$BK,1$Skin$BK,0$\n");249    if (c3<0) return NULL;250    c4=PopUpColorLighting("$BK,1$Shoes$BK,0$\n");251    if (c4<0) return NULL;252 253    m=CAlloc(sizeof(Man));254 255    //Head256    AddBox(&md2,c3,0,md2.torso_len+md2.head_rad*2,0,257          md2.head_rad*2,-md2.head_rad*2,md2.head_rad*2,0,0, 0,0,0,258          &x,&y,&z);259 260    //Torso261    AddBox(&md2,c1,0,md2.torso_len,0,262          md2.torso_width,-md2.torso_len,md2.torso_depth,0,0, 0,0,0,263          &x,&y,&z);264 265    //Right Arm266    AddBox(&md2,c1,-md2.torso_width/2-md2.arm_rad,md2.torso_len-md2.arm_rad,0,267          md2.arm_rad*2,-md2.arm_len/2,md2.arm_rad*2,md2.arm_rad,0,268          md2.r_shoulder_a2,0,md2.r_shoulder_a1,&x,&y,&z);269    AddBox(&md2,c3,x,y,z,270          md2.arm_rad*2,-md2.arm_len/2,md2.arm_rad*2,0,0,271          md2.r_shoulder_a2,0,md2.r_elbow_a,&x,&y,&z);272    AddBox(&md2,c3,x,y,z,273          md2.arm_rad*2,-md2.hand_len,md2.hand_rad*2,0,0,274          md2.r_shoulder_a2,0,md2.r_wrist_a,&x,&y,&z);275 276    //Left Arm277    AddBox(&md2,c1,md2.torso_width/2+md2.arm_rad,md2.torso_len-md2.arm_rad,0,278          md2.arm_rad*2,-md2.arm_len/2,md2.arm_rad*2,md2.arm_rad,0,279          md2.l_shoulder_a2,0,md2.l_shoulder_a1,&x,&y,&z);280    AddBox(&md2,c3,x,y,z,281          md2.arm_rad*2,-md2.arm_len/2,md2.arm_rad*2,0,0,282          md2.l_shoulder_a2,0,md2.l_elbow_a,&x,&y,&z);283    AddBox(&md2,c3,x,y,z,284          md2.arm_rad*2,-md2.hand_len,md2.hand_rad*2,0,0,285          md2.l_shoulder_a2,0,md2.l_wrist_a,&x,&y,&z);286 287    //Right Leg288    AddBox(&md2,c2,-md2.torso_width/2+md2.leg_rad,0,0,289          md2.leg_rad*2,-md2.leg_len/2,md2.leg_rad*2,0,0,290          md2.r_hip_a2,0,md2.r_hip_a1,&x,&y,&z);291    AddBox(&md2,c3,x,y,z,292          md2.leg_rad*2,-md2.leg_len/2,md2.leg_rad*2,0,md2.foot_rad,293          md2.r_hip_a2,0,md2.r_knee_a,&x,&y,&z);294    AddBox(&md2,c4,x,y,z,295          md2.leg_rad*2,-md2.foot_len,md2.foot_rad*2,md2.leg_rad,0,296          md2.r_hip_a2,0,md2.r_ankle_a,&x,&y,&z);297 298    //Left Leg299    AddBox(&md2,c2,md2.torso_width/2-md2.leg_rad,0,0,300          md2.leg_rad*2,-md2.leg_len/2,md2.leg_rad*2,0,0,301          md2.l_hip_a2,0,md2.l_hip_a1,&x,&y,&z);302    AddBox(&md2,c3,x,y,z,303          md2.leg_rad*2,-md2.leg_len/2,md2.leg_rad*2,0,md2.foot_rad,304          md2.l_hip_a2,0,md2.l_knee_a,&x,&y,&z);305    AddBox(&md2,c4,x,y,z,306          md2.leg_rad*2,-md2.foot_len,md2.foot_rad*2,md2.leg_rad,0,307          md2.l_hip_a2,0,md2.l_ankle_a,&x,&y,&z);308 309    res=Man2CSprite;310    "%h7c",'\n';311    Sprite(res,"\t\t$SP,\"<1>\",BI=%d$");312    "%h7c",'\n';313    Free(m);314    "Do another";315    if (YorN)316      Free(res);317    else318      break;319  }320  return res;321}322