Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- signed int __fastcall sub_22EBB8(int a1, int OUTPKM, int a3, _DWORD *a4)
- {
- int outpkm; // r4@1
- pml::pokepara::CoreParam **v5; // r5@1
- _DWORD *v6; // r7@1
- pml::pokepara::CoreParam *v7; // r0@2
- int v8; // r0@4
- gfl2::math::Random *v9; // r6@4
- pml::pokepara::CoreParam *v10; // r0@5
- int species; // r0@7
- bool nidoU; // zf@7
- bool nidoM; // zf@10
- signed __int16 v14; // r1@15
- gfl2::math::Random *v15; // r10@18
- pml::pokepara::CoreParam *v16; // r0@19
- int v17; // r0@21
- signed __int16 v18; // r6@21
- bool illuvolbeat; // zf@21
- pml::pokepara::CoreParam *v20; // r0@29
- int v21; // r0@31
- bool v22; // zf@31
- int v23; // r6@35
- int v24; // r9@35
- int v25; // r0@35
- int v26; // r2@37
- pml::pokepara::CoreParam *v27; // r6@42
- int v28; // r2@44
- int v29; // r0@44
- pml::pokepara::CoreParam *bredParent; // r0@49
- int v31; // r0@51
- int v32; // r0@51
- bool v33; // zf@51
- gfl2::math::Random *v34; // r9@55
- unsigned int v35; // r0@55
- int v36; // r6@62
- int v37; // r9@62
- __int16 v38; // r11@62
- unsigned int v39; // r6@69
- pml::pokepara::CoreParam *v40; // r0@70
- signed int v41; // r0@72
- int v42; // r6@85
- int v43; // r0@85
- bool destiny; // zf@85
- signed int IVsToInherit; // r0@88
- signed int v46; // r11@90
- int v47; // r1@90
- int v48; // r6@90
- int v49; // r0@90
- int v50; // r1@94
- unsigned int v51; // r9@94
- unsigned int v52; // r0@94
- signed int v53; // r0@96
- gfl2::math::Random *v54; // r9@106
- int v55; // r0@107
- int v56; // r6@107
- int v57; // r0@107
- bool v58; // zf@107
- gfl2::math::Random *v59; // r8@111
- unsigned int v60; // r6@111
- __int16 v61; // r0@112
- int v62; // r1@112
- unsigned int IVctr; // r6@113
- pml::pokepara::CoreParam *v64; // r0@115
- int charm; // r6@120
- int v66; // r10@120
- unsigned int PIDReRolls; // r8@120
- int pkm0Language; // r9@120
- unsigned int rrCtr; // r6@124
- int pid; // r0@125
- unsigned int v71; // r9@135
- unsigned int v72; // r6@135
- unsigned int v73; // r8@136
- int v74; // r1@136
- unsigned int v75; // r12@138
- unsigned int v76; // r2@139
- int v77; // r3@139
- int v78; // r3@143
- int v79; // r8@143
- bool v80; // zf@143
- __int16 v81; // r3@149
- __int16 v82; // r12@149
- int v83; // r0@151
- gfl2::math::Random *v84; // r9@155
- int v85; // r7@155
- int v86; // r8@155
- int v87; // r6@155
- int v88; // r0@155
- int v89; // r5@155
- signed int result; // r0@162
- bool v91; // zf@162
- int v92; // [sp+0h] [bp-E0h]@35
- char v93; // [sp+8h] [bp-D8h]@151
- int v94; // [sp+10h] [bp-D0h]@62
- gfl2::math::Random *v95; // [sp+14h] [bp-CCh]@62
- int v96[4]; // [sp+18h] [bp-C8h]@90
- int v97; // [sp+28h] [bp-B8h]@90
- int v98; // [sp+2Ch] [bp-B4h]@90
- int v99; // [sp+6Ch] [bp-74h]@35
- int v100; // [sp+70h] [bp-70h]@35
- int v101; // [sp+74h] [bp-6Ch]@35
- int v102; // [sp+78h] [bp-68h]@35
- int v103; // [sp+7Ch] [bp-64h]@35
- int v104; // [sp+80h] [bp-60h]@35
- int v105; // [sp+84h] [bp-5Ch]@35
- int v106; // [sp+88h] [bp-58h]@35
- int v107; // [sp+8Ch] [bp-54h]@35
- int v108; // [sp+ACh] [bp-34h]@1
- int v109; // [sp+B0h] [bp-30h]@1
- int v110; // [sp+B4h] [bp-2Ch]@1
- _DWORD *v111; // [sp+B8h] [bp-28h]@1
- v108 = a1;
- v109 = OUTPKM;
- v110 = a3;
- v111 = a4;
- outpkm = OUTPKM;
- v5 = a3;
- v6 = a4;
- *(OUTPKM + 16) = *a4;
- *(OUTPKM + 28) = 1;
- if ( pml::pokepara::CoreParam::GetMonsNo(*(a3 + 4)) == 132 )// ditto
- v7 = *v5;
- else
- v7 = v5[1];
- v8 = pml::pokepara::CoreParam::GetMonsNo(v7);
- *(outpkm + 24) = sub_2954E4(v8);
- v9 = v6[3];
- if ( pml::pokepara::CoreParam::GetMonsNo(v5[1]) == 132 )// ditto
- v10 = *v5;
- else
- v10 = v5[1];
- species = pml::pokepara::CoreParam::GetMonsNo(v10);
- nidoU = species == 29; // nidoran F
- if ( species != 29 )
- nidoU = species == 32; // nidoran M
- if ( nidoU )
- goto nidoranGenderDetermination;
- nidoM = species == 33; // nidorino
- if ( species != 33 )
- nidoM = species == 34; // nidoking
- if ( nidoM )
- {
- nidoranGenderDetermination:
- if ( gfl2::math::Random::Next(v9, 2u) ) // 50%
- v14 = 29; // F
- else
- v14 = 32; // M
- *(outpkm + 0x18) = v14; // set species
- }
- v15 = v6[3];
- if ( pml::pokepara::CoreParam::GetMonsNo(v5[1]) == 132 )// ditto
- v16 = *v5;
- else
- v16 = v5[1];
- v17 = pml::pokepara::CoreParam::GetMonsNo(v16);
- v18 = 313;
- illuvolbeat = v17 == 313; // isVolbeat
- if ( v17 != 313 )
- illuvolbeat = v17 == 314; // isIllumise
- if ( illuvolbeat ) // illumise/volbeat species
- {
- if ( gfl2::math::Random::Next(v15, 2u) ) // 50%
- v18 = 314; // if 1 => Illumise (Basically M/F)
- *(outpkm + 0x18) = v18; // set species
- }
- if ( pml::pokepara::CoreParam::GetMonsNo(v5[1]) == 132 )// ditto
- v20 = *v5;
- else
- v20 = v5[1];
- v21 = pml::pokepara::CoreParam::GetMonsNo(v20);
- v22 = v21 == 490; // manaphy
- if ( v21 == 490 )
- LOWORD(v21) = 489; // breed phione
- if ( v22 )
- *(outpkm + 24) = v21; // set species to phione
- v99 = 0;
- v100 = 0;
- v101 = 0;
- v102 = 0;
- v103 = 0;
- v104 = 0;
- v105 = 0;
- v106 = 0;
- v107 = 0;
- _aeabi_memcpy4(&v92, &incenseTable, 108);
- v23 = pml::pokepara::CoreParam::GetItem(*v5);
- v24 = pml::pokepara::CoreParam::GetItem(v5[1]);
- v25 = 0;
- while ( 1 )
- {
- if ( *(outpkm + 0x18) == *(&v92 + 3 * v25) )
- {
- v26 = *(&v92 + 3 * v25 + 1);
- if ( v26 != v23 && v26 != v24 )
- break;
- }
- if ( ++v25 >= 0xC )
- goto LABEL_41;
- }
- *(outpkm + 24) = *(&v92 + 3 * v25 + 2);
- LABEL_41:
- *(outpkm + 0x1A) = 0;
- if ( pml::pokepara::CoreParam::GetMonsNo(v5[1]) == 132 )// ditto
- v27 = *v5;
- else
- v27 = v5[1];
- v28 = pml::pokepara::CoreParam::GetMonsNo(v27);
- v29 = 0;
- while ( cosmeticFormSpec[v29] != v28 ) // check to see if it's a cosmetic formed species
- {
- if ( ++v29 >= 0xE ) // legal length
- goto LABEL_48;
- }
- *(outpkm + 26) = pml::pokepara::CoreParam::GetFormNo(v27);
- LABEL_48:
- if ( pml::pokepara::CoreParam::GetMonsNo(v5[1]) == 132 )// ditto
- bredParent = *v5;
- else
- bredParent = v5[1];
- v31 = pml::pokepara::CoreParam::GetMonsNo(bredParent);
- v32 = sub_2954E4(v31); // getChildSpecies
- v33 = v32 == 664;
- if ( v32 == 664 ) // scatterbug
- LOBYTE(v32) = *(v6 + 0x10); // form TID?
- if ( v33 )
- *(outpkm + 26) = v32;
- sub_22FA68(v108, outpkm, v5);
- v34 = v6[3];
- pml::personal::LoadPersonalData(*(outpkm + 24), *(outpkm + 26));
- v35 = pml::personal::GetPersonalParam(20); // gender
- if ( v35 )
- {
- if ( v35 == 254 )
- {
- *(outpkm + 0x1E) = 1; // female
- }
- else if ( v35 == 255 )
- {
- *(outpkm + 0x1E) = 2; // genderless
- }
- else
- {
- *(outpkm + 0x1E) = gfl2::math::Random::Next(v34, 0xFCu) + 1 < v35;// random gender
- }
- }
- else
- {
- *(outpkm + 0x1E) = 0; // male
- }
- *(outpkm + 0x20) = gfl2::math::Random::Next(v6[3], 25u);// nature
- v95 = v6[3];
- v36 = pml::pokepara::CoreParam::GetItem(*v5) == 229;// check if parents holding everstone
- v37 = pml::pokepara::CoreParam::GetItem(v5[1]) == 229;// everstone
- v38 = pml::pokepara::CoreParam::GetSeikaku(*v5);
- v94 = pml::pokepara::CoreParam::GetSeikaku(v5[1]);
- if ( !(v36 & v37) )
- {
- if ( !v36 )
- {
- if ( !v37 )
- goto LABEL_69;
- goto LABEL_68;
- }
- LABEL_66:
- *(outpkm + 32) = v38;
- goto LABEL_69;
- }
- if ( !gfl2::math::Random::Next(v95, 2u) )
- goto LABEL_66;
- LABEL_68:
- *(outpkm + 32) = v94;
- LABEL_69:
- v39 = gfl2::math::Random::Next(v6[3], 100u);
- if ( pml::pokepara::CoreParam::GetMonsNo(v5[1]) == 132 )// ditto
- v40 = *v5;
- else
- v40 = v5[1];
- v41 = sub_3AC0A4(v40);
- if ( !v41 )
- {
- if ( v39 < 80 ) // ability 1
- goto LABEL_76;
- setAbil1:
- *(outpkm + 0x22) = 1;
- goto LABEL_85;
- }
- if ( v41 == 1 )
- {
- if ( v39 < 20 )
- goto LABEL_76;
- goto setAbil1;
- }
- if ( v41 == 2 )
- {
- if ( v39 < 20 ) // ability 0
- goto LABEL_76;
- if ( v39 >= 40 ) // hidden ability inherited
- {
- *(outpkm + 0x22) = 2; // index 2
- goto LABEL_85;
- }
- goto setAbil1;
- }
- if ( v39 >= 0x32 )
- goto setAbil1;
- LABEL_76:
- *(outpkm + 0x22) = 0;
- LABEL_85:
- pml::personal::LoadPersonalData(*(outpkm + 0x18), *(outpkm + 0x1A));
- *(outpkm + 48) = pml::personal::GetPersonalParam(21);// hatch cycles total
- v42 = pml::pokepara::CoreParam::GetItem(*v5); // check parents for destiny knot
- v43 = pml::pokepara::CoreParam::GetItem(v5[1]);
- destiny = v42 == 280;
- if ( v42 != 280 )
- destiny = v43 == 280;
- if ( destiny )
- IVsToInherit = 5;
- else
- IVsToInherit = 3;
- *(outpkm + 0x58) = IVsToInherit;
- v46 = 0;
- v95 = v6[3]; // one byte worth of rand data
- v98 = 0x125; // power items
- v97 = 0x124;
- v96[0] = 0x126;
- v96[1] = 0x121;
- v96[2] = 0x122;
- v96[3] = 0x123;
- v47 = pml::pokepara::CoreParam::GetItem(*v5);
- v48 = 0;
- v49 = 0;
- while ( v96[v49] != v47 )
- {
- if ( ++v49 >= 6 )
- goto LABEL_94;
- }
- v48 = v49;
- v46 = 1;
- LABEL_94:
- v94 = 0;
- v50 = pml::pokepara::CoreParam::GetItem(v5[1]);// parent item
- v51 = 0;
- v52 = 0;
- do
- {
- if ( v96[v52] == v50 ) // power item match
- {
- v51 = v52;
- v53 = 1;
- v94 = 1; // result = 1
- goto LABEL_99;
- }
- ++v52;
- }
- while ( v52 < 6 );
- v53 = v94; // result = 0
- LABEL_99:
- if ( v53 & v46 )
- {
- if ( gfl2::math::Random::Next(v95, 2u) )
- goto LABEL_105;
- goto LABEL_103;
- }
- if ( v46 )
- {
- LABEL_103:
- *(outpkm + v48 + 0x48) = 1;
- ++*(outpkm + 0x54);
- goto LABEL_106;
- }
- if ( v94 )
- {
- LABEL_105:
- *(outpkm + v51 + 0x4E) = 1;
- ++*(outpkm + 0x54);
- }
- LABEL_106:
- v54 = v6[3];
- while ( *(outpkm + 0x54) < (*(outpkm + 0x54) >> 32) )
- {
- v55 = gfl2::math::Random::Next(v54, 6u); // IV slot
- v56 = outpkm + v55;
- v57 = *(outpkm + v55 + 0x48);
- v58 = v57 == 0;
- if ( !v57 )
- v58 = *(v56 + 0x4E) == 0;
- if ( v58 )
- {
- if ( gfl2::math::Random::Next(v54, 2u) )
- *(v56 + 0x4E) = 1;
- else
- *(v56 + 0x48) = 1;
- ++*(outpkm + 0x54);
- }
- }
- v59 = v6[3];
- v60 = 0;
- do
- { // get 6 random IVs
- v61 = gfl2::math::Random::Next(v59, 32u); // random IV
- v62 = outpkm + 2 * v60++;
- *(v62 + 0x24) = v61;
- }
- while ( v60 < 6 );
- IVctr = 0;
- do
- {
- if ( *(outpkm + IVctr + 0x48) )
- {
- v64 = *v5;
- }
- else
- {
- if ( !*(outpkm + IVctr + 0x4E) )
- goto LABEL_119;
- v64 = v5[1];
- }
- if ( v64 )
- *(outpkm + 2 * IVctr + 0x24) = pml::pokepara::CoreParam::GetNativeTalentPower(v64, IVctr);
- LABEL_119:
- ++IVctr;
- }
- while ( IVctr < 6 );
- *outpkm = sub_296154(v6[3]);
- charm = *(v6 + 8);
- v66 = v6[3];
- PIDReRolls = 0;
- pkm0Language = pml::pokepara::CoreParam::GetLangId(*v5);
- if ( pkm0Language != pml::pokepara::CoreParam::GetLangId(v5[1]) )
- PIDReRolls = 6;
- if ( charm )
- PIDReRolls += 2;
- rrCtr = 0;
- if ( PIDReRolls ) // generate PIDs
- {
- do
- {
- pid = sub_296154(v66); // get new PID
- *(outpkm + 8) = pid; // assign PID to baby
- if ( getIsShiny(*(outpkm + 0x10), pid) ) // if shiny, stop rerolling
- break;
- ++rrCtr; // increment before the while check
- }
- while ( rrCtr < PIDReRolls ); // while we have rolls left
- }
- sub_295388(*(outpkm + 0x18), *(outpkm + 0x1A));
- v71 = sub_295378();
- v72 = 0;
- if ( v71 )
- {
- do
- {
- v73 = sub_295364(v72);
- v74 = sub_295350(v72);
- if ( v73 > *(outpkm + 0x1C) )
- break;
- if ( v74 )
- {
- v75 = *(outpkm + 0x38);
- if ( !v75 )
- goto LABEL_169;
- v76 = *(outpkm + 0x38) & 1;
- v77 = 0;
- if ( v75 & 1 )
- {
- while ( *(outpkm + 2 * v77 + 0x3C) != v74 )
- {
- if ( v76 <= ++v77 )
- goto LABEL_142;
- }
- goto LABEL_150;
- }
- LABEL_142:
- while ( v75 > v76 )
- {
- v78 = outpkm + 2 * v76;
- v79 = *(v78 + 0x3C);
- v80 = v79 == v74;
- if ( v79 != v74 )
- v80 = *(v78 + 0x3E) == v74;
- if ( v80 )
- goto LABEL_150;
- v76 += 2;
- }
- if ( v75 >= 4 )
- {
- v81 = *(outpkm + 0x40);
- v82 = *(outpkm + 0x42);
- *(outpkm + 0x3C) = *(outpkm + 0x3E);
- *(outpkm + 0x3E) = v81;
- *(outpkm + 0x40) = v82;
- *(outpkm + 0x42) = v74;
- }
- else
- {
- LABEL_169:
- *(outpkm + 2 * v75 + 60) = v74;
- ++*(outpkm + 56);
- }
- }
- LABEL_150:
- ++v72;
- }
- while ( v72 < v71 );
- }
- sub_22F910(outpkm, v5);
- v83 = (*(*v108 + 0x34))();
- sub_22EAEC(&v93, v83);
- sub_22E9A0(&v93, *(dword_4DE720 + 0x14), *(outpkm + 0x18), *(outpkm + 0x1A));
- sub_22F7E4(outpkm, *v5, &v93);
- sub_22F7E4(outpkm, v5[1], &v93);
- if ( *(outpkm + 24) == 172 // pichu
- && (pml::pokepara::CoreParam::GetItem(*v5) == 236 || pml::pokepara::CoreParam::GetItem(v5[1]) == 236) )// light ball
- {
- addMovetoMovepool(outpkm, 344); // volt tackle
- }
- v84 = v6[3];
- v85 = pml::pokepara::CoreParam::GetMonsNo(v5[1]);
- v86 = pml::pokepara::CoreParam::GetMonsNo(*v5);
- v87 = pml::pokepara::CoreParam::GetMemories(v5[1], 8);
- v88 = pml::pokepara::CoreParam::GetMemories(*v5, 8);
- v89 = v88;
- if ( v85 == 132 ) // ditto
- {
- *(outpkm + 0x44) = v88; // inherit not-ditto
- }
- else if ( v85 == v86 ) // parent species match
- {
- if ( (gfl2::math::Random::Next(v84, 100u) + 1) <= 50 )
- v89 = v87;
- *(outpkm + 0x44) = v89; // inherit 50% from either
- }
- else
- {
- *(outpkm + 0x44) = v87;
- }
- result = *(outpkm + 0x44); // check the set memory
- v91 = result == 1;
- if ( result != 1 )
- v91 = result == 16;
- if ( v91 ) // set to 4 if 1 or 16
- {
- result = 4;
- *(outpkm + 0x44) = 4;
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement