Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 17th, 2012  |  syntax: None  |  size: 65.89 KB  |  hits: 17  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. void __cdecl sub_89289C0(int unit)
  2. {
  3.   int unit; // esi@1
  4.   int unf_vec_end; // eax@3
  5.   int v3; // edx@3
  6.   int v4; // edx@4
  7.   int unf_vec_start; // ecx@4
  8.   int item_id; // edi@5
  9.   signed int v7; // edx@7
  10.   signed int v8; // eax@8
  11.   int item; // ebx@8
  12.   int v10; // esi@8
  13.   int v11; // ecx@10
  14.   char v12; // sf@16
  15.   void *in_inventory_vec; // edx@18
  16.   int v14; // eax@22
  17.   int squad_index; // ecx@22
  18.   void *v16; // ebp@22
  19.   signed int v17; // edx@24
  20.   signed int v18; // eax@25
  21.   int v19; // ebx@25
  22.   int squad; // edi@25
  23.   void *v21; // eax@34
  24.   __int16 v22; // bx@34
  25.   __int16 v23; // ax@34
  26.   __int16 v24; // bx@34
  27.   __int16 v25; // ax@34
  28.   __int16 v26; // bx@34
  29.   __int16 v27; // ax@34
  30.   int v28; // eax@34
  31.   int v29; // ebx@34
  32.   __int16 v30; // ax@34
  33.   int v31; // ebp@36
  34.   char *v32; // edx@37
  35.   int v33; // ecx@37
  36.   char *v34; // ecx@38
  37.   unsigned int v35; // edx@43
  38.   int v36; // eax@52
  39.   int v37; // ebx@52
  40.   void *v38; // edi@52
  41.   int cur_uniform_start; // ecx@52
  42.   int cur_uniform_end; // eax@52
  43.   int v41; // eax@54
  44.   int v42; // ebp@54
  45.   void *v43; // edx@57
  46.   unsigned int v44; // ecx@57
  47.   unsigned int v45; // ebp@60
  48.   unsigned int v46; // ebp@60
  49.   unsigned int v47; // eax@61
  50.   int _EDI; // edi@61
  51.   unsigned int _ECX; // ecx@62
  52.   int v50; // eax@65
  53.   int needs_pickup_id_vec; // ebp@65
  54.   int v52; // edi@66
  55.   int inv_mode; // eax@67
  56.   int inv_item; // ebx@67
  57.   int v55; // eax@76
  58.   int v56; // edx@76
  59.   int v57; // ebx@76
  60.   int v58; // eax@76
  61.   int v59; // ebx@83
  62.   int v60; // eax@86
  63.   int v61; // eax@93
  64.   char v62; // sf@95
  65.   int weapon_skill; // edx@97
  66.   unsigned __int8 is_hunter; // cl@97
  67.   int v65; // eax@99
  68.   int v66; // eax@100
  69.   int item_id; // edi@101
  70.   signed int v68; // edx@103
  71.   signed int v69; // eax@104
  72.   int item; // ebx@104
  73.   int item_id2; // esi@104
  74.   int v72; // ecx@106
  75.   char v73; // sf@112
  76.   int item_id; // edx@114
  77.   int v75; // eax@115
  78.   int v76; // ecx@115
  79.   int v77; // ebp@115
  80.   int v78; // ecx@116
  81.   int v79; // eax@117
  82.   unsigned int v80; // eax@121
  83.   int v81; // edx@122
  84.   char v82; // sf@129
  85.   int v83; // eax@132
  86.   int v84; // edx@132
  87.   int unit; // edx@133
  88.   int v86; // edi@133
  89.   char v87; // sf@134
  90.   int item; // ebx@136
  91.   __int16 race; // si@136
  92.   __int16 v90; // bp@136
  93.   __int16 v91; // ST30_2@136
  94.   __int16 item_type; // ax@136
  95.   int v93; // eax@136
  96.   char v94; // al@137
  97.   int item_id; // ecx@139
  98.   signed int v96; // eax@140
  99.   signed int v97; // eax@141
  100.   int v98; // esi@141
  101.   int v99; // esi@143
  102.   int v100; // esi@145
  103.   int v101; // eax@151
  104.   int v102; // edx@153
  105.   int v103; // ecx@153
  106.   int v104; // ecx@154
  107.   int v105; // eax@155
  108.   signed int v106; // edx@155
  109.   int v107; // ebp@155
  110.   int v108; // edi@155
  111.   signed int v109; // edx@155
  112.   int v110; // ebx@157
  113.   int v111; // edx@159
  114.   int v112; // ecx@159
  115.   int v113; // esi@159
  116.   int v114; // edx@162
  117.   int v115; // ecx@162
  118.   int v116; // ecx@163
  119.   int v117; // ebp@165
  120.   int v118; // edi@165
  121.   int v119; // ebx@167
  122.   int v120; // edx@169
  123.   unsigned int v121; // eax@173
  124.   int v122; // edx@174
  125.   int v123; // eax@181
  126.   int v124; // edx@181
  127.   int v125; // edi@182
  128.   int item; // ebx@183
  129.   __int16 v127; // ST2C_2@183
  130.   __int16 v128; // bp@183
  131.   __int16 v129; // ST30_2@183
  132.   __int16 item_type; // ax@183
  133.   int item_id; // edx@188
  134.   int v132; // eax@191
  135.   int v133; // ebp@191
  136.   signed int v134; // eax@196
  137.   signed int v135; // edx@196
  138.   signed int v136; // ecx@196
  139.   int v137; // eax@196
  140.   int v138; // eax@196
  141.   int v139; // ebx@196
  142.   char v140; // sf@202
  143.   int v141; // eax@204
  144.   unsigned int v142; // eax@208
  145.   int v143; // edx@209
  146.   int v144; // eax@216
  147.   int v145; // eax@221
  148.   int v146; // edx@221
  149.   char v147; // sf@223
  150.   int v148; // eax@226
  151.   int v149; // ebp@226
  152.   int squad_index0; // edi@226
  153.   int squad_index1; // ebx@227
  154.   int squad_index2; // eax@231
  155.   int squad_index3; // esi@231
  156.   int squad_index4; // edx@233
  157.   int squad_index5; // eax@233
  158.   int squad_index6; // eax@234
  159.   char squad_index7; // sf@237
  160.   void *squad_index8; // eax@239
  161.   int j; // ecx@240
  162.   int assigned_start; // eax@241
  163.   int spec; // eax@241
  164.   int v162; // edx@241
  165.   int assigned_end; // edx@241
  166.   int v164; // esi@242
  167.   int v165; // ebx@243
  168.   unsigned int v166; // eax@244
  169.   int v167; // eax@245
  170.   signed int v168; // edx@250
  171.   signed int v169; // eax@251
  172.   int v170; // edi@251
  173.   int v171; // esi@251
  174.   int v172; // ecx@253
  175.   char v173; // sf@259
  176.   int v174; // edx@263
  177.   int v175; // ecx@263
  178.   int v176; // ecx@264
  179.   signed int v177; // edx@266
  180.   int v178; // ebp@266
  181.   int v179; // edi@266
  182.   signed int v180; // edx@266
  183.   int v181; // ebx@268
  184.   int v182; // edx@270
  185.   unsigned int v183; // eax@279
  186.   int v184; // edx@280
  187.   int v185; // eax@285
  188.   int v186; // edx@285
  189.   int v187; // ecx@286
  190.   char v188; // sf@287
  191.   int v189; // eax@290
  192.   int v190; // edx@292
  193.   int v191; // eax@292
  194.   char v192; // sf@297
  195.   char v193; // sf@298
  196.   int v194; // eax@302
  197.   int v195; // edx@302
  198.   int v196; // eax@304
  199.   int v197; // eax@322
  200.   signed int v198; // esi@327
  201.   signed int v199; // eax@328
  202.   int v200; // ebx@328
  203.   int v201; // edi@329
  204.   int v202; // eax@335
  205.   int v203; // eax@339
  206.   char v204; // al@346
  207.   signed int v205; // eax@347
  208.   signed int v206; // ecx@347
  209.   signed int v207; // ebx@347
  210.   int v208; // eax@347
  211.   int v209; // eax@347
  212.   int v210; // esi@347
  213.   int v211; // eax@360
  214.   int v212; // ebx@360
  215.   int v213; // eax@374
  216.   int v214; // esi@374
  217.   int v215; // ecx@382
  218.   int v216; // eax@384
  219.   int squad_pos; // eax@388
  220.   void *v218; // edx@390
  221.   int body_plan; // edx@390
  222.   void *v220; // ebp@390
  223.   signed int body_plan_size_b; // eax@390
  224.   signed int body_plan_size_b; // eax@390
  225.   int v223; // ebx@391
  226.   void *v224; // eax@394
  227.   unsigned int v225; // ecx@394
  228.   unsigned int v226; // ecx@398
  229.   int _EBP; // ebp@398
  230.   unsigned int _EBX; // ebx@399
  231.   int v229; // ebp@402
  232.   int v230; // ebx@403
  233.   int v231; // eax@406
  234.   unsigned int v232; // ecx@406
  235.   unsigned int v233; // edx@410
  236.   int _EAX; // eax@411
  237.   unsigned int _EBX; // ebx@411
  238.   unsigned int v236; // edx@415
  239.   signed int v237; // edx@418
  240.   signed int v238; // eax@419
  241.   int item; // ebx@419
  242.   int v240; // ebp@419
  243.   int v241; // ecx@421
  244.   int v242; // ebp@431
  245.   signed int v243; // edx@433
  246.   signed int v244; // eax@434
  247.   int v245; // ebx@434
  248.   int v246; // ecx@436
  249.   void *part_vec_start; // eax@445
  250.   int v248; // edx@445
  251.   __int16 v249; // ST34_2@445
  252.   __int16 v250; // ax@445
  253.   __int16 v251; // ST34_2@445
  254.   __int16 v252; // ax@445
  255.   __int16 v253; // ST34_2@445
  256.   __int16 v254; // ax@445
  257.   int v255; // eax@445
  258.   int v256; // ebp@445
  259.   __int16 v257; // ax@445
  260.   int v258; // edx@447
  261.   char *cur_use; // ecx@448
  262.   int part_id; // ebx@448
  263.   char *v261; // ebx@449
  264.   char *v262; // ebp@450
  265.   char v263; // sf@455
  266.   int v264; // ebp@457
  267.   char *v265; // edx@458
  268.   signed int v266; // ecx@458
  269.   char v267; // sf@460
  270.   char v268; // sf@467
  271.   int v269; // ecx@469
  272.   char *v270; // edx@470
  273.   signed int v271; // ebp@470
  274.   char v272; // sf@472
  275.   int v273; // eax@476
  276.   int v274; // edx@476
  277.   int v275; // edx@477
  278.   int v276; // ecx@477
  279.   char v277; // sf@478
  280.   int v278; // eax@481
  281.   int v279; // edx@481
  282.   int v280; // eax@481
  283.   int v281; // edx@481
  284.   int v282; // ebx@482
  285.   char v283; // sf@483
  286.   int v284; // eax@486
  287.   int v285; // ebp@488
  288.   int v286; // eax@488
  289.   int v287; // eax@489
  290.   int v288; // ebx@491
  291.   int v289; // edx@492
  292.   int v290; // esi@492
  293.   signed int v291; // esi@494
  294.   signed int v292; // ebx@495
  295.   int v293; // edi@495
  296.   int v294; // eax@503
  297.   int v295; // ecx@503
  298.   int v296; // edx@504
  299.   int v297; // eax@509
  300.   int v298; // eax@511
  301.   int v299; // eax@512
  302.   int v300; // edx@512
  303.   int v301; // ecx@512
  304.   int v302; // ebp@513
  305.   unsigned int v303; // edx@514
  306.   unsigned int v304; // ecx@514
  307.   int v305; // ebx@514
  308.   unsigned int v306; // eax@515
  309.   int v307; // eax@516
  310.   signed int v308; // edx@521
  311.   signed int v309; // eax@522
  312.   int v310; // ebp@522
  313.   int v311; // ecx@524
  314.   char v312; // sf@530
  315.   char v313; // sf@534
  316.   char v314; // sf@536
  317.   int v315; // eax@541
  318.   int v316; // edx@541
  319.   int v317; // ebx@541
  320.   int v318; // eax@543
  321.   int v319; // eax@555
  322.   int v320; // edx@555
  323.   int v321; // ecx@556
  324.   char v322; // sf@557
  325.   int v323; // eax@560
  326.   int v324; // edx@560
  327.   int v325; // eax@560
  328.   int v326; // edx@560
  329.   int v327; // ebx@561
  330.   char v328; // sf@562
  331.   int v329; // eax@565
  332.   int v330; // ebp@567
  333.   int v331; // eax@567
  334.   int v332; // eax@568
  335.   int ammo_spec; // edx@570
  336.   int v334; // ebx@571
  337.   int v335; // edi@571
  338.   signed int v336; // edi@573
  339.   signed int v337; // edx@574
  340.   int v338; // esi@574
  341.   int v339; // eax@583
  342.   int v340; // ecx@584
  343.   int v341; // eax@585
  344.   int v342; // eax@586
  345.   int v343; // edx@586
  346.   int v344; // ebx@586
  347.   int v345; // ebp@587
  348.   unsigned int v346; // edx@588
  349.   unsigned int v347; // ecx@588
  350.   int v348; // ebx@588
  351.   unsigned int v349; // eax@589
  352.   int v350; // eax@590
  353.   signed int v351; // edx@595
  354.   signed int v352; // eax@596
  355.   int v353; // ebp@596
  356.   int v354; // ecx@598
  357.   char v355; // sf@604
  358.   char v356; // sf@608
  359.   char v357; // sf@610
  360.   int v358; // eax@615
  361.   int v359; // edx@615
  362.   int v360; // ebx@615
  363.   int v361; // eax@617
  364.   int v362; // eax@629
  365.   int v363; // edx@629
  366.   unsigned int item_subtype; // edx@631
  367.   int itemdef; // eax@633
  368.   int spec; // edx@636
  369.   int assigned; // ecx@636
  370.   int v368; // eax@637
  371.   int v369; // ecx@637
  372.   signed int v370; // edx@639
  373.   signed int v371; // eax@640
  374.   int v372; // ebx@640
  375.   int v373; // ebp@640
  376.   int v374; // ecx@642
  377.   int skill_melee; // edx@649
  378.   unsigned int v376; // eax@651
  379.   unsigned __int16 melee_skill; // ax@656
  380.   unsigned int v378; // eax@658
  381.   int v379; // eax@661
  382.   int v380; // edx@663
  383.   int v381; // edx@664
  384.   int v383; // ebx@668
  385.   int v384; // ebp@668
  386.   signed int v385; // edx@670
  387.   signed int v386; // eax@671
  388.   int v387; // ebx@671
  389.   int v388; // ecx@673
  390.   int v389; // eax@683
  391.   int v390; // edx@685
  392.   int v391; // ebp@685
  393.   int v392; // eax@687
  394.   int v393; // ecx@687
  395.   char *v394; // eax@697
  396.   int v395; // eax@699
  397.   signed int v396; // edx@703
  398.   signed int v397; // eax@704
  399.   int v398; // ebx@704
  400.   int item2; // ebp@704
  401.   int v400; // ecx@706
  402.   int v402; // edx@714
  403.   int v403; // ecx@714
  404.   int v404; // ecx@715
  405.   int v405; // eax@720
  406.   int v406; // edx@720
  407.   int v407; // ecx@720
  408.   int v408; // ebx@720
  409.   int v409; // eax@720
  410.   int v410; // ecx@721
  411.   int v411; // edx@728
  412.   int v412; // ebp@728
  413.   int v413; // eax@731
  414.   int v414; // eax@739
  415.   int v415; // ecx@739
  416.   int v416; // eax@740
  417.   int v417; // edx@745
  418.   int v418; // ebp@745
  419.   int v419; // eax@747
  420.   int v420; // ebx@765
  421.   int v421; // eax@767
  422.   int v422; // ecx@767
  423.   int v423; // ecx@771
  424.   int v424; // ebp@771
  425.   int v425; // eax@773
  426.   int v426; // edx@773
  427.   int v427; // esi@783
  428.   int v428; // eax@785
  429.   int v429; // ecx@791
  430.   int v430; // eax@793
  431.   int v431; // ecx@797
  432.   int v432; // eax@800
  433.   int unit; // [sp+2Ch] [bp-E0h]@136
  434.   int cur_uniform; // [sp+34h] [bp-D8h]@2
  435.   int unf_vec_start; // [sp+34h] [bp-D8h]@3
  436.   int v436; // [sp+34h] [bp-D8h]@34
  437.   int v437; // [sp+34h] [bp-D8h]@42
  438.   int cur_uniform; // [sp+34h] [bp-D8h]@44
  439.   int v439; // [sp+34h] [bp-D8h]@52
  440.   int v440; // [sp+34h] [bp-D8h]@100
  441.   int v441; // [sp+34h] [bp-D8h]@132
  442.   int v442; // [sp+34h] [bp-D8h]@181
  443.   int v443; // [sp+34h] [bp-D8h]@221
  444.   int v444; // [sp+34h] [bp-D8h]@241
  445.   unsigned int v445; // [sp+34h] [bp-D8h]@393
  446.   unsigned int v446; // [sp+34h] [bp-D8h]@397
  447.   int v447; // [sp+34h] [bp-D8h]@403
  448.   unsigned int v448; // [sp+34h] [bp-D8h]@409
  449.   int v449; // [sp+34h] [bp-D8h]@414
  450.   int v450; // [sp+34h] [bp-D8h]@445
  451.   int v451; // [sp+34h] [bp-D8h]@481
  452.   int v452; // [sp+34h] [bp-D8h]@512
  453.   int v453; // [sp+34h] [bp-D8h]@560
  454.   int v454; // [sp+34h] [bp-D8h]@586
  455.   int v455; // [sp+34h] [bp-D8h]@630
  456.   int v456; // [sp+34h] [bp-D8h]@668
  457.   int melee_skill; // [sp+34h] [bp-D8h]@683
  458.   int cur_uniform; // [sp+34h] [bp-D8h]@699
  459.   int v459; // [sp+38h] [bp-D4h]@3
  460.   int v460; // [sp+38h] [bp-D4h]@27
  461.   int v461; // [sp+38h] [bp-D4h]@60
  462.   int v462; // [sp+38h] [bp-D4h]@99
  463.   signed int found_item; // [sp+38h] [bp-D4h]@133
  464.   signed int found_item; // [sp+38h] [bp-D4h]@182
  465.   int v465; // [sp+38h] [bp-D4h]@222
  466.   int v466; // [sp+38h] [bp-D4h]@242
  467.   int v467; // [sp+38h] [bp-D4h]@286
  468.   int v468; // [sp+38h] [bp-D4h]@410
  469.   unsigned int v469; // [sp+38h] [bp-D4h]@415
  470.   int item; // [sp+38h] [bp-D4h]@434
  471.   int v471; // [sp+38h] [bp-D4h]@481
  472.   int v472; // [sp+38h] [bp-D4h]@513
  473.   int v473; // [sp+38h] [bp-D4h]@560
  474.   int v474; // [sp+38h] [bp-D4h]@587
  475.   int v475; // [sp+38h] [bp-D4h]@629
  476.   int v476; // [sp+38h] [bp-D4h]@661
  477.   int v477; // [sp+38h] [bp-D4h]@791
  478.   int i; // [sp+3Ch] [bp-D0h]@4
  479.   unsigned int v479; // [sp+3Ch] [bp-D0h]@60
  480.   int unit; // [sp+3Ch] [bp-D0h]@100
  481.   int v481; // [sp+3Ch] [bp-D0h]@140
  482.   int v482; // [sp+3Ch] [bp-D0h]@189
  483.   int v483; // [sp+3Ch] [bp-D0h]@227
  484.   int unit; // [sp+3Ch] [bp-D0h]@240
  485.   int v485; // [sp+3Ch] [bp-D0h]@285
  486.   int v486; // [sp+3Ch] [bp-D0h]@390
  487.   int v487; // [sp+3Ch] [bp-D0h]@409
  488.   int v488; // [sp+3Ch] [bp-D0h]@486
  489.   int v489; // [sp+3Ch] [bp-D0h]@511
  490.   int v490; // [sp+3Ch] [bp-D0h]@565
  491.   int v491; // [sp+3Ch] [bp-D0h]@585
  492.   int v492; // [sp+3Ch] [bp-D0h]@765
  493.   int v493; // [sp+3Ch] [bp-D0h]@783
  494.   int v494; // [sp+3Ch] [bp-D0h]@797
  495.   int unf_vec_start; // [sp+40h] [bp-CCh]@3
  496.   unsigned int v496; // [sp+40h] [bp-CCh]@43
  497.   int item; // [sp+40h] [bp-CCh]@75
  498.   int v498; // [sp+40h] [bp-CCh]@142
  499.   int v499; // [sp+40h] [bp-CCh]@157
  500.   int v500; // [sp+40h] [bp-CCh]@167
  501.   int v501; // [sp+40h] [bp-CCh]@189
  502.   int v502; // [sp+40h] [bp-CCh]@241
  503.   int v503; // [sp+40h] [bp-CCh]@268
  504.   int v504; // [sp+40h] [bp-CCh]@382
  505.   int v505; // [sp+40h] [bp-CCh]@397
  506.   int v506; // [sp+40h] [bp-CCh]@416
  507.   signed int permit; // [sp+40h] [bp-CCh]@445
  508.   int v508; // [sp+40h] [bp-CCh]@476
  509.   int v509; // [sp+40h] [bp-CCh]@541
  510.   int v510; // [sp+40h] [bp-CCh]@555
  511.   int v511; // [sp+40h] [bp-CCh]@615
  512.   int v512; // [sp+40h] [bp-CCh]@637
  513.   int melee_skill; // [sp+40h] [bp-CCh]@656
  514.   int v514; // [sp+40h] [bp-CCh]@662
  515.   int *v515; // [sp+44h] [bp-C8h]@22
  516.   signed int v516; // [sp+44h] [bp-C8h]@34
  517.   int v517; // [sp+44h] [bp-C8h]@42
  518.   int v518; // [sp+44h] [bp-C8h]@100
  519.   int v519; // [sp+44h] [bp-C8h]@410
  520.   int v520; // [sp+44h] [bp-C8h]@414
  521.   int v521; // [sp+44h] [bp-C8h]@477
  522.   int v522; // [sp+44h] [bp-C8h]@556
  523.   int v523; // [sp+44h] [bp-C8h]@596
  524.   char v524; // [sp+44h] [bp-C8h]@662
  525.   int v525; // [sp+44h] [bp-C8h]@699
  526.   __int16 v526; // [sp+48h] [bp-C4h]@34
  527.   char is_hunter; // [sp+48h] [bp-C4h]@100
  528.   signed int min_dist; // [sp+48h] [bp-C4h]@133
  529.   signed int min_dist; // [sp+48h] [bp-C4h]@182
  530.   int v530; // [sp+48h] [bp-C4h]@239
  531.   __int16 size; // [sp+48h] [bp-C4h]@445
  532.   signed int v532; // [sp+48h] [bp-C4h]@477
  533.   signed int v533; // [sp+48h] [bp-C4h]@556
  534.   int v534; // [sp+48h] [bp-C4h]@700
  535.   int needs_ammo; // [sp+4Ch] [bp-C0h]@97
  536.   int position; // [sp+4Ch] [bp-C0h]@389
  537.   int v537; // [sp+4Ch] [bp-C0h]@492
  538.   int v538; // [sp+4Ch] [bp-C0h]@522
  539.   char v539; // [sp+50h] [bp-BCh]@34
  540.   int weapon_skill; // [sp+50h] [bp-BCh]@99
  541.   int v541; // [sp+50h] [bp-BCh]@222
  542.   int v542; // [sp+50h] [bp-BCh]@240
  543.   int v543; // [sp+50h] [bp-BCh]@496
  544.   int v544; // [sp+50h] [bp-BCh]@509
  545.   int v545; // [sp+50h] [bp-BCh]@571
  546.   int v546; // [sp+50h] [bp-BCh]@583
  547.   int item; // [sp+50h] [bp-BCh]@671
  548.   char needs_crossbow; // [sp+54h] [bp-B8h]@99
  549.   int v549; // [sp+54h] [bp-B8h]@240
  550.   char is_shaped; // [sp+54h] [bp-B8h]@445
  551.   int v551; // [sp+54h] [bp-B8h]@489
  552.   int v552; // [sp+54h] [bp-B8h]@510
  553.   int v553; // [sp+54h] [bp-B8h]@575
  554.   int v554; // [sp+54h] [bp-B8h]@584
  555.   int v555; // [sp+54h] [bp-B8h]@701
  556.   int v556; // [sp+54h] [bp-B8h]@728
  557.   char got_weapon; // [sp+58h] [bp-B4h]@100
  558.   int v558; // [sp+58h] [bp-B4h]@447
  559.   int v559; // [sp+58h] [bp-B4h]@489
  560.   int v560; // [sp+58h] [bp-B4h]@568
  561.   int v561; // [sp+58h] [bp-B4h]@584
  562.   int v562; // [sp+58h] [bp-B4h]@728
  563.   int v563; // [sp+58h] [bp-B4h]@745
  564.   int unf_vec; // [sp+5Ch] [bp-B0h]@3
  565.   int v565; // [sp+5Ch] [bp-B0h]@489
  566.   int v566; // [sp+5Ch] [bp-B0h]@510
  567.   int v567; // [sp+5Ch] [bp-B0h]@568
  568.   int v568; // [sp+5Ch] [bp-B0h]@745
  569.   int v569; // [sp+60h] [bp-ACh]@100
  570.   int v570; // [sp+60h] [bp-ACh]@477
  571.   int v571; // [sp+60h] [bp-ACh]@510
  572.   int unit; // [sp+60h] [bp-ACh]@568
  573.   int v573; // [sp+60h] [bp-ACh]@584
  574.   int v574; // [sp+64h] [bp-A8h]@477
  575.   int v575; // [sp+64h] [bp-A8h]@556
  576.   int v576; // [sp+68h] [bp-A4h]@477
  577.   int v577; // [sp+68h] [bp-A4h]@556
  578.   int v578; // [sp+6Ch] [bp-A0h]@556
  579.   void *in_inventory_vec; // [sp+70h] [bp-9Ch]@18
  580.   unsigned int in_inventory_vec.end; // [sp+74h] [bp-98h]@52
  581.   int v581; // [sp+78h] [bp-94h]@52
  582.   void *weapon_cnt; // [sp+80h] [bp-8Ch]@629
  583.   int weapon_cnt.end; // [sp+84h] [bp-88h]@629
  584.   int weapon_cnt.limit; // [sp+88h] [bp-84h]@629
  585.   void *weapon_cnt_skill; // [sp+90h] [bp-7Ch]@34
  586.   int weapon_cnt.end; // [sp+94h] [bp-78h]@34
  587.   int weapon_cnt_skill.limit; // [sp+98h] [bp-74h]@34
  588.   void *shaped_set.start; // [sp+A0h] [bp-6Ch]@38
  589.   unsigned int shaped_set.end; // [sp+A4h] [bp-68h]@390
  590.   int shaped_set.limit; // [sp+A8h] [bp-64h]@390
  591.   void *size_accum.start; // [sp+B0h] [bp-5Ch]@37
  592.   unsigned int size_accum.end; // [sp+B4h] [bp-58h]@390
  593.   int size_accum.limit; // [sp+B8h] [bp-54h]@390
  594.   int v594; // [sp+BCh] [bp-50h]@218
  595.   int item_z; // [sp+C0h] [bp-4Ch]@194
  596.   int item_y; // [sp+D0h] [bp-3Ch]@194
  597.   int item_x; // [sp+E0h] [bp-2Ch]@22
  598.  
  599.     void removeCivilianAssignment(unit, item_id) {
  600.         unit->military.uniforms[0].erase(i);
  601.        
  602.         if (binsearch(ui.equipment.work_weapons, item_id, &idx)) {
  603.             ui.equipment.work_weapons.erase(idx);
  604.             ui.equipment.work_units.erase(idx);
  605.         }
  606.     }
  607.  
  608.     void insertIntoSortedVector(int item, std::vector<int> *vec);
  609.  
  610.     void addCivilianAssignment(unit, item_id) {
  611.         v183 = insertIntoSortedVector(item_id, &ui.equipment.work_weapons);
  612.         if (v183 != -1) // inserted
  613.         {
  614.             if (v183 < ui.equipment.work_units.size())
  615.                 ui.equipment.work_units.insert(ui.equipment.begin()+v183, unit->id);
  616.             else
  617.                 ui.equipment.work_units.push_back(unit->id);
  618.         }
  619.     }
  620.  
  621.     void addHunterAmmoAssignment(unit, item_id) {
  622.         v183 = insertIntoSortedVector(item_id, &ui.equipment.hunter_ammo);
  623.         if (v183 != -1) // inserted
  624.         {
  625.             if (v183 < ui.equipment.work_units.size())
  626.                 ui.equipment.hunter_units.insert(ui.equipment.begin()+v183, unit->id);
  627.             else
  628.                 ui.equipment.hunter_units.push_back(unit->id);
  629.         }
  630.     }
  631.  
  632.     if (!(unit->military.pickup_equipment_bit & 1))
  633.         return;
  634.  
  635.     int cur_uniform = unit->military.cur_uniform;
  636.  
  637.     if (unit->military.cur_uniform == 0) // Civilian
  638.     {
  639.         std::vector<int32_t> *unf_vec = &unit->military.uniforms[0];
  640.         unf_vec_start = unf_vec->start;
  641.        
  642.         // Kick out unassigned
  643.         for (int i = unf_vec->size()-1; i >= 0; i--)
  644.         {
  645.             item_id = unf_vec[i];
  646.        
  647.             if (item_id != -1 &&
  648.                 binsearch(world.items.all, item_id, &idx) &&
  649.                 item = world.items.all[idx])
  650.             {
  651.                 short type = item->vtable<0>();
  652.                 if (type == 24 || type == 61) // WEAPON / QUIVER
  653.                 {
  654.                     if (item->id == -1 ||
  655.                         !binsearch(ui.equipment.work_weapons, item->id, &idx) ||
  656.                         ui.equipment.work_units[idx] != unit->id)
  657.                     {
  658.                         unf_vec->erase(item_id);
  659.                     }
  660.                 }
  661.             }
  662.         }
  663.  
  664.         // Account for already present weapons
  665.         is_hunter = unit->status.labors[44/*HUNT*/];
  666.         needs_ammo = is_hunter ? 25 : 0;
  667.         weapon_skill = 38; // AXE
  668.         if (!unit->status.labors[10/*WOODCUT*/])
  669.             weapon_skill = unit->status.labors[0/*MINING*/] ? 0 : -1;
  670.  
  671.         got_weapon = 0;
  672.         needs_quiver = is_hunter != 0;
  673.         needs_crossbow = is_hunter != 0;
  674.  
  675.         for (int i = unf_vec->size()-1; i >= 0; i--)
  676.         {
  677.             item_id = unf_vec[i];
  678.            
  679.             if (item_id != -1 &&
  680.                 binsearch(world.items.all, item_id, &idx) &&
  681.                 item = world.items_all[idx])
  682.             {
  683.                 short type = item->vtable<0>();
  684.                
  685.                 if (type == 61) // QUIVER
  686.                 {
  687.                     if (needs_quiver)
  688.                     {
  689.                         needs_quiver = 0;
  690.                         addCivilianAssignment(unit, item_id);
  691.                     }
  692.                     else {
  693.                         unit->military.uniforms[0].erase(i);
  694.                         removeCivilianAssignment(unit, item_id);
  695.                     }
  696.                 }
  697.                 else if (type == 38) // AMMO
  698.                 {
  699.                     if ( needs_ammo <= 0 ) {
  700.                         unit->military.uniforms[0].erase(i);
  701.                         removeCivilianAssignment(unit, item_id);
  702.                     }
  703.                     else
  704.                         needs_ammo -= item->vtable<0x214>();
  705.                 }
  706.                 else if (type == 24) // WEAPON
  707.                 {
  708.                     if (needs_crossbow)
  709.                     {
  710.                         if (item->vtable<0x2f4>()) {
  711.                             got_weapon = 1;
  712.                             addCivilianAssignment(unit, item_id);
  713.                         } else {
  714.                             unit->military.uniforms[0].erase(i);
  715.                             removeCivilianAssignment(unit, item_id);
  716.                         }
  717.                     }
  718.                     else
  719.                     {
  720.                         short v101 = item->vtable<0x254>();
  721.                         if (v101 == -1)
  722.                             v101 = item->vtable<0x250>();
  723.  
  724.                         if (weapon_skill == -1 || weapon_skill != v101) {
  725.                             unit->military.uniforms[0].erase(i);
  726.                             removeCivilianAssignment(unit, item_id);
  727.                         } else {
  728.                             got_weapon = 1;
  729.                             addCivilianAssignment(unit, item_id);
  730.                         }
  731.                     }
  732.                 }
  733.             }
  734.         }
  735.  
  736.         // Provide quiver
  737.         if (needs_quiver) {
  738.             found_item = -1;
  739.             short min_dist = 2 * (world.map.z_count + world.map.x_count + world.map.y_count);
  740.            
  741.             for (int i = world.items.other[11].size()-1; i >= 0; i--)
  742.             {
  743.                 item = world.items.other[11][i];
  744.                 item_type = item->vtable<0>();
  745.                 if (!sub_88C2210(item_type, item->vtable<4>(), item->vtable<0x2a0>(), unit->race) &&
  746.                     sub_85D8BF0(item) &&
  747.                     !(item->flags & 0x2E90C32))
  748.                 {
  749.                     item_id = item->id;
  750.                    
  751.                     if (item_id != -1 && binsearch(ui.equipment.work_weapons, item_id, NULL))
  752.                         continue;
  753.  
  754.                     if (binsearch(ui.equipment.items_assigned[61], item_id, NULL))
  755.                         continue;
  756.  
  757.                     sub_85D1880(item, &item_x, &item_y, &item_z);
  758.  
  759.                     if (item_x != -30000)
  760.                     {
  761.                         if (sub_88D67E0(unit, item_x, item_y, item_z, 1))
  762.                         {
  763.                             short dx = abs(item_x - unit_x);
  764.                             short dy = abs(item_y - unit_y);
  765.                             short dz = abs(item_z - unit_z);
  766.                             if (dx > dz || dy > dz) {
  767.                                 dz = dy;
  768.                                 if (dx > dy)
  769.                                     dz = dx;
  770.                             }
  771.                             if (min_dist > dz)
  772.                             {
  773.                                 min_dist = dz;
  774.                                 found_item = item_id;
  775.                             }
  776.                         }
  777.                     }
  778.                 }
  779.             } // CUT_1
  780.  
  781.             if (found_item != -1)
  782.             {
  783.                 item = world.items.other[11][found_item];
  784.                 insertIntoSortedVector(item->id, unf_vec);
  785.                 addCivilianAssignment(unit, item->id);
  786.             }
  787.             else {
  788.                 setMiscTrait(unit, 43, 300); // retry pickup timeout?
  789.             }
  790.         } // needs_quiver
  791.  
  792.         // Provide weapon
  793.         if (!got_weapon && (needs_crossbow || weapon_skill != -1)) {
  794.             found_item = -1;
  795.             short min_dist = 2 * (world.map.z_count + world.map.x_count + world.map.y_count);
  796.  
  797.             for (int i = world.items.other[2].size()-1; i >= 0; i--)
  798.             {
  799.                 item = world.items.other[2][i];
  800.                 item_type = item->vtable<0>();
  801.  
  802.                 if (!sub_88C2210(item_type, item->vtable<4>(), item->vtable<0x2a0>(), unit->race))
  803.                 {
  804.                     if (needs_crossbow)
  805.                     {
  806.                         if (!item->vtable<0x2F4>())
  807.                             continue
  808.                     }
  809.                     else
  810.                     {
  811.                         short v141 = item->vtable<0x254>();
  812.                         if (v141 == -1)
  813.                             v141 = item->vtable<0x250>();
  814.                         if (weapon_skill != v141)
  815.                             continue;
  816.                     }
  817.  
  818.                     if (!sub_85D8BF0(item) || (item->flags & 0x2E90C32))
  819.                         continue;
  820.  
  821.                     item_id = item->id;
  822.  
  823.                     if (item_id != -1 && binsearch(ui.equipment.work_weapons, item_id, NULL))
  824.                         continue;
  825.  
  826.                     if (binsearch(ui.equipment.items_assigned[24], item_id, NULL))
  827.                         continue;
  828.  
  829.                     sub_85D1880(item, &item_x, &item_y, &item_z);
  830.  
  831.                     if (item_x != -30000)
  832.                     {
  833.                         if (sub_88D67E0(unit, item_x, item_y, item_z, 1))
  834.                         {
  835.                             short dx = abs(item_x - unit_x);
  836.                             short dy = abs(item_y - unit_y);
  837.                             short dz = abs(item_z - unit_z);
  838.                             if (dx > dz || dy > dz) {
  839.                                 dz = dy;
  840.                                 if (dx > dy)
  841.                                     dz = dx;
  842.                             }
  843.                             if (min_dist > dz)
  844.                             {
  845.                                 min_dist = dz;
  846.                                 found_item = item_id;
  847.                             }
  848.                         }
  849.                     }                    
  850.                 }                
  851.             }
  852.  
  853.             if (found_item != -1)
  854.             {
  855.                 item = world.items.other[2][found_item];
  856.                 insertIntoSortedVector(item->id, unf_vec);
  857.                 addCivilianAssignment(unit, item->id);
  858.             } else {
  859.                 sub_88F3930(unit, 43, 300);
  860.             }
  861.         } // !got_weapon
  862.  
  863.         // Provide hunting ammo
  864.         if (unit->status.labors[44/*HUNT*/])
  865.         {
  866.             for (int i = unit->inventory.size()-1; i >= 0; i--) {
  867.                 item = unit->inventory[i]->item;
  868.                 if (item->vtable<0>() != 61) continue;
  869.                
  870.                 for (int j = item->refs.size()-1; j >= 0; j--) {
  871.                     if (item->refs[j]->vtable<8>() != 10) // contains
  872.                         continue;
  873.                     item *content = item->refs[j]->vtable<0xC>();
  874.                     if (content && content->vtable<0>() == 38) { // AMMO
  875.                         needs_ammo -= content->vtable<0x214>();
  876.                        
  877.                         if (binsearch(ui.equipment.hunter_ammo, content->id, &idx)) {
  878.                             if (ui.equipment.hunter_ammo_units[idx] == unit->id)
  879.                                 insertIntoSortedVector(content->id, &unit->military.uniforms[cur_uniform]);
  880.                         } else {
  881.                             insertIntoSortedVector(content->id, &unit->military.uniforms[cur_uniform]);
  882.                             addHunterAmmoAssignment(unit, content->id);
  883.                         }
  884.                     }                    
  885.                 }
  886.             }
  887.            
  888.             if (needs_ammo > 0) {
  889.                 for (int i = ui.equipment.hunter_ammunition.size()-1; i >= 0; i--) {
  890.                     spec = ui.equipment.hunter_ammunition[i];
  891.  
  892.                     for (int j = spec->assigned.size()-1; j >= 0; j--) {
  893.                         int item_id = spec->assigned[j];
  894.  
  895.                         if (item_id != -1 &&
  896.                             (!binsearch(ui.equipment.hunter_ammo, item_id, &idx) ||
  897.                              ui.equipment.hunter_units[idx] == unit->id) &&
  898.                             binsearch(world.items.all, item_id, &idx) &&
  899.                             item = world.items.all[idx] &&
  900.                             (sub_85D1880(item, &item_x, &item_y, &item_z),
  901.                              sub_88D67E0(unit, item_x, item_y, item_z, 1)))
  902.                         {
  903.                             needs_ammo -= item->vtable<0x214>();
  904.  
  905.                             insertIntoSortedVector(item_id, &unit->military.uniforms[cur_uniform]);
  906.                             addHunterAmmoAssignment(unit, item_id);
  907.  
  908.                             if (needs_ammo <= 0)
  909.                                 break;
  910.                         }
  911.  
  912.                         if (needs_ammo <= 0)
  913.                             break;                        
  914.                     }
  915.                 }          
  916.             }
  917.         }
  918.        
  919.         goto DONE;
  920.     }
  921.    
  922.     // ELSE MILITARY
  923.     squad_index = unit->squad_index;
  924.     squad_pos = unit->squad_pos;
  925.     unit->military.cur_uniform[cur_squad].clear();
  926.  
  927.     if (!binsearch(world.squads.all, squad_index, &idx) ||
  928.         !(squad = world.squads.all[idx]) ||
  929.         squad_pos == -1 ||
  930.         !(position = squad.positions[squad_pos]))
  931.         goto DONE;
  932.  
  933.     body_plan = unit->body_plan;
  934.     size_accum.start = 0;
  935.     size_accum.end = 0;
  936.     body_plan_size_b = *(_DWORD *)(body_plan + 4) - *(_DWORD *)body_plan;
  937.     size_accum.limit = 0;
  938.     shaped_set.start = 0;
  939.     shaped_set.end = 0;
  940.     shaped_set.limit = 0;
  941.    
  942.     LOWORD(item_z) = 0;
  943.     sub_80525A0(&size_accum.start, 0, body_plan_size_b >> 2, &item_z);
  944.     body_plan_size_b = unit->body_plan->end - *unit->body_plan->start;
  945.     LOBYTE(item_x) = 0;
  946.     sub_80E92F0(&shaped_set.start, 0, body_plan_size_b >> 2, &item_x);
  947.     v218 = shaped_set.start;
  948.     v220 = size_accum.start;
  949.     v486 = size_accum.end;
  950.    
  951.     if (size_accum.start < size_accum.end)
  952.         memset(size_accum.start, 0, 2*size_accum.size());
  953.     if (shaped_set.start < shaped_set.end)
  954.         memset(shaped_set.start, 0, shaped_set.size());
  955.  
  956.     for (int i = 0; i < position->assigned_items.size(); i++) {
  957.         item_id = position->assigned_items[i];
  958.  
  959.         if (binsearch(world.items.all, item_id, &idx) &&
  960.             (item = world.items.all[idx]))
  961.         {
  962.             switch (item->vtable<0>() - 25)
  963.             {
  964.             case 0u:
  965.             case 1u:
  966.             case 3u:
  967.             case 4u:
  968.             case 0xBu:
  969.             case 0xFu:
  970.             case 0x10u:
  971.             case 0x11u:
  972.             case 0x22u:
  973.                 short permit = sub_829D850(&world.raw.itemdefs.all, item->vtable<0>(), item->vtable<4>());
  974.                 size = sub_829D9A0(&world.raw.itemdefs.all, item->vtable<0>(), item->vtable<4>());
  975.                 is_shaped = sub_829DC20(&world.raw.itemdefs.all, item->vtable<0>(), item->vtable<4>());
  976.                 vector<short> part_vec;
  977.                 sub_88F0F30(unit, item->vtable<0>(), item->vtable<0xac>(), &part_vec);
  978.                
  979.                 if ( is_shaped )
  980.                 {
  981.                     for (int j = part_vec.size(); j >= 0; j--) {
  982.                         part_id = part_vec[j];
  983.  
  984.                         if (permit >= size_accum[j] && !shaped_set[j]) {
  985.                             shaped_set[j] = 1;
  986.                             size_accum[j] += size;
  987.                             insertIntoSortedVector(item->id, unit->military.uniforms[cur_uniform]);
  988.                         }
  989.                     }
  990.                 }
  991.                 else
  992.                 {
  993.                     for (int j = part_vec.size(); j >= 0; j--) {
  994.                         if (permit >= size_accum[j]) {
  995.                             size_accum[j] += size;
  996.                             insertIntoSortedVector(item->id, unit->military.uniforms[cur_uniform]);
  997.                         }
  998.                     }
  999.                 }
  1000.  
  1001.                 if (part_vec.start)
  1002.                     operator delete(part_vec_start);
  1003.                 break;
  1004.  
  1005.             default:
  1006.                 insertIntoSortedVector(item->id, unit->military.uniforms[cur_uniform]);
  1007.                 break;
  1008.             }
  1009.         }
  1010.     }
  1011.        
  1012.     if (!position->flags.replace_clothing)
  1013.     {
  1014.         for (int i = 0; i < unit->military.uniforms[0].size(); i++)
  1015.         {
  1016.             item_id = position->assigned_items[i];
  1017.  
  1018.             if (binsearch(world.items.all, item_id, &idx) &&
  1019.                 (item = world.items.all[idx]))
  1020.             {
  1021.                 switch (item->vtable<0>() - 25)
  1022.                 {
  1023.                 case 0u:
  1024.                 case 1u:
  1025.                 case 3u:
  1026.                 case 4u:
  1027.                 case 0xBu:
  1028.                 case 0xFu:
  1029.                 case 0x10u:
  1030.                 case 0x11u:
  1031.                 case 0x22u:
  1032.                     short permit = sub_829D850(&world.raw.itemdefs.all, item->vtable<0>(), item->vtable<4>());
  1033.                     size = sub_829D9A0(&world.raw.itemdefs.all, item->vtable<0>(), item->vtable<4>());
  1034.                     is_shaped = sub_829DC20(&world.raw.itemdefs.all, item->vtable<0>(), item->vtable<4>());
  1035.                     vector<short> part_vec;
  1036.                     sub_88F0F30(unit, item->vtable<0>(), item->vtable<0xac>(), &part_vec);
  1037.                    
  1038.                     if ( is_shaped )
  1039.                     {
  1040.                         for (int j = part_vec.size(); j >= 0; j--) {
  1041.                             part_id = part_vec[j];
  1042.  
  1043.                             if (permit >= size_accum[j] && !shaped_set[j]) {
  1044.                                 shaped_set[j] = 1;
  1045.                                 size_accum[j] += size;
  1046.                                 insertIntoSortedVector(item->id, unit->military.uniforms[cur_uniform]);
  1047.                             }
  1048.                         }
  1049.                     }
  1050.                     else
  1051.                     {
  1052.                         for (int j = part_vec.size(); j >= 0; j--) {
  1053.                             if (permit >= size_accum[j]) {
  1054.                                 size_accum[j] += size;
  1055.                                 insertIntoSortedVector(item->id, unit->military.uniforms[cur_uniform]);
  1056.                             }
  1057.                         }
  1058.                     }
  1059.  
  1060.                     if (part_vec.start)
  1061.                         operator delete(part_vec_start);
  1062.                     break;
  1063.                 default:
  1064.                     break;
  1065.                 }
  1066.             }
  1067.         }
  1068.     }
  1069.      
  1070.     cur_uniform = unit->military.cur_uniform;
  1071.     if (unit->military.cur_uniform == 2) {
  1072.         std::vector<short> weapon_cnt_skill;
  1073.         std::vector<int> weapon_cnt;
  1074.  
  1075.         for (int i = 0; i < position->uniform[WEAPON].size(); i++) {
  1076.             v594 = 1;
  1077.             spec = position->uniform[WEAPON][i];
  1078.            
  1079.             if (!spec->assigned.empty()) {
  1080.                 item_id = spec->assigned[0];
  1081.  
  1082.                 if (binsearch(world.items.all, item_id, &idx) &&
  1083.                     (item = world.items.all[idx]))
  1084.                 {
  1085.                     if (!item->vtable<0x2f4>()) // not crossbow
  1086.                     {
  1087.                         melee_skill = item->vtable<0x250>(); // getMeleeSkill
  1088.                         if ( melee_skill <= 115)
  1089.                         {
  1090.                             if (binsearch(weapon_cnt_skill, melee_skill, &idx))
  1091.                                 weapon_cnt[idx] += v594;
  1092.                             else {
  1093.                                 v378 = sub_805D7E0(melee_skill, &weapon_cnt_skill);
  1094.                                 if (v378 != -1)
  1095.                                     weapon_cnt.insertAt(v378, v594);
  1096.                             }
  1097.                         }
  1098.                     }
  1099.                 }
  1100.             } else {
  1101.                 item_subtype = *(_WORD *)(spec + 6);
  1102.                 if (item_subtype >= 0 && item_subtype < world.raws.itemdefs.weapons.size())
  1103.                 {
  1104.                     itemdef = world.raws.itemdefs.weapons[item_subtype];
  1105.                     if (itemdef->skill_ranged == -1 )
  1106.                     {
  1107.                         melee_skill = itemdef->skill_melee;
  1108.                         if ( melee_skill <= 115)
  1109.                         {
  1110.                             if (binsearch(weapon_cnt_skill, melee_skill, &idx))
  1111.                                 weapon_cnt[idx] += 1;
  1112.                             else {
  1113.                                 v378 = sub_805D7E0(melee_skill, &weapon_cnt_skill);
  1114.                                 if (v378 != -1)
  1115.                                     weapon_cnt.insertAt(v378, &v594);
  1116.                             }
  1117.                         }
  1118.                     }
  1119.                 }
  1120.             }
  1121.         }
  1122.  
  1123.         found = 0;
  1124.  
  1125.         for (int i = squad->unk_108.size()-1; i >= 0; i--) {
  1126.             item_id = squad->unk_108[i];
  1127.  
  1128.             if (binsearch(world.items.all, item_id, &idx) &&
  1129.                 (item = world.items.all[idx]))
  1130.             {
  1131.                 if (item->vtable<0x254>() == -1) // getRangedSkill
  1132.                 {
  1133.                     melee_skill = item->vtable<0x250>();
  1134.                    
  1135.                     if (melee_skill != -1 &&
  1136.                         binsearch(weapon_cnt_skill, melee_skill, &idx))
  1137.                     {
  1138.                         if (weapon_cnt[idx] <= 0)
  1139.                             continue;
  1140.  
  1141.                         weapon_cnt[idx]--;
  1142.                        
  1143.                         if (!found) {
  1144.                             cur_uniform = unit->military.cur_uniform;
  1145.                             uniform_vec = unit->military.uniforms[cur_uniform];
  1146.                            
  1147.                             for (int j = uniform_vec->size()-1; j >= 0; j--) {
  1148.                                 id2 = uniform_vec->[j];
  1149.                                
  1150.                                 if (binsearch(world.items.all, id2, &idx) &&
  1151.                                     (item2 = world.items.all[idx]))
  1152.                                 {
  1153.                                     if (item2->vtable<0>() == 24) // WEAPON
  1154.                                         uniform_vec->erase(j);
  1155.                                 }
  1156.                             }
  1157.                                
  1158.                             found = 1;
  1159.                         }
  1160.  
  1161.                         insertIntoSortedVector(item->id, unit->military.uniforms[cur_uniform]);
  1162.                         insertIntoSortedVector(item->id, squad->unk_118);
  1163.                         squad->unk_108.erase(item->id);
  1164.                     }
  1165.                 }
  1166.             } else {
  1167.                 squad->unk_108.erase(i);
  1168.             }
  1169.         }
  1170.        
  1171.         if ( weapon_cnt )
  1172.             operator delete(weapon_cnt);
  1173.         if ( weapon_cnt_skill )
  1174.             operator delete(weapon_cnt_skill);
  1175.     }
  1176.  
  1177.     if (cur_uniform == 1 && position->quiver != -1)
  1178.     {
  1179.         v319 = unit->inventory.start;
  1180.         v320 = ((unit->inventory.end - v319) >> 2) - 1;
  1181.         v510 = v320;
  1182.         if ( v320 < 0 )
  1183.         {
  1184.             v533 = 25;
  1185.             goto LABEL_583;
  1186.         }
  1187.         v522 = 4 * v320;
  1188.         v321 = unit + 0xA8;
  1189.         v533 = 25;
  1190.         v578 = squad + 0xBC;
  1191.         v575 = unit + 0xA8;
  1192.         v577 = squad + 0xC8;
  1193.         while ( 2 )
  1194.         {
  1195.             if ( (unsigned __int16)(****(int (__fastcall *****)(_DWORD))(v319 + v522))(v321) != 61
  1196.             || (v325 = **(_DWORD **)(unit->inventory.start + v522),
  1197.                 v321 = v325,
  1198.                 v473 = **(_DWORD **)(unit->inventory.start + v522),
  1199.                 v326 = *(_DWORD *)(v325 + 0x28),
  1200.                 v323 = *(_DWORD *)(v325 + 0x24),
  1201.                 v324 = ((v326 - v323) >> 2) - 1,
  1202.                 v453 = v324,
  1203.                 v324 < 0) )
  1204.             goto LABEL_557;
  1205.             v327 = 4 * v324;
  1206.             while ( 2 )
  1207.             {
  1208.             if ( (*(int (__cdecl **)(_DWORD))(**(_DWORD **)(v323 + v327) + 8))(*(_DWORD *)(v323 + v327)) != 10
  1209.                 || (v329 = (*(int (__cdecl **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v473 + 0x24) + v327) + 12))(*(_DWORD *)(*(_DWORD *)(v473 + 0x24) + v327)),
  1210.                     v490 = v329,
  1211.                     !v329)
  1212.                 || (unsigned __int16)(**(int (__cdecl ***)(_DWORD))v329)(v329) != 38
  1213.                 || (v331 = (*(int (__cdecl **)(int))(*(_DWORD *)v490 + 0x214))(v490),
  1214.                     v321 = *(_DWORD *)(squad + 0x98),
  1215.                     v533 -= v331,
  1216.                     v330 = ((*(_DWORD *)(squad + 0x9C) - v321) >> 2) - 1,
  1217.                     v330 < 0) )
  1218.                 goto LABEL_562;
  1219.             v332 = 4 * v330;
  1220.             v560 = v327;
  1221.             v567 = squad;
  1222.             unit = unit;
  1223.             while ( 1 )
  1224.             {
  1225.                 ammo_spec = *(_DWORD *)(v321 + v332);
  1226.                 if ( *(_BYTE *)(ammo_spec + 16) & 1 )
  1227.                 {
  1228.                 v545 = *(_DWORD *)(v490 + 20);
  1229.                 v334 = *(_DWORD *)(ammo_spec + 20);
  1230.                 v335 = (*(_DWORD *)(ammo_spec + 24) - v334) >> 2;
  1231.                 if ( v335 )
  1232.                 {
  1233.                     if ( v545 != -1 )
  1234.                     {
  1235.                     v336 = v335 - 1;
  1236.                     if ( v336 >= 0 )
  1237.                         break;
  1238.                     }
  1239.                 }
  1240.                 }
  1241.         LABEL_569:
  1242.                 v332 -= 4;
  1243.                 --v330;
  1244.                 if ( v330 < 0 )
  1245.                 {
  1246.                 v327 = v560;
  1247.                 squad = v567;
  1248.                 unit = unit;
  1249.                 goto LABEL_562;
  1250.                 }
  1251.             }
  1252.             v337 = v336 >> 1;
  1253.             v338 = *(_DWORD *)(v334 + 4 * (v336 >> 1));
  1254.             if ( v545 != v338 )
  1255.             {
  1256.                 v553 = 0;
  1257.                 do
  1258.                 {
  1259.                 if ( v545 < v338 )
  1260.                     v336 = v337 - 1;
  1261.                 else
  1262.                     v553 = v337 + 1;
  1263.                 if ( v336 < v553 )
  1264.                     goto LABEL_569;
  1265.                 v337 = (v336 + v553) >> 1;
  1266.                 v338 = *(_DWORD *)(v334 + 4 * v337);
  1267.                 }
  1268.                 while ( v545 != v338 );
  1269.             }
  1270.             squad = v567;
  1271.             v327 = v560;
  1272.             unit = unit;
  1273.             v415 = *(_DWORD *)(v567 + 0xBC);
  1274.             v414 = (*(_DWORD *)(v567 + 0xC0) - v415) >> 2;
  1275.             if ( v414 )
  1276.             {
  1277.                 v418 = v414 - 1;
  1278.                 v417 = 0;
  1279.                 v568 = v560;
  1280.                 v563 = v415;
  1281.                 while ( 1 )
  1282.                 {
  1283.                 if ( v417 > v418 )
  1284.                 {
  1285.                     v327 = v568;
  1286.                     goto LABEL_740;
  1287.                 }
  1288.                 v419 = (v418 + v417) >> 1;
  1289.                 v321 = *(_DWORD *)(v490 + 20);
  1290.                 if ( *(_DWORD *)(v563 + 4 * v419) == v545 )
  1291.                     break;
  1292.                 if ( *(_DWORD *)(v563 + 4 * v419) <= v545 )
  1293.                     v417 = v419 + 1;
  1294.                 else
  1295.                     v418 = v419 - 1;
  1296.                 }
  1297.                 v327 = v568;
  1298.                 if ( *(_DWORD *)(*(_DWORD *)(squad + 0xC8) + 4 * v419) == *(_DWORD *)(unit + 0xA8) )
  1299.                 insertIntoSortedVector(v545, unit + 12 * unit->military.cur_uniform + 0x114);
  1300.             }
  1301.             else
  1302.             {
  1303.         LABEL_740:
  1304.                 insertIntoSortedVector(v545, unit + 12 * unit->military.cur_uniform + 0x114);
  1305.                 v416 = insertIntoSortedVector(*(_DWORD *)(v490 + 20), v578);
  1306.                 if ( v416 >= (*(_DWORD *)(squad + 0xCC) - *(_DWORD *)(squad + 0xC8)) >> 2 )
  1307.                 {
  1308.                 sub_80E86D0(v577, v575);
  1309.                 }
  1310.                 else
  1311.                 {
  1312.                 if ( v416 != -1 )
  1313.                     sub_81374F0(v577, v416, v575);
  1314.                 }
  1315.             }
  1316.         LABEL_562:
  1317.             v327 -= 4;
  1318.             v328 = v453-- - 1 < 0;
  1319.             if ( !v328 )
  1320.             {
  1321.                 v323 = *(_DWORD *)(v473 + 0x24);
  1322.                 continue;
  1323.             }
  1324.             break;
  1325.             }
  1326.         LABEL_557:
  1327.             v522 -= 4;
  1328.             v322 = v510-- - 1 < 0;
  1329.             if ( !v322 )
  1330.             {
  1331.             v319 = unit->inventory.start;
  1332.             continue;
  1333.             }
  1334.             break;
  1335.         }
  1336.         if ( v533 <= 0 )
  1337.         {
  1338.             cur_uniform = unit->military.cur_uniform;
  1339.             goto LABEL_46;
  1340.         }
  1341.         LABEL_583:
  1342.         v339 = *(_DWORD *)(squad + 0x98);
  1343.         v546 = ((*(_DWORD *)(squad + 0x9C) - v339) >> 2) - 1;
  1344.         if ( v546 < 0 )
  1345.         {
  1346.             cur_uniform = unit->military.cur_uniform;
  1347.             goto LABEL_46;
  1348.         }
  1349.         v340 = 4 * v546;
  1350.         v554 = 4 * v546;
  1351.         v561 = squad + 0xC8;
  1352.         v573 = unit + 0xA8;
  1353.         while ( 2 )
  1354.         {
  1355.             v341 = *(_DWORD *)(v339 + v340);
  1356.             v491 = v341;
  1357.             if ( *(_BYTE *)(v341 + 16) & 1 )
  1358.             {
  1359.             v344 = v341;
  1360.             v342 = *(_DWORD *)(v341 + 20);
  1361.             v343 = ((*(_DWORD *)(v344 + 24) - v342) >> 2) - 1;
  1362.             v454 = v343;
  1363.             if ( v343 >= 0 )
  1364.             {
  1365.                 v474 = 4 * v343;
  1366.                 v345 = 4 * v343;
  1367.                 while ( 1 )
  1368.                 {
  1369.                 v347 = *(_DWORD *)(squad + 0xBC);
  1370.                 v346 = *(_DWORD *)(squad + 0xC0);
  1371.                 v348 = *(_DWORD *)(v342 + v345);
  1372.                 if ( v347 >= v346 )
  1373.                     goto LABEL_593;
  1374.                 v349 = *(_DWORD *)(squad + 0xBC);
  1375.                 if ( v348 != *(_DWORD *)v347 )
  1376.                     break;
  1377.                 v350 = 0;
  1378.         LABEL_607:
  1379.                 if ( *(_DWORD *)(*(_DWORD *)(squad + 0xC8) + 4 * v350) == *(_DWORD *)(unit + 0xA8) )
  1380.                     goto LABEL_593;
  1381.                 v474 -= 4;
  1382.                 v356 = v454-- - 1 < 0;
  1383.                 if ( v356 )
  1384.                     goto LABEL_609;
  1385.         LABEL_605:
  1386.                 v345 = v474;
  1387.                 v342 = *(_DWORD *)(v491 + 20);
  1388.                 }
  1389.                 while ( 1 )
  1390.                 {
  1391.                 v349 += 4;
  1392.                 if ( v346 <= v349 )
  1393.                     break;
  1394.                 if ( v348 == *(_DWORD *)v349 )
  1395.                 {
  1396.                     v350 = (signed int)(v349 - v347) >> 2;
  1397.                     if ( v350 == -1 )
  1398.                     break;
  1399.                     goto LABEL_607;
  1400.                 }
  1401.                 }
  1402.         LABEL_593:
  1403.                 if ( (world.items.all.end - world.items.all.start) >> 2 )
  1404.                 {
  1405.                 if ( v348 != -1 )
  1406.                 {
  1407.                     v351 = ((world.items.all.end - world.items.all.start) >> 2) - 1;
  1408.                     if ( v351 >= 0 )
  1409.                     {
  1410.                     v352 = v351 >> 1;
  1411.                     v353 = *(_DWORD *)(*(_DWORD *)(world.items.all.start + 4 * (v351 >> 1)) + 20);
  1412.                     v523 = *(_DWORD *)(world.items.all.start + 4 * (v351 >> 1));
  1413.                     if ( v348 != v353 )
  1414.                     {
  1415.                         if ( (world.items.all.end - world.items.all.start) >> 2 == 1 )
  1416.                         goto LABEL_604;
  1417.                         v354 = 0;
  1418.                         while ( 1 )
  1419.                         {
  1420.                         if ( v348 < v353 )
  1421.                         {
  1422.                             v351 = v352 - 1;
  1423.                             if ( v354 > v352 - 1 )
  1424.                             goto LABEL_604;
  1425.                         }
  1426.                         else
  1427.                         {
  1428.                             v354 = v352 + 1;
  1429.                             if ( v352 + 1 > v351 )
  1430.                             goto LABEL_604;
  1431.                         }
  1432.                         v352 = (v351 + v354) >> 1;
  1433.                         v353 = *(_DWORD *)(*(_DWORD *)(world.items.all.start + 4 * v352) + 20);
  1434.                         if ( v348 == v353 )
  1435.                             break;
  1436.                         if ( v354 == v351 )
  1437.                             goto LABEL_604;
  1438.                         }
  1439.                         v523 = *(_DWORD *)(world.items.all.start + 4 * v352);
  1440.                     }
  1441.                     if ( v523 )
  1442.                     {
  1443.                         sub_85D1880(v523, &item_x, &item_y, &item_z);
  1444.                         if ( (unsigned __int8)sub_88D67E0(unit, item_x, item_y, item_z, 1) )
  1445.                         {
  1446.                         v511 = (*(int (__cdecl **)(int))(*(_DWORD *)v523 + 0x214))(v523);
  1447.                         insertIntoSortedVector(v348, unit + 12 * unit->military.cur_uniform + 276);
  1448.                         v358 = insertIntoSortedVector(v348, squad + 0xBC);
  1449.                         v359 = *(_DWORD *)(squad + 0xCC);
  1450.                         v360 = *(_DWORD *)(squad + 0xC8);
  1451.                         if ( v358 >= (*(_DWORD *)(squad + 0xCC) - v360) >> 2 )
  1452.                         {
  1453.                             if ( v359 == *(_DWORD *)(squad + 0xD0) )
  1454.                             {
  1455.                             sub_8052120(v561, *(_DWORD *)(squad + 0xCC), v573);
  1456.                             goto LABEL_620;
  1457.                             }
  1458.                         }
  1459.                         else
  1460.                         {
  1461.                             if ( v358 == -1 )
  1462.                             goto LABEL_620;
  1463.                             v361 = v360 + 4 * v358;
  1464.                             if ( v359 == *(_DWORD *)(squad + 0xD0) )
  1465.                             {
  1466.                             sub_8052120(v561, v361, v573);
  1467.                             goto LABEL_620;
  1468.                             }
  1469.                             if ( v359 != v361 )
  1470.                             {
  1471.                             v594 = *(_DWORD *)(unit + 0xA8);
  1472.                             sub_8053990(v561, v361, &v594);
  1473.                             goto LABEL_620;
  1474.                             }
  1475.                         }
  1476.                         if ( v359 )
  1477.                             *(_DWORD *)v359 = *(_DWORD *)(unit + 0xA8);
  1478.                         *(_DWORD *)(squad + 0xCC) = v359 + 4;
  1479.         LABEL_620:
  1480.                         v533 -= v511;
  1481.                         if ( v533 <= 0 )
  1482.                         {
  1483.                             cur_uniform = unit->military.cur_uniform;
  1484.                             goto LABEL_46;
  1485.                         }
  1486.                         goto LABEL_604;
  1487.                         }
  1488.                     }
  1489.                     }
  1490.                 }
  1491.                 }
  1492.         LABEL_604:
  1493.                 v474 -= 4;
  1494.                 v355 = v454-- - 1 < 0;
  1495.                 if ( v355 )
  1496.                 goto LABEL_609;
  1497.                 goto LABEL_605;
  1498.             }
  1499.             }
  1500.         LABEL_609:
  1501.             if ( v533 > 0 )
  1502.             {
  1503.             v554 -= 4;
  1504.             v357 = v546-- - 1 < 0;
  1505.             if ( v357 )
  1506.             {
  1507.                 cur_uniform = unit->military.cur_uniform;
  1508.                 goto LABEL_46;
  1509.             }
  1510.             v339 = *(_DWORD *)(squad + 0x98);
  1511.             v340 = v554;
  1512.             continue;
  1513.             }
  1514.             break;
  1515.         }
  1516.  
  1517.        
  1518.        
  1519.     }
  1520.     else if (cur_uniform == 3 && position->quiver != -1)
  1521.     {
  1522.         cur_uniform = unit->military.cur_uniform;
  1523.         LABEL_46:
  1524.         if ( cur_uniform != 3 )
  1525.         {
  1526.         LABEL_47:
  1527.             v515 = &item_x;
  1528.             goto LABEL_48;
  1529.         }
  1530.         if ( *(_DWORD *)(position + 0xA8) == 0xFFFFFFFF )
  1531.         {
  1532.             v515 = &item_x;
  1533.             goto LABEL_48;
  1534.         }
  1535.         v273 = unit->inventory.start;
  1536.         v274 = ((unit->inventory.end - v273) >> 2) - 1;
  1537.         v508 = v274;
  1538.         if ( v274 < 0 )
  1539.         {
  1540.             v532 = 25;
  1541.             goto LABEL_509;
  1542.         }
  1543.         v275 = 4 * v274;
  1544.         v276 = squad + 0xBC;
  1545.         v521 = v275;
  1546.         v532 = 25;
  1547.         v576 = squad + 0xBC;
  1548.         v570 = unit + 0xA8;
  1549.         v574 = squad + 0xC8;
  1550.         while ( 2 )
  1551.         {
  1552.             if ( (unsigned __int16)(****(int (__fastcall *****)(_DWORD))(v273 + v275))(v276) != 61
  1553.             || (v276 = v521,
  1554.                 v280 = **(_DWORD **)(unit->inventory.start + v521),
  1555.                 v471 = **(_DWORD **)(unit->inventory.start + v521),
  1556.                 v281 = *(_DWORD *)(v280 + 0x28),
  1557.                 v278 = *(_DWORD *)(v280 + 0x24),
  1558.                 v279 = ((v281 - v278) >> 2) - 1,
  1559.                 v451 = v279,
  1560.                 v279 < 0) )
  1561.             goto LABEL_478;
  1562.             v282 = 4 * v279;
  1563.             while ( 2 )
  1564.             {
  1565.             if ( (*(int (__cdecl **)(_DWORD))(**(_DWORD **)(v278 + v282) + 8))(*(_DWORD *)(v278 + v282)) != 10
  1566.                 || (v284 = (*(int (__cdecl **)(_DWORD))(**(_DWORD **)(*(_DWORD *)(v471 + 0x24) + v282) + 12))(*(_DWORD *)(*(_DWORD *)(v471 + 0x24) + v282)),
  1567.                     v488 = v284,
  1568.                     !v284)
  1569.                 || (unsigned __int16)(**(int (__cdecl ***)(_DWORD))v284)(v284) != 38
  1570.                 || (v286 = (*(int (__cdecl **)(int))(*(_DWORD *)v488 + 0x214))(v488),
  1571.                     v276 = *(_DWORD *)(squad + 0x98),
  1572.                     v532 -= v286,
  1573.                     v285 = ((*(_DWORD *)(squad + 156) - v276) >> 2) - 1,
  1574.                     v285 < 0) )
  1575.                 goto LABEL_483;
  1576.             v287 = 4 * v285;
  1577.             v551 = v282;
  1578.             v559 = squad;
  1579.             v565 = unit;
  1580.             while ( 2 )
  1581.             {
  1582.                 v288 = *(_DWORD *)(v276 + v287);
  1583.                 if ( !(*(_BYTE *)(v288 + 16) & 2)
  1584.                 || (v289 = *(_DWORD *)(v288 + 20),
  1585.                     v537 = *(_DWORD *)(v488 + 20),
  1586.                     v290 = (*(_DWORD *)(v288 + 24) - v289) >> 2,
  1587.                     !v290)
  1588.                 || v537 == -1
  1589.                 || (v291 = v290 - 1, v291 < 0) )
  1590.                 {
  1591.         LABEL_490:
  1592.                 v287 -= 4;
  1593.                 --v285;
  1594.                 if ( v285 < 0 )
  1595.                 {
  1596.                     v282 = v551;
  1597.                     squad = v559;
  1598.                     unit = v565;
  1599.                     goto LABEL_483;
  1600.                 }
  1601.                 continue;
  1602.                 }
  1603.                 break;
  1604.             }
  1605.             v292 = v291 >> 1;
  1606.             v293 = *(_DWORD *)(v289 + 4 * (v291 >> 1));
  1607.             if ( v537 != v293 )
  1608.             {
  1609.                 v543 = 0;
  1610.                 do
  1611.                 {
  1612.                 if ( v537 < v293 )
  1613.                     v291 = v292 - 1;
  1614.                 else
  1615.                     v543 = v292 + 1;
  1616.                 if ( v543 > v291 )
  1617.                     goto LABEL_490;
  1618.                 v292 = (v291 + v543) >> 1;
  1619.                 v293 = *(_DWORD *)(v289 + 4 * v292);
  1620.                 }
  1621.                 while ( v537 != v293 );
  1622.             }
  1623.             squad = v559;
  1624.             v282 = v551;
  1625.             unit = v565;
  1626.             v295 = *(_DWORD *)(v559 + 0xBC);
  1627.             v294 = (*(_DWORD *)(v559 + 0xC0) - v295) >> 2;
  1628.             if ( v294 )
  1629.             {
  1630.                 v412 = v294 - 1;
  1631.                 v411 = 0;
  1632.                 v562 = v551;
  1633.                 v556 = v295;
  1634.                 while ( 1 )
  1635.                 {
  1636.                 if ( v411 > v412 )
  1637.                 {
  1638.                     v282 = v562;
  1639.                     goto LABEL_504;
  1640.                 }
  1641.                 v413 = (v412 + v411) >> 1;
  1642.                 v276 = *(_DWORD *)(v488 + 20);
  1643.                 if ( *(_DWORD *)(v556 + 4 * v413) == v537 )
  1644.                     break;
  1645.                 if ( *(_DWORD *)(v556 + 4 * v413) > v537 )
  1646.                     v412 = v413 - 1;
  1647.                 else
  1648.                     v411 = v413 + 1;
  1649.                 }
  1650.                 v282 = v562;
  1651.                 if ( *(_DWORD *)(*(_DWORD *)(squad + 0xC8) + 4 * v413) == *(_DWORD *)(v565 + 0xA8) )
  1652.                 insertIntoSortedVector(v537, v565 + 12 * *(_WORD *)(v565 + 0x110) + 0x114);
  1653.             }
  1654.             else
  1655.             {
  1656.         LABEL_504:
  1657.                 insertIntoSortedVector(v537, v565 + 12 * *(_WORD *)(v565 + 0x110) + 0x114);
  1658.                 v296 = insertIntoSortedVector(*(_DWORD *)(v488 + 0x14), v576);
  1659.                 if ( v296 >= (*(_DWORD *)(squad + 0xCC) - *(_DWORD *)(squad + 0xC8)) >> 2 )
  1660.                 {
  1661.                 sub_80E86D0(v574, v570);
  1662.                 }
  1663.                 else
  1664.                 {
  1665.                 if ( v296 != -1 )
  1666.                     sub_81374F0(v574, v296, v570);
  1667.                 }
  1668.             }
  1669.         LABEL_483:
  1670.             v282 -= 4;
  1671.             v283 = v451-- - 1 < 0;
  1672.             if ( !v283 )
  1673.             {
  1674.                 v278 = *(_DWORD *)(v471 + 0x24);
  1675.                 continue;
  1676.             }
  1677.             break;
  1678.             }
  1679.         LABEL_478:
  1680.             v521 -= 4;
  1681.             v277 = v508-- - 1 < 0;
  1682.             if ( !v277 )
  1683.             {
  1684.             v273 = unit->inventory.start;
  1685.             v275 = v521;
  1686.             continue;
  1687.             }
  1688.             break;
  1689.         }
  1690.         if ( v532 <= 0 )
  1691.         {
  1692.             v515 = &item_x;
  1693.         }
  1694.         else
  1695.         {
  1696.         LABEL_509:
  1697.             v297 = *(_DWORD *)(squad + 0x98);
  1698.             v544 = ((*(_DWORD *)(squad + 0x9C) - v297) >> 2) - 1;
  1699.             if ( v544 >= 0 )
  1700.             {
  1701.             v515 = &item_x;
  1702.             v552 = 4 * v544;
  1703.             v566 = squad + 0xC8;
  1704.             v571 = unit + 0xA8;
  1705.             while ( 1 )
  1706.             {
  1707.                 v298 = *(_DWORD *)(v297 + v552);
  1708.                 v489 = v298;
  1709.                 if ( *(_BYTE *)(v298 + 16) & 2 )
  1710.                 {
  1711.                 v301 = v298;
  1712.                 v299 = *(_DWORD *)(v298 + 20);
  1713.                 v300 = ((*(_DWORD *)(v301 + 24) - v299) >> 2) - 1;
  1714.                 v452 = v300;
  1715.                 if ( v300 >= 0 )
  1716.                     break;
  1717.                 }
  1718.         LABEL_535:
  1719.                 if ( v532 <= 0 || (v552 -= 4, v314 = v544 - 1 < 0, --v544, v314) )
  1720.                 goto LABEL_48;
  1721.                 v297 = *(_DWORD *)(squad + 0x98);
  1722.             }
  1723.             v472 = 4 * v300;
  1724.             v302 = 4 * v300;
  1725.             while ( 2 )
  1726.             {
  1727.                 v304 = *(_DWORD *)(squad + 0xBC);
  1728.                 v303 = *(_DWORD *)(squad + 0xC0);
  1729.                 v305 = *(_DWORD *)(v299 + v302);
  1730.                 if ( v304 < v303 )
  1731.                 {
  1732.                 v306 = *(_DWORD *)(squad + 0xBC);
  1733.                 if ( v305 == *(_DWORD *)v304 )
  1734.                 {
  1735.                     v307 = 0;
  1736.         LABEL_533:
  1737.                     if ( *(_DWORD *)(*(_DWORD *)(squad + 0xC8) + 4 * v307) != *(_DWORD *)(unit + 0xA8) )
  1738.                     {
  1739.                     v472 -= 4;
  1740.                     v313 = v452-- - 1 < 0;
  1741.                     if ( v313 )
  1742.                         goto LABEL_535;
  1743.                     goto LABEL_531;
  1744.                     }
  1745.                 }
  1746.                 else
  1747.                 {
  1748.                     while ( 1 )
  1749.                     {
  1750.                     v306 += 4;
  1751.                     if ( v303 <= v306 )
  1752.                         break;
  1753.                     if ( v305 == *(_DWORD *)v306 )
  1754.                     {
  1755.                         v307 = (signed int)(v306 - v304) >> 2;
  1756.                         if ( v307 == -1 )
  1757.                         break;
  1758.                         goto LABEL_533;
  1759.                     }
  1760.                     }
  1761.                 }
  1762.                 }
  1763.                 if ( (world.items.all.end - world.items.all.start) >> 2 )
  1764.                 {
  1765.                 if ( v305 != -1 )
  1766.                 {
  1767.                     v308 = ((world.items.all.end - world.items.all.start) >> 2) - 1;
  1768.                     if ( v308 >= 0 )
  1769.                     {
  1770.                     v309 = v308 >> 1;
  1771.                     v310 = *(_DWORD *)(*(_DWORD *)(world.items.all.start + 4 * (v308 >> 1)) + 20);
  1772.                     v538 = *(_DWORD *)(world.items.all.start + 4 * (v308 >> 1));
  1773.                     if ( v305 == v310 )
  1774.                         goto LABEL_539;
  1775.                     if ( (world.items.all.end - world.items.all.start) >> 2 != 1 )
  1776.                     {
  1777.                         v311 = 0;
  1778.                         while ( 1 )
  1779.                         {
  1780.                         if ( v305 < v310 )
  1781.                         {
  1782.                             v308 = v309 - 1;
  1783.                             if ( v311 > v309 - 1 )
  1784.                             goto LABEL_530;
  1785.                         }
  1786.                         else
  1787.                         {
  1788.                             v311 = v309 + 1;
  1789.                             if ( v309 + 1 > v308 )
  1790.                             goto LABEL_530;
  1791.                         }
  1792.                         v309 = (v308 + v311) >> 1;
  1793.                         v310 = *(_DWORD *)(*(_DWORD *)(world.items.all.start + 4 * v309) + 20);
  1794.                         if ( v305 == v310 )
  1795.                             break;
  1796.                         if ( v311 == v308 )
  1797.                             goto LABEL_530;
  1798.                         }
  1799.                         v538 = *(_DWORD *)(world.items.all.start + 4 * v309);
  1800.         LABEL_539:
  1801.                         if ( v538 )
  1802.                         {
  1803.                         sub_85D1880(v538, &item_z, &item_y, &item_x);
  1804.                         if ( (unsigned __int8)sub_88D67E0(unit, item_z, item_y, item_x, 1) )
  1805.                         {
  1806.                             v509 = (*(int (__cdecl **)(int))(*(_DWORD *)v538 + 0x214))(v538);
  1807.                             insertIntoSortedVector(v305, unit + 12 * unit->military.cur_uniform + 0x114);
  1808.                             v315 = insertIntoSortedVector(v305, squad + 0xBC);
  1809.                             v316 = *(_DWORD *)(squad + 0xCC);
  1810.                             v317 = *(_DWORD *)(squad + 0xC8);
  1811.                             if ( v315 >= (*(_DWORD *)(squad + 0xCC) - v317) >> 2 )
  1812.                             {
  1813.                             if ( v316 == *(_DWORD *)(squad + 0xD0) )
  1814.                             {
  1815.                                 sub_8052120(v566, *(_DWORD *)(squad + 0xCC), v571);
  1816.                                 goto LABEL_546;
  1817.                             }
  1818.                             goto LABEL_548;
  1819.                             }
  1820.                             if ( v315 != -1 )
  1821.                             {
  1822.                             v318 = v317 + 4 * v315;
  1823.                             if ( v316 == *(_DWORD *)(squad + 0xD0) )
  1824.                             {
  1825.                                 sub_8052120(v566, v318, v571);
  1826.                                 goto LABEL_546;
  1827.                             }
  1828.                             if ( v316 != v318 )
  1829.                             {
  1830.                                 v594 = *(_DWORD *)(unit + 0xA8);
  1831.                                 sub_8053990(v566, v318, &v594);
  1832.                                 goto LABEL_546;
  1833.                             }
  1834.         LABEL_548:
  1835.                             if ( v316 )
  1836.                                 *(_DWORD *)v316 = *(_DWORD *)(unit + 0xA8);
  1837.                             *(_DWORD *)(squad + 0xCC) = v316 + 4;
  1838.                             }
  1839.         LABEL_546:
  1840.                             v532 -= v509;
  1841.                             if ( v532 <= 0 )
  1842.                             goto LABEL_48;
  1843.                         }
  1844.                         }
  1845.                     }
  1846.                     }
  1847.                 }
  1848.                 }
  1849.         LABEL_530:
  1850.                 v472 -= 4;
  1851.                 v312 = v452-- - 1 < 0;
  1852.                 if ( v312 )
  1853.                 goto LABEL_535;
  1854.         LABEL_531:
  1855.                 v302 = v472;
  1856.                 v299 = *(_DWORD *)(v489 + 20);
  1857.                 continue;
  1858.             }
  1859.             }
  1860.             v515 = &item_x;
  1861.         }        
  1862.     }
  1863.    
  1864.  
  1865. LABEL_48:
  1866.   if ( shaped_set.start )
  1867.     operator delete(shaped_set.start);
  1868.   if ( size_accum.start )
  1869.   {
  1870.     operator delete(size_accum.start);
  1871.     cur_uniform = unit->military.cur_uniform;
  1872.   }
  1873.   else
  1874.   {
  1875. LABEL_262:
  1876.     cur_uniform = unit->military.cur_uniform;
  1877.   }
  1878.  
  1879. DONE:
  1880.  
  1881.     // scan current inventory
  1882.     v36 = *(_DWORD *)(unit->military.uniform_pending);
  1883.     v581 = 0;
  1884.     in_inventory_vec = 0;
  1885.     in_inventory_vec.end = 0;
  1886.     *(_DWORD *)(unit->military.uniform_pending.end) = v36;
  1887.  
  1888.     unit->military.uniform_pending.clear();
  1889.     unit->military.uniform_alien.clear();
  1890.  
  1891.     cur_uniform_start = *(_DWORD *)(unit + 12 * cur_uniform + 0x114);
  1892.     cur_uniform_end = *(_DWORD *)(unit + 12 * cur_uniform + 0x118);
  1893.  
  1894.     in_inventory_vec.resize((cur_uniform_end - cur_uniform_start) >> 2);
  1895.    
  1896.     v37 = in_inventory_vec.end;
  1897.     v38 = in_inventory_vec;
  1898.     v439 = in_inventory_vec.end - (_DWORD)in_inventory_vec;
  1899.    
  1900.     if (!in_inventory_vec.empty())
  1901.         memset(in_inventory_vec.start, 0, in_inventory_vec.size());
  1902.  
  1903.     for (i = unit->inventory.size()-1; i >= 0; i--)
  1904.     {
  1905.         inv_item = unit->inventory[i];
  1906.         inv_mode = inv_item->mode;
  1907.      
  1908.         if (inv_mode == 6 || !inv_item->mode || inv_mode == 9)
  1909.             continue;
  1910.        
  1911.         if (inv_item->item->vtable<0>() == 81 && inv_item->mode == 2) // splint
  1912.             continue;
  1913.      
  1914.      
  1915.         if ( inv_item->item->vtable<0>() == 57 && inv_item->mode == 5 // cloth
  1916.           || inv_item->item->vtable<0>() == 82 && inv_item->mode == 1 // crutch
  1917.           || inv_item->item->vtable<0>() == 84 && inv_item->mode == 5 ) // cast
  1918.           continue;
  1919.  
  1920.         if (inv_item->item->vtable<0>() == 61) // quiver
  1921.         {
  1922.             for (int j = inv_item->item->refs.size()-1; j >= 0; j--)
  1923.             {
  1924.                 if (inv_item->item->refs[j]->vtable<8>() != 10)
  1925.                     continue;
  1926.                 item *ammo = inv_item->item->refs[j]->vtable<0xc>();
  1927.                 if (ammo && ammo->vtable<0>() == 38) { // ammo
  1928.                     if (binsearch(unit->military.uniforms[cur_uniform], ammo->id, &idx))
  1929.                         in_inventory_vec[idx] = 1;
  1930.                 }
  1931.             }
  1932.         }
  1933.  
  1934.         if (binsearch(unit->military.uniforms[cur_uniform], inv_info->item->id, &idx))
  1935.             in_inventory_vec[idx] = 1;
  1936.         else
  1937.             insertIntoSortedVector(inv_info->item->id, unit->military.uniform_alien);
  1938.     }
  1939.  
  1940.   // Build the pending list
  1941.   if ( v439 <= 0 )
  1942.   {
  1943.     in_inventory_vec = in_inventory_vec;
  1944.   }
  1945.   else
  1946.   {
  1947.     in_inventory_vec = in_inventory_vec;
  1948.     v59 = 0;
  1949.     do
  1950.     {
  1951.       if ( !*((_BYTE *)in_inventory_vec + v59) )
  1952.       {
  1953.         v60 = *(_DWORD *)(unit->military.uniform_pending.end);
  1954.         if ( v60 == *(_DWORD *)(unit->military.uniform_pending.limit) )
  1955.         {
  1956.           needs_pickup_id_vec = *(_DWORD *)(unit + 12 * unit->military.cur_uniform + 0x114);
  1957.           sub_8052120(unit->military.uniform_pending, v60, needs_pickup_id_vec + 4 * v59);
  1958.           in_inventory_vec = in_inventory_vec;
  1959.         }
  1960.         else
  1961.         {
  1962.           if ( v60 )
  1963.             *(_DWORD *)v60 = *(_DWORD *)(needs_pickup_id_vec + 4 * v59);
  1964.           *(_DWORD *)(unit->military.uniform_pending.end) = v60 + 4;
  1965.         }
  1966.       }
  1967.       ++v59;
  1968.     }
  1969.     while ( v59 < v439 );
  1970.   }
  1971.  
  1972.   unit->military.pickup_equipment_bit &= 0xFFFFFFFEu;
  1973.   if ( in_inventory_vec )
  1974.     operator delete(in_inventory_vec);
  1975. }