Advertisement
Guest User

Elona+ 1.43 Label 1831

a guest
May 4th, 2015
361
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.71 KB | None | 0 0
  1. //This label is called when eating food, and determines the nutrition value to send to the skillexp function.
  2. //Parts of this, such as messages, have been cut out so as only to show relevant information. "..." denotes a cut.
  3. *label_1831
  4.    
  5.     ...
  6.     //This clears all offsets of var_1345.
  7.     repeat var_1344
  8.         var_1345(0, cnt) = 0, 0
  9.     loop
  10.  
  11.     ...
  12.    
  13.     /*  This checks to see if var_514 (the item eaten) has item bit 18 (Herb).  There is then a check to see if
  14.         the eater (var_242) is the PC (value 0). If it is, then skillexp is called with a value of 800 for all
  15.         stats. If  the eater is someone other than the PC, skillexp is called with a value of 8000 for all stats.
  16.         Note that these call skillexp immediately, and does not exit the function; therefore, these gains are
  17.         seperate from that of the food itself, and the food's normal effect still takes place.
  18.         Stat identifiers are as follows. Keep them in mind, as they will be useful for the rest of this file.
  19.         10 - Strength
  20.         11 - Constituion
  21.         12 - Dexterity
  22.         13 - Perception
  23.         14 - Learning
  24.         15 - Will
  25.         16 - Magic
  26.         17 - Charisma
  27.         18 - Speed
  28.     */
  29.     if ( ibit(18, var_514) == 1 ) {
  30.         if ( var_242 == 0 ) {
  31.             skillexp 10, var_242, 800
  32.             skillexp 11, var_242, 800
  33.             skillexp 12, var_242, 800
  34.             skillexp 13, var_242, 800
  35.             skillexp 14, var_242, 800
  36.             skillexp 15, var_242, 800
  37.             skillexp 16, var_242, 800
  38.             skillexp 17, var_242, 800
  39.             skillexp 18, var_242, 800
  40.         }
  41.         else {
  42.             skillexp 10, var_242, 8000
  43.             skillexp 11, var_242, 8000
  44.             skillexp 12, var_242, 8000
  45.             skillexp 13, var_242, 8000
  46.             skillexp 14, var_242, 8000
  47.             skillexp 15, var_242, 8000
  48.             skillexp 16, var_242, 8000
  49.             skillexp 17, var_242, 8000
  50.             skillexp 18, var_242, 8000
  51.         }
  52.     }
  53.    
  54.     ...
  55.    
  56.     //This takes the 26th (starts at 0) value of the item being eaten, divides it by 1000, and then stores it in var_353.
  57.     //Each food type has a unique value, so this serves as an identifier for food type.
  58.     var_353 = var_99(25, var_514) / 1000
  59.    
  60.     /*  The following "if " blocks check the food type of the item, and sets stats and nutrition accordingly. Identifier chart:
  61.         Meat - 1000 - 1
  62.         Vegetables - 2000 - 2
  63.         Fruit - 3000 - 3
  64.         Candy - 4000 - 4
  65.         Noodles - 5000 - 5
  66.         Fish - 6000 - 6
  67.         Bread - 7000 - 7
  68.         Egg - 8000 - 8
  69.         (The third value being the result of dividing by 1000, done in the previous code line)
  70.         Let's now examine this line:
  71.         var_1345(0, var_1344) = 10, 30 + var_99(20, var_514)
  72.         var_1345 hold our attribute (offset 0) and nutrition value (offset 1).
  73.         var_1344 is a counter, and mostly unimportant for this explanation.
  74.         10 is the stat identifier - in this case, Strength.
  75.         30 is the nutrition value.
  76.         var_99(20, var_514) is the eaten item's Plus Value, like the +6 on "Quickling Steak + 6"
  77.         So this reads: The attribute being increased in Strength, with a value of 30 + Plus Value.
  78.         var_1346 is BaseSatiation.
  79.         Use this information to read the rest of the "if" blocks. This first one is for Meat.
  80.     */
  81.     if ( var_353 == 1 ) {
  82.         if ( var_1344 < 10 ) {
  83.             var_1345(0, var_1344) = 10, 30 + var_99(20, var_514)
  84.             var_1344++
  85.         }
  86.         if ( var_1344 < 10 ) {
  87.             var_1345(0, var_1344) = 11, 40 + var_99(20, var_514)
  88.             var_1344++
  89.         }
  90.         if ( var_1344 < 10 ) {
  91.             var_1345(0, var_1344) = 17, 10 + var_99(20, var_514)
  92.             var_1344++
  93.         }
  94.         var_1346 = 3500
  95.     }
  96.    
  97.     // Egg 
  98.     if ( var_353 == 8 ) {
  99.         if ( var_1344 < 10 ) {
  100.             var_1345(0, var_1344) = 17, 20
  101.             var_1344++
  102.         }
  103.         if ( var_1344 < 10 ) {
  104.             var_1345(0, var_1344) = 13, 20
  105.             var_1344++
  106.         }
  107.         if ( var_1344 < 10 ) {
  108.             var_1345(0, var_1344) = 15, 20
  109.             var_1344++
  110.         }
  111.         var_1346 = 2000
  112.     }
  113.    
  114.     // Vegetables
  115.     if ( var_353 == 2 ) {
  116.         if ( var_1344 < 10 ) {
  117.             var_1345(0, var_1344) = 15, 50 + var_99(20, var_514)
  118.             var_1344++
  119.         }
  120.         if ( var_1344 < 10 ) {
  121.             var_1345(0, var_1344) = 14, 50 + var_99(20, var_514)
  122.             var_1344++
  123.         }
  124.         var_1346 = 2000
  125.     }
  126.    
  127.     // Fruit
  128.     if ( var_353 == 3 ) {
  129.         if ( var_1344 < 10 ) {
  130.             var_1345(0, var_1344) = 16, 50 + var_99(20, var_514)
  131.             var_1344++
  132.         }
  133.         if ( var_1344 < 10 ) {
  134.             var_1345(0, var_1344) = 17, 20
  135.             var_1344++
  136.         }
  137.         if ( var_1344 < 10 ) {
  138.             var_1345(0, var_1344) = 13, 30 + var_99(20, var_514)
  139.             var_1344++
  140.         }
  141.         var_1346 = 1500
  142.     }
  143.    
  144.     // Bread
  145.     if ( var_353 == 7 ) {
  146.         if ( var_1344 < 10 ) {
  147.             var_1345(0, var_1344) = 10, 25
  148.             var_1344++
  149.         }
  150.         if ( var_1344 < 10 ) {
  151.             var_1345(0, var_1344) = 12, 25
  152.             var_1344++
  153.         }
  154.         if ( var_1344 < 10 ) {
  155.             var_1345(0, var_1344) = 14, 25
  156.             var_1344++
  157.         }
  158.         if ( var_1344 < 10 ) {
  159.             var_1345(0, var_1344) = 11, 25
  160.             var_1344++
  161.         }
  162.         var_1346 = 2800
  163.     }
  164.    
  165.     //Candy
  166.     if ( var_353 == 4 ) {
  167.         if ( var_1344 < 10 ) {
  168.             var_1345(0, var_1344) = 16, 40
  169.             var_1344++
  170.         }
  171.         if ( var_1344 < 10 ) {
  172.             var_1345(0, var_1344) = 12, 30
  173.             var_1344++
  174.         }
  175.         if ( var_1344 < 10 ) {
  176.             var_1345(0, var_1344) = 14, 30
  177.             var_1344++
  178.         }
  179.         var_1346 = 1500
  180.     }
  181.    
  182.     // Fish
  183.     if ( var_353 == 6 ) {
  184.         if ( var_1344 < 10 ) {
  185.             var_1345(0, var_1344) = 14, 40
  186.             var_1344++
  187.         }
  188.         if ( var_1344 < 10 ) {
  189.             var_1345(0, var_1344) = 12, 40
  190.             var_1344++
  191.         }
  192.         if ( var_1344 < 10 ) {
  193.             var_1345(0, var_1344) = 13, 20
  194.             var_1344++
  195.         }
  196.         var_1346 = 3000
  197.     }
  198.    
  199.     //Noodles
  200.     if ( var_353 == 5 ) {
  201.         if ( var_1344 < 10 ) {
  202.             var_1345(0, var_1344) = 11, 60
  203.             var_1344++
  204.         }
  205.         if ( var_1344 < 10 ) {
  206.             var_1345(0, var_1344) = 12, 40
  207.             var_1344++
  208.         }
  209.         var_1346 = 3500
  210.     }
  211.    
  212.     /*  Remember that var_1346 is the BaseSatiation of the type of food being eaten.
  213.         var_99(26, var_514) is the QualityLevel (Steak, Cutlet, etc.) of the food being eaten.
  214.         So, this reads: Set Satiation to the current value of Satiation times (100 + QualityLevel * 15)/100
  215.         At max, this multiplies satiation by 2.35.
  216.     */
  217.     var_1346 = var_1346 * (100 + var_99(26, var_514) * 15) / 100
  218.    
  219.     /*  The following code block repeats var_1344 (the counter which keeps track of how many
  220.         attributes our food increases)  times. This:   
  221.         if ( var_1345(1, cnt) > 0 )
  222.         Checks to see if the nutrition value of the current attribute in our loop is greater than 0. This:
  223.         if ( var_99(26, var_514) < 3 )
  224.         Checks to see if the QualityLevel of the food being eaten is less than 3 (in which case nutrition is halved).
  225.         Otherwise, the nutrition is set to the current value of nutrition * (50 + QualityLevel *20)/100.
  226.         That means max Quality Level multiplies nutrition by 2.3.
  227.         The cut section is for food that gives negative stats (rotten).
  228.     */
  229.     repeat var_1344
  230.         if ( var_1345(1, cnt) > 0 ) {
  231.             if ( var_99(26, var_514) < 3 ) {
  232.                 var_1345(1, cnt) = var_1345(1, cnt) / 2
  233.             }
  234.             else {
  235.                 var_1345(1, cnt) = var_1345(1, cnt) * (50 + var_99(26, var_514) * 20) / 100
  236.             }
  237.         }
  238.         ...
  239.     loop
  240.    
  241.     ///This cut section is messages when eating the food ("Delicious!", "Gross!", etc.)
  242.     ...
  243.    
  244.     /*  The following sections check for specific items not caught by the above (herbs, specifically).
  245.         Herb identifiers:
  246.         422 - Morgia
  247.         423 - Mareilon
  248.         424 - Spenseweed
  249.         425 - Curaria
  250.         426 - Alruania
  251.         427 - Stomafillia
  252.         Identifier of the eaten item is var_99(3, var_514)
  253.         These blocks follow the same setup as the above "if" blocks, so scroll up if you need a refresher.
  254.         This:
  255.         modgrowth var_242, 10, 2
  256.         Means add 2 potential to stat 10 (Strength) for entity var_242 (the eater)
  257.         As a reminder, var_1346 is satiation. Cut sections are messenges when eating the herb (invigorates you, etc.)
  258.     */
  259.    
  260.     //Curaria
  261.     if ( var_99(3, var_514) == 425 ) {
  262.         var_1344 = 0
  263.         if ( var_1344 < 10 ) {
  264.             var_1345(0, var_1344) = 10, 100
  265.             var_1344++
  266.         }
  267.         if ( var_1344 < 10 ) {
  268.             var_1345(0, var_1344) = 11, 100
  269.             var_1344++
  270.         }
  271.         if ( var_1344 < 10 ) {
  272.             var_1345(0, var_1344) = 17, 100
  273.             var_1344++
  274.         }
  275.         if ( var_1344 < 10 ) {
  276.             var_1345(0, var_1344) = 16, 100
  277.             var_1344++
  278.         }
  279.         if ( var_1344 < 10 ) {
  280.             var_1345(0, var_1344) = 12, 100
  281.             var_1344++
  282.         }
  283.         if ( var_1344 < 10 ) {
  284.             var_1345(0, var_1344) = 13, 100
  285.             var_1344++
  286.         }
  287.         if ( var_1344 < 10 ) {
  288.             var_1345(0, var_1344) = 14, 100
  289.             var_1344++
  290.         }
  291.         if ( var_1344 < 10 ) {
  292.             var_1345(0, var_1344) = 15, 100
  293.             var_1344++
  294.         }
  295.         if ( var_1344 < 10 ) {
  296.             var_1345(0, var_1344) = 18, 100
  297.             var_1344++
  298.         }
  299.         var_1346 = 2500
  300.         ...
  301.     }
  302.    
  303.     //Morgia
  304.     if ( var_99(3, var_514) == 422 ) {
  305.         var_1344 = 0
  306.         if ( var_1344 < 10 ) {
  307.             var_1345(0, var_1344) = 10, 900
  308.             var_1344++
  309.         }
  310.         if ( var_1344 < 10 ) {
  311.             var_1345(0, var_1344) = 11, 700
  312.             var_1344++
  313.         }
  314.         if ( var_1344 < 10 ) {
  315.             var_1345(0, var_1344) = 17, 10
  316.             var_1344++
  317.         }
  318.         if ( var_1344 < 10 ) {
  319.             var_1345(0, var_1344) = 16, 10
  320.             var_1344++
  321.         }
  322.         if ( var_1344 < 10 ) {
  323.             var_1345(0, var_1344) = 12, 10
  324.             var_1344++
  325.         }
  326.         if ( var_1344 < 10 ) {
  327.             var_1345(0, var_1344) = 13, 10
  328.             var_1344++
  329.         }
  330.         if ( var_1344 < 10 ) {
  331.             var_1345(0, var_1344) = 14, 10
  332.             var_1344++
  333.         }
  334.         if ( var_1344 < 10 ) {
  335.             var_1345(0, var_1344) = 15, 10
  336.             var_1344++
  337.         }
  338.         if ( var_1344 < 10 ) {
  339.             var_1345(0, var_1344) = 18, 20
  340.             var_1344++
  341.         }
  342.         var_1346 = 500
  343.         modgrowth var_242, 10, 2
  344.         modgrowth var_242, 11, 2
  345.         ...
  346.     }
  347.    
  348.     //Mareilon
  349.     if ( var_99(3, var_514) == 423 ) {
  350.         var_1344 = 0
  351.         if ( var_1344 < 10 ) {
  352.             var_1345(0, var_1344) = 10, 10
  353.             var_1344++
  354.         }
  355.         if ( var_1344 < 10 ) {
  356.             var_1345(0, var_1344) = 11, 10
  357.             var_1344++
  358.         }
  359.         if ( var_1344 < 10 ) {
  360.             var_1345(0, var_1344) = 17, 10
  361.             var_1344++
  362.         }
  363.         if ( var_1344 < 10 ) {
  364.             var_1345(0, var_1344) = 16, 800
  365.             var_1344++
  366.         }
  367.         if ( var_1344 < 10 ) {
  368.             var_1345(0, var_1344) = 12, 10
  369.             var_1344++
  370.         }
  371.         if ( var_1344 < 10 ) {
  372.             var_1345(0, var_1344) = 13, 10
  373.             var_1344++
  374.         }
  375.         if ( var_1344 < 10 ) {
  376.             var_1345(0, var_1344) = 14, 10
  377.             var_1344++
  378.         }
  379.         if ( var_1344 < 10 ) {
  380.             var_1345(0, var_1344) = 15, 800
  381.             var_1344++
  382.         }
  383.         if ( var_1344 < 10 ) {
  384.             var_1345(0, var_1344) = 18, 20
  385.             var_1344++
  386.         }
  387.         var_1346 = 500
  388.         modgrowth var_242, 16, 2
  389.         modgrowth var_242, 15, 2
  390.         ...
  391.     }
  392.    
  393.     //Spenseweed
  394.     if ( var_99(3, var_514) == 424 ) {
  395.         var_1344 = 0
  396.         if ( var_1344 < 10 ) {
  397.             var_1345(0, var_1344) = 10, 10
  398.             var_1344++
  399.         }
  400.         if ( var_1344 < 10 ) {
  401.             var_1345(0, var_1344) = 11, 10
  402.             var_1344++
  403.         }
  404.         if ( var_1344 < 10 ) {
  405.             var_1345(0, var_1344) = 17, 10
  406.             var_1344++
  407.         }
  408.         if ( var_1344 < 10 ) {
  409.             var_1345(0, var_1344) = 16, 10
  410.             var_1344++
  411.         }
  412.         if ( var_1344 < 10 ) {
  413.             var_1345(0, var_1344) = 12, 750
  414.             var_1344++
  415.         }
  416.         if ( var_1344 < 10 ) {
  417.             var_1345(0, var_1344) = 13, 800
  418.             var_1344++
  419.         }
  420.         if ( var_1344 < 10 ) {
  421.             var_1345(0, var_1344) = 14, 10
  422.             var_1344++
  423.         }
  424.         if ( var_1344 < 10 ) {
  425.             var_1345(0, var_1344) = 15, 10
  426.             var_1344++
  427.         }
  428.         if ( var_1344 < 10 ) {
  429.             var_1345(0, var_1344) = 18, 20
  430.             var_1344++
  431.         }
  432.         modgrowth var_242, 12, 2
  433.         modgrowth var_242, 13, 2
  434.         var_1346 = 500
  435.         ...
  436.     }
  437.    
  438.     //Alraunia
  439.     if ( var_99(3, var_514) == 426 ) {
  440.         var_1344 = 0
  441.         if ( var_1344 < 10 ) {
  442.             var_1345(0, var_1344) = 10, 10
  443.             var_1344++
  444.         }
  445.         if ( var_1344 < 10 ) {
  446.             var_1345(0, var_1344) = 11, 10
  447.             var_1344++
  448.         }
  449.         if ( var_1344 < 10 ) {
  450.             var_1345(0, var_1344) = 17, 850
  451.             var_1344++
  452.         }
  453.         if ( var_1344 < 10 ) {
  454.             var_1345(0, var_1344) = 16, 10
  455.             var_1344++
  456.         }
  457.         if ( var_1344 < 10 ) {
  458.             var_1345(0, var_1344) = 12, 10
  459.             var_1344++
  460.         }
  461.         if ( var_1344 < 10 ) {
  462.             var_1345(0, var_1344) = 13, 10
  463.             var_1344++
  464.         }
  465.         if ( var_1344 < 10 ) {
  466.             var_1345(0, var_1344) = 14, 700
  467.             var_1344++
  468.         }
  469.         if ( var_1344 < 10 ) {
  470.             var_1345(0, var_1344) = 15, 10
  471.             var_1344++
  472.         }
  473.         if ( var_1344 < 10 ) {
  474.             var_1345(0, var_1344) = 18, 20
  475.             var_1344++
  476.         }
  477.         var_1346 = 500
  478.         modgrowth var_242, 17, 2
  479.         modgrowth var_242, 14, 2
  480.         ...
  481.     }
  482.    
  483.     //Stomafillia
  484.     if ( var_99(3, var_514) == 427 ) {
  485.         var_1344 = 0
  486.         if ( var_1344 < 10 ) {
  487.             var_1345(0, var_1344) = 10, 50
  488.             var_1344++
  489.         }
  490.         if ( var_1344 < 10 ) {
  491.             var_1345(0, var_1344) = 11, 50
  492.             var_1344++
  493.         }
  494.         if ( var_1344 < 10 ) {
  495.             var_1345(0, var_1344) = 17, 50
  496.             var_1344++
  497.         }
  498.         if ( var_1344 < 10 ) {
  499.             var_1345(0, var_1344) = 16, 50
  500.             var_1344++
  501.         }
  502.         if ( var_1344 < 10 ) {
  503.             var_1345(0, var_1344) = 12, 50
  504.             var_1344++
  505.         }
  506.         if ( var_1344 < 10 ) {
  507.             var_1345(0, var_1344) = 13, 50
  508.             var_1344++
  509.         }
  510.         if ( var_1344 < 10 ) {
  511.             var_1345(0, var_1344) = 14, 50
  512.             var_1344++
  513.         }
  514.         if ( var_1344 < 10 ) {
  515.             var_1345(0, var_1344) = 15, 50
  516.             var_1344++
  517.         }
  518.         if ( var_1344 < 10 ) {
  519.             var_1345(0, var_1344) = 18, 50
  520.             var_1344++
  521.         }
  522.         var_1346 = 20000
  523.     }
  524.    
  525.    
  526.     // Just says fortune cookie (ID 738) satiation is 750
  527.     if ( var_99(3, var_514) == 738 ) {
  528.         var_1346 = 750
  529.     }
  530.    
  531.     //  This just goes to a label that plays a message if  food is rotten. It also sets all attributes (except for speed) to a
  532.     //  nutrition of -100, unless you have equipment that allows you to eat rotten food.
  533.     if ( var_242 == 0 ) {
  534.         if ( var_99(24, var_514) == 35 ) {
  535.             if ( var_99(27, var_514) < 0 ) {
  536.                 gosub *label_1829
  537.             }
  538.         }
  539.     }
  540.    
  541.     //More messages cut, specifically about if you have the "eat human flesh" mutation, and a code section
  542.     //That sends you to another label for corpses/jerky/eggs secondary effects.
  543.     ...
  544.    
  545.     /*  Our final really important code section. We repeat this loop the same number of times as the stats
  546.         that our food is increasing. var_353 is what we'll call NutritionFactor. It's essentially a  percentage multiplier
  547.         for the nutrition value of the food. It's initially set to 100 (in other words, you get 1x nutrition)
  548.         We check if the eater's satiation (var_57(22, var_242)) is currently 5000 or higher , where 4999
  549.         is the start of "hunger" status. If it is, then we create a SatiationFactor like this:
  550.         SatiationFactor = (Eater's satiation level - 5000)/25. For example, if you eat at 6000 satiation,
  551.         SatiationFactor would be 40. Then, we modify var_353 (remember, our NutritionFactor) by:
  552.         NutritionFactor = The current NutritionFactor value * 100 / (100 + SatiationFactor). For our fictitious example
  553.         of 40 for SatiationFactor, this reduces NutritionFactor to 71 (or 71%, as you'll soon see)! Now, we check
  554.         if the eater (var_242) is the player (value 0). If it's not, then we set our NutritionFactor to 1500. Woah!
  555.         That's 15x the food's nutrition value (after being modified by QualityLevel!). The other part there checks if the
  556.         food iis rotten and sets NutritionFactor to 500 for pets if that's true. The item being eaten is then checked
  557.         to see if it has item bit 19, which is Antiseptic. If it does, then NutritionFactor is HALVED (+1).
  558.         Finally, so long as NutritionFactor is still more than 0, skillexp is called with values:
  559.         skillexp (attribute), (target), Nutrition * NutritionFactor/100.    
  560.     */
  561.    
  562.     repeat var_1344
  563.         var_353 = 100
  564.         if ( var_57(22, var_242) >= 5000 ) {
  565.             var_354 = (var_57(22, var_242) - 5000) / 25
  566.             var_353 = var_353 * 100 / (100 + var_354)
  567.         }
  568.         if ( var_242 != 0 ) {
  569.             var_353 = 1500
  570.             if ( var_99(24, var_514) == 35 ) {
  571.                 if ( var_99(27, var_514) < 0 ) {
  572.                     var_353 = 500
  573.                 }
  574.             }
  575.         }
  576.         if ( ibit(19, var_514) == 1 ) {
  577.             var_353 = var_353 / 2 + 1
  578.         }
  579.         if ( var_353 > 0 ) {
  580.             skillexp var_1345(0, cnt), var_242, var_1345(1, cnt) * var_353 / 100
  581.         }
  582.     loop
  583.    
  584.     ...
  585.    
  586.     //There is one final part of this label that is relevant to the information of the Food Technical Page.
  587.     //This simply checks for the herb bit, and adds 1 potential to all attributes if it is herbed, as well as
  588.     //OVERWRITES the eater's Satiation, setting it to 15000.
  589.     if ( ibit(18, var_514) == 1 ) {
  590.         var_57(22, var_242) = 15000
  591.         modgrowth var_242, 10, 1
  592.         modgrowth var_242, 11, 1
  593.         modgrowth var_242, 12, 1
  594.         modgrowth var_242, 13, 1
  595.         modgrowth var_242, 14, 1
  596.         modgrowth var_242, 15, 1
  597.         modgrowth var_242, 16, 1
  598.         modgrowth var_242, 17, 1
  599.         modgrowth var_242, 18, 1
  600.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement