comparison Items.cpp @ 473:7f1b00901cf7

Skill learning menu in shops
author Gloval
date Tue, 26 Feb 2013 02:09:56 +0400
parents fcdaa804074f
children 77430756f06a
comparison
equal deleted inserted replaced
471:c43f156a95c9 473:7f1b00901cf7
2241 2241
2242 2242
2243 2243
2244 // 4505CC: using guessed type int var_A0[32]; 2244 // 4505CC: using guessed type int var_A0[32];
2245 //----- (004B3703) -------------------------------------------------------- 2245 //----- (004B3703) --------------------------------------------------------
2246 int sub_4B3703( int _this ) 2246 void FillAviableSkillsToTeach( int _this )
2247 { 2247 {
2248 signed int v1; // edi@1 2248 char *v30; // ecx@65
2249 int v2; // eax@1 2249 unsigned int v29; // edx@56
2250 int v3; // ecx@1 2250 int v15; // ecx@19
2251 signed int v4; // ebx@1 2251 int v33; // [sp-4h] [bp-2Ch]@23
2252 int v5; // ecx@2 2252 int v34; // [sp-4h] [bp-2Ch]@43
2253 int v6; // ecx@3 2253 int v21; // ecx@34
2254 int v7; // ecx@4 2254 int v35[5]; // [sp+Ch] [bp-1Ch]@8
2255 int v8; // ecx@5 2255 int v37=0; // [sp+24h] [bp-4h]@1*
2256 int v9; // ecx@6 2256 int i=0;
2257 signed int v10; // ebx@13 2257
2258 signed int v11; // edi@14 2258 dword_F8B1DC = 0;
2259 signed int v12; // esi@15 2259
2260 unsigned int v13; // ecx@16 2260 switch (_this)
2261 int v14; // ecx@16 2261 {
2262 int v15; // ecx@17 2262 case 1: //shop weapon
2263 int v16; // ecx@19 2263 for (int i=0; i<2; ++i)
2264 int v17; // ecx@20
2265 int v18; // ecx@21
2266 signed int v19; // esi@32
2267 char *v20; // ecx@33
2268 int v21; // ecx@34
2269 int v22; // ecx@36
2270 int v23; // ecx@37
2271 int v24; // ecx@38
2272 int v25; // ecx@39
2273 int v26; // ecx@40
2274 int v27; // ecx@41
2275 int *v28; // esi@54
2276 unsigned int v29; // edx@56
2277 char *v30; // ecx@65
2278 int v31; // ecx@106
2279 int result; // eax@107
2280 int v33; // [sp-4h] [bp-2Ch]@23
2281 int v34; // [sp-4h] [bp-2Ch]@43
2282 int v35[5]; // [sp+Ch] [bp-1Ch]@8
2283 int a2; // [sp+20h] [bp-8h]@1
2284 int v37; // [sp+24h] [bp-4h]@1
2285
2286 //need fixing
2287 __debugbreak();
2288 v1 = 0;
2289 v2 = 0;
2290 v3 = _this - 1;
2291 a2 = 0;
2292 v37 = 0;
2293 dword_F8B1DC = 0;
2294 v4 = 2;
2295 if ( !v3 )
2296 { 2264 {
2297 while ( 1 ) 2265 for (int j=0; j<4; ++j)
2298 { 2266 {
2299 v19 = 1; 2267 if ( i )
2300 do 2268 v21 = shopWeap_variation_spc[(unsigned int)window_SpeakInHouse->ptr_1C].item_class[j];
2269 else
2270 v21 = shopWeap_variation_ord[(unsigned int)window_SpeakInHouse->ptr_1C].item_class[j];
2271
2272 switch (v21)
2301 { 2273 {
2302 v20 = (char *)window_SpeakInHouse->ptr_1C + 4 * (unsigned int)window_SpeakInHouse->ptr_1C + v19; 2274 case 23: v34 = 37; break;
2303 /*if ( v1 ) 2275 case 24: v34 = 38; break;
2304 v21 = word_4F063E[(signed int)v20]; 2276 case 25: v34 = 39; break;
2277 case 26: v34 = 40; break;
2278 case 27: v34 = 41; break;
2279 case 28: v34 = 42; break;
2280 case 30: v34 = 36; break;
2281 default:
2282 continue;
2283 }
2284 v37 = sub_4BE571(v34, v35, v37, 5);
2285 }
2286 }
2287 break;
2288 case 2: //shop armor
2289
2290 for (int i=0; i<2; ++i)
2291 {
2292 for (int j=0; j<2; ++j)
2293 {
2294 for (int k=0; k<4; ++k)
2295 {
2296 if ( i )
2297 v15 = shopArmr_variation_spc[(unsigned int)window_SpeakInHouse->ptr_1C-15+j].item_class[k];
2305 else 2298 else
2306 v21 = word_4F0404[(signed int)v20 - 4];//word_4F03FE[(signed int)v20];*/ 2299 v15 = shopArmr_variation_ord[(unsigned int)window_SpeakInHouse->ptr_1C-15+j].item_class[k];
2307 v22 = v21 - 23; 2300 switch (v15)
2308 if ( v22 ) 2301 {
2309 { 2302 case 31: v33 = 45; break;
2310 v23 = v22 - 1; 2303 case 32: v33 = 46; break;
2311 if ( v23 ) 2304 case 33: v33 = 47; break;
2312 { 2305 case 34: v33 = 44; break;
2313 v24 = v23 - 1; 2306 default:
2314 if ( v24 ) 2307 continue;
2315 { 2308 }
2316 v25 = v24 - 1; 2309 v37 = sub_4BE571(v33, v35, v37, 5);
2317 if ( v25 )
2318 {
2319 v26 = v25 - 1;
2320 if ( v26 )
2321 {
2322 v27 = v26 - 1;
2323 if ( v27 )
2324 {
2325 if ( v27 != v4 )
2326 goto LABEL_51;
2327 v34 = 36;
2328 }
2329 else
2330 {
2331 v34 = 42;
2332 }
2333 }
2334 else
2335 {
2336 v34 = 41;
2337 }
2338 }
2339 else
2340 {
2341 v34 = 40;
2342 }
2343 }
2344 else
2345 {
2346 v34 = 39;
2347 }
2348 }
2349 else
2350 {
2351 v34 = 38;
2352 }
2353 }
2354 else
2355 {
2356 v34 = 37;
2357 }
2358 v37 = sub_4BE571(v34, v35, v37, 5);
2359 v2 = dword_F8B1DC;
2360 v4 = 2;
2361 LABEL_51:
2362 ++v19;
2363 } 2310 }
2364 while ( v19 <= 4 );
2365 ++v1;
2366 if ( v1 >= v4 )
2367 goto LABEL_53;
2368 } 2311 }
2369 } 2312 }
2370 v5 = (int)(v3 - 1); 2313 break;
2371 if ( !v5 ) 2314 case 3: //shop magic
2315 v37 = 2;
2316 v35[0] = 57;
2317 v35[1] = 59;
2318 break;
2319 case 4: //shop alchemist
2320 v37 = 2;
2321 v35[0] = 71;
2322 v35[1] = 68;
2323 break;
2324 case 21: //tavern
2325 v37 = 3;
2326 v35[0] = 70;
2327 v35[1] = 65;
2328 v35[2] = 62;
2329 break;
2330 case 23: //temple
2331 v37 = 3;
2332 v35[0] = 67;
2333 v35[1] = 66;
2334 v35[2] = 58;
2335 break;
2336 case 30: ///trainig
2337 v37 = 2;
2338 v35[0] = 69;
2339 v35[1] = 60;
2340 break;
2341 }
2342 for(i=0;i<v37;++i)
2343 {
2344 v29=v35[i];
2345 switch(v29)
2372 { 2346 {
2373 v10 = 0; 2347 case 40 :v30 = pSkillNames[4]; break;
2374 while ( 1 ) 2348 case 5 : v30 = pSkillNames[23]; break;
2375 { 2349 case 36 :v30 = pSkillNames[0]; break;
2376 v11 = 0; 2350 case 37 :v30 = pSkillNames[1]; break;
2377 do 2351 case 38 :v30 = pSkillNames[2]; break;
2378 { 2352 case 39 :v30 = pSkillNames[3]; break;
2379 v12 = 1; 2353 case 41 :v30 = pSkillNames[5]; break;
2380 do 2354 case 42 :v30 = pSkillNames[6]; break;
2381 { 2355 case 44 :v30 = pSkillNames[8]; break;
2382 v13 = v11 + 2 * (unsigned int)window_SpeakInHouse->ptr_1C - 30; 2356 case 45 :v30 = pSkillNames[9]; break;
2383 v14 = v12 + 4 * v13 + v13; 2357 case 46 :v30 = pSkillNames[10]; break;
2384 /* if ( v10 ) 2358 case 47 :v30 = pSkillNames[11]; break;
2385 v15 = word_4F06D8[v14]; 2359 case 66 :v30 = pSkillNames[30]; break;
2386 else 2360 case 57 :v30 = pSkillNames[21]; break;
2387 v15 = word_4F0498[v14];*/ 2361 case 58 :v30 = pSkillNames[22]; break;
2388 v16 = v15 - 31; 2362 case 60 :v30 = pSkillNames[24]; break;
2389 if ( v16 ) 2363 case 62 :v30 = pSkillNames[26]; break;
2390 { 2364 case 65 :v30 = pSkillNames[29]; break;
2391 v17 = v16 - 1; 2365 case 67:v30 = pSkillNames[31]; break;
2392 if ( v17 ) 2366 case 68:v30 = pSkillNames[32]; break;
2393 { 2367 case 69:v30 = pSkillNames[33]; break;
2394 v18 = v17 - 1; 2368 case 70:v30 = pSkillNames[34]; break;
2395 if ( v18 ) 2369 case 71:v30 = pSkillNames[35]; break;
2396 { 2370 default:
2397 if ( v18 != 1 ) 2371 v30 = pGlobalTXT_LocalizationStrings[127]; //"No Text!"
2398 goto LABEL_28;
2399 v33 = 44;
2400 }
2401 else
2402 {
2403 v33 = 47;
2404 }
2405 }
2406 else
2407 {
2408 v33 = 46;
2409 }
2410 }
2411 else
2412 {
2413 v33 = 45;
2414 }
2415 v37 = sub_4BE571(v33, v35, v37, 5);
2416 v2 = dword_F8B1DC;
2417 LABEL_28:
2418 ++v12;
2419 }
2420 while ( v12 <= 4 );
2421 ++v11;
2422 }
2423 while ( v11 < 2 );
2424 ++v10;
2425 if ( v10 >= 2 )
2426 goto LABEL_53;
2427 }
2428 } 2372 }
2429 v6 = v5 - 1; 2373 pShopOptions[dword_F8B1DC] = v30;
2430 if ( v6 ) 2374 ++dword_F8B1DC;
2431 { 2375 CreateButtonInColumn(i+1, v29);
2432 v7 = v6 - 1; 2376 }
2433 if ( v7 ) 2377 pDialogueWindow->_41D08F(i, 1, 0, 2);
2434 { 2378 dword_F8B1E0 = pDialogueWindow->pNumPresenceButton;
2435 v8 = v7 - 17; 2379 }
2436 if ( v8 )
2437 {
2438 v9 = v8 - 2;
2439 if ( v9 )
2440 {
2441 if ( v9 == 7 )
2442 {
2443 v37 = 2;
2444 v35[0] = 69;
2445 v35[1] = 60;
2446 }
2447 }
2448 else
2449 {
2450 v37 = 3;
2451 v35[0] = 67;
2452 v35[1] = 66;
2453 v35[2] = 58;
2454 }
2455 }
2456 else
2457 {
2458 v37 = 3;
2459 v35[0] = 70;
2460 v35[1] = 65;
2461 v35[2] = 62;
2462 }
2463 }
2464 else
2465 {
2466 v37 = 2;
2467 v35[0] = 71;
2468 v35[1] = 68;
2469 }
2470 }
2471 else
2472 {
2473 v37 = 2;
2474 v35[0] = 57;
2475 v35[1] = 59;
2476 }
2477 LABEL_53:
2478 if ( v37 > 0 )
2479 {
2480 v28 = v35;
2481 while ( 1 )
2482 {
2483 v29 = *v28;
2484 if ( *v28 <= 47 )
2485 break;
2486 if ( (signed int)v29 <= 66 )
2487 {
2488 if ( v29 == 66 )
2489 {
2490 v30 = pSkillNames[30];
2491 goto LABEL_106;
2492 }
2493 if ( v29 == 57 )
2494 {
2495 v30 = pSkillNames[21];
2496 goto LABEL_106;
2497 }
2498 if ( v29 == 58 )
2499 {
2500 v30 = pSkillNames[22];
2501 goto LABEL_106;
2502 }
2503 if ( v29 == 60 )
2504 {
2505 v30 = pSkillNames[24];
2506 goto LABEL_106;
2507 }
2508 if ( v29 == 62 )
2509 {
2510 v30 = pSkillNames[26];
2511 goto LABEL_106;
2512 }
2513 if ( v29 == 65 )
2514 {
2515 v30 = pSkillNames[29];
2516 goto LABEL_106;
2517 }
2518 goto LABEL_100;
2519 }
2520 switch ( v29 )
2521 {
2522 case 0x43u:
2523 v30 = pSkillNames[31];
2524 break;
2525 case 0x44u:
2526 v30 = pSkillNames[32];
2527 break;
2528 case 0x45u:
2529 v30 = pSkillNames[33];
2530 break;
2531 case 0x46u:
2532 v30 = pSkillNames[34];
2533 break;
2534 default:
2535 if ( v29 != 71 )
2536 goto LABEL_100;
2537 v30 = pSkillNames[35];
2538 break;
2539 }
2540 LABEL_106:
2541 pShopOptions[v2] = v30;
2542 v31 = a2++;
2543 dword_F8B1DC = v2 + 1;
2544 sub_4B36CC(v31, v29);
2545 ++v28;
2546 if ( a2 >= v37 )
2547 goto LABEL_107;
2548 v2 = dword_F8B1DC;
2549 }
2550 if ( *v28 == 47 )
2551 {
2552 v30 = pSkillNames[11];
2553 goto LABEL_106;
2554 }
2555 if ( (signed int)v29 > 40 )
2556 {
2557 if ( v29 == 41 )
2558 {
2559 v30 = pSkillNames[5];
2560 goto LABEL_106;
2561 }
2562 if ( v29 == 42 )
2563 {
2564 v30 = pSkillNames[6];
2565 goto LABEL_106;
2566 }
2567 if ( v29 == 44 )
2568 {
2569 v30 = pSkillNames[8];
2570 goto LABEL_106;
2571 }
2572 if ( v29 == 45 )
2573 {
2574 v30 = pSkillNames[9];
2575 goto LABEL_106;
2576 }
2577 if ( v29 == 46 )
2578 {
2579 v30 = pSkillNames[10];
2580 goto LABEL_106;
2581 }
2582 }
2583 else
2584 {
2585 if ( v29 == 40 )
2586 {
2587 v30 = pSkillNames[4];
2588 goto LABEL_106;
2589 }
2590 if ( v29 == 5 )
2591 {
2592 v30 = pSkillNames[23];
2593 goto LABEL_106;
2594 }
2595 if ( v29 == 36 )
2596 {
2597 v30 = pSkillNames[0];
2598 goto LABEL_106;
2599 }
2600 if ( v29 == 37 )
2601 {
2602 v30 = pSkillNames[1];
2603 goto LABEL_106;
2604 }
2605 if ( v29 == 38 )
2606 {
2607 v30 = pSkillNames[2];
2608 goto LABEL_106;
2609 }
2610 if ( v29 == 39 )
2611 {
2612 v30 = pSkillNames[3];
2613 goto LABEL_106;
2614 }
2615 }
2616 LABEL_100:
2617 v30 = pGlobalTXT_LocalizationStrings[127]; //"No Text!"
2618 goto LABEL_106;
2619 }
2620 LABEL_107:
2621 pDialogueWindow->_41D08F(a2, 1, 0, 2);
2622 result = pDialogueWindow->pNumPresenceButton;
2623 dword_F8B1E0 = pDialogueWindow->pNumPresenceButton;
2624 return result;
2625 }