Mercurial > mm7
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 } |