├── .github
└── workflows
│ └── main.yaml
├── LICENSE
├── README.md
├── data-113d
├── ItemTypes.txt
├── SetItems.txt
├── TreasureClassEx.txt
├── UniqueItems.txt
├── armor.txt
├── itemratio.txt
├── misc.txt
├── monstats.txt
└── weapons.txt
├── data_util.py
├── dropsim.exe
├── dropsim.py
├── img
├── 350runs_shako.jpg
├── andy-d2r-resize.png
├── andyq_drop_bckgrd.jpg
├── arreat-d2r-resize2.png
├── baal-d2r-resize2.png
├── council-d2r-orig.png
├── council-d2r-resize2.png
├── countess-d2r-resize2.png
├── countess_drop_bckgrd.jpg
├── cow_drop_bckgrd.jpg
├── cowlvl-d2r-resize2.png
├── diab-d2r-resize2.png
├── diabq_drop_bckgrd.jpg
├── duri-d2r-resize2.png
└── meph-d2r-resize2.png
├── requirements.txt
├── session.txt
├── session_over9k.txt
└── sound
├── 12leveling.mp3
├── 1maybevaluable.mp3
├── 3uniques.mp3
├── 6veryvaluable.mp3
├── 7chancing.mp3
├── dropsound.mp3
└── placeholder.mp3
/.github/workflows/main.yaml:
--------------------------------------------------------------------------------
1 | name: PyInstaller build
2 |
3 | on: [push]
4 |
5 | jobs:
6 | build:
7 |
8 | runs-on: windows-latest
9 |
10 | steps:
11 | - uses: actions/checkout@v2
12 | - name: Set up Python 3.7
13 | uses: actions/setup-python@v2
14 | with:
15 | python-version: 3.7
16 | - name: Install dependencies
17 | run: |
18 | pip install -r requirements.txt
19 | pip install pyinstaller
20 | - name: Build with pyinstaller
21 | run: pyinstaller dropsim.py -w --onefile
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU AFFERO GENERAL PUBLIC LICENSE
2 | Version 3, 19 November 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU Affero General Public License is a free, copyleft license for
11 | software and other kinds of works, specifically designed to ensure
12 | cooperation with the community in the case of network server software.
13 |
14 | The licenses for most software and other practical works are designed
15 | to take away your freedom to share and change the works. By contrast,
16 | our General Public Licenses are intended to guarantee your freedom to
17 | share and change all versions of a program--to make sure it remains free
18 | software for all its users.
19 |
20 | When we speak of free software, we are referring to freedom, not
21 | price. Our General Public Licenses are designed to make sure that you
22 | have the freedom to distribute copies of free software (and charge for
23 | them if you wish), that you receive source code or can get it if you
24 | want it, that you can change the software or use pieces of it in new
25 | free programs, and that you know you can do these things.
26 |
27 | Developers that use our General Public Licenses protect your rights
28 | with two steps: (1) assert copyright on the software, and (2) offer
29 | you this License which gives you legal permission to copy, distribute
30 | and/or modify the software.
31 |
32 | A secondary benefit of defending all users' freedom is that
33 | improvements made in alternate versions of the program, if they
34 | receive widespread use, become available for other developers to
35 | incorporate. Many developers of free software are heartened and
36 | encouraged by the resulting cooperation. However, in the case of
37 | software used on network servers, this result may fail to come about.
38 | The GNU General Public License permits making a modified version and
39 | letting the public access it on a server without ever releasing its
40 | source code to the public.
41 |
42 | The GNU Affero General Public License is designed specifically to
43 | ensure that, in such cases, the modified source code becomes available
44 | to the community. It requires the operator of a network server to
45 | provide the source code of the modified version running there to the
46 | users of that server. Therefore, public use of a modified version, on
47 | a publicly accessible server, gives the public access to the source
48 | code of the modified version.
49 |
50 | An older license, called the Affero General Public License and
51 | published by Affero, was designed to accomplish similar goals. This is
52 | a different license, not a version of the Affero GPL, but Affero has
53 | released a new version of the Affero GPL which permits relicensing under
54 | this license.
55 |
56 | The precise terms and conditions for copying, distribution and
57 | modification follow.
58 |
59 | TERMS AND CONDITIONS
60 |
61 | 0. Definitions.
62 |
63 | "This License" refers to version 3 of the GNU Affero General Public License.
64 |
65 | "Copyright" also means copyright-like laws that apply to other kinds of
66 | works, such as semiconductor masks.
67 |
68 | "The Program" refers to any copyrightable work licensed under this
69 | License. Each licensee is addressed as "you". "Licensees" and
70 | "recipients" may be individuals or organizations.
71 |
72 | To "modify" a work means to copy from or adapt all or part of the work
73 | in a fashion requiring copyright permission, other than the making of an
74 | exact copy. The resulting work is called a "modified version" of the
75 | earlier work or a work "based on" the earlier work.
76 |
77 | A "covered work" means either the unmodified Program or a work based
78 | on the Program.
79 |
80 | To "propagate" a work means to do anything with it that, without
81 | permission, would make you directly or secondarily liable for
82 | infringement under applicable copyright law, except executing it on a
83 | computer or modifying a private copy. Propagation includes copying,
84 | distribution (with or without modification), making available to the
85 | public, and in some countries other activities as well.
86 |
87 | To "convey" a work means any kind of propagation that enables other
88 | parties to make or receive copies. Mere interaction with a user through
89 | a computer network, with no transfer of a copy, is not conveying.
90 |
91 | An interactive user interface displays "Appropriate Legal Notices"
92 | to the extent that it includes a convenient and prominently visible
93 | feature that (1) displays an appropriate copyright notice, and (2)
94 | tells the user that there is no warranty for the work (except to the
95 | extent that warranties are provided), that licensees may convey the
96 | work under this License, and how to view a copy of this License. If
97 | the interface presents a list of user commands or options, such as a
98 | menu, a prominent item in the list meets this criterion.
99 |
100 | 1. Source Code.
101 |
102 | The "source code" for a work means the preferred form of the work
103 | for making modifications to it. "Object code" means any non-source
104 | form of a work.
105 |
106 | A "Standard Interface" means an interface that either is an official
107 | standard defined by a recognized standards body, or, in the case of
108 | interfaces specified for a particular programming language, one that
109 | is widely used among developers working in that language.
110 |
111 | The "System Libraries" of an executable work include anything, other
112 | than the work as a whole, that (a) is included in the normal form of
113 | packaging a Major Component, but which is not part of that Major
114 | Component, and (b) serves only to enable use of the work with that
115 | Major Component, or to implement a Standard Interface for which an
116 | implementation is available to the public in source code form. A
117 | "Major Component", in this context, means a major essential component
118 | (kernel, window system, and so on) of the specific operating system
119 | (if any) on which the executable work runs, or a compiler used to
120 | produce the work, or an object code interpreter used to run it.
121 |
122 | The "Corresponding Source" for a work in object code form means all
123 | the source code needed to generate, install, and (for an executable
124 | work) run the object code and to modify the work, including scripts to
125 | control those activities. However, it does not include the work's
126 | System Libraries, or general-purpose tools or generally available free
127 | programs which are used unmodified in performing those activities but
128 | which are not part of the work. For example, Corresponding Source
129 | includes interface definition files associated with source files for
130 | the work, and the source code for shared libraries and dynamically
131 | linked subprograms that the work is specifically designed to require,
132 | such as by intimate data communication or control flow between those
133 | subprograms and other parts of the work.
134 |
135 | The Corresponding Source need not include anything that users
136 | can regenerate automatically from other parts of the Corresponding
137 | Source.
138 |
139 | The Corresponding Source for a work in source code form is that
140 | same work.
141 |
142 | 2. Basic Permissions.
143 |
144 | All rights granted under this License are granted for the term of
145 | copyright on the Program, and are irrevocable provided the stated
146 | conditions are met. This License explicitly affirms your unlimited
147 | permission to run the unmodified Program. The output from running a
148 | covered work is covered by this License only if the output, given its
149 | content, constitutes a covered work. This License acknowledges your
150 | rights of fair use or other equivalent, as provided by copyright law.
151 |
152 | You may make, run and propagate covered works that you do not
153 | convey, without conditions so long as your license otherwise remains
154 | in force. You may convey covered works to others for the sole purpose
155 | of having them make modifications exclusively for you, or provide you
156 | with facilities for running those works, provided that you comply with
157 | the terms of this License in conveying all material for which you do
158 | not control copyright. Those thus making or running the covered works
159 | for you must do so exclusively on your behalf, under your direction
160 | and control, on terms that prohibit them from making any copies of
161 | your copyrighted material outside their relationship with you.
162 |
163 | Conveying under any other circumstances is permitted solely under
164 | the conditions stated below. Sublicensing is not allowed; section 10
165 | makes it unnecessary.
166 |
167 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
168 |
169 | No covered work shall be deemed part of an effective technological
170 | measure under any applicable law fulfilling obligations under article
171 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
172 | similar laws prohibiting or restricting circumvention of such
173 | measures.
174 |
175 | When you convey a covered work, you waive any legal power to forbid
176 | circumvention of technological measures to the extent such circumvention
177 | is effected by exercising rights under this License with respect to
178 | the covered work, and you disclaim any intention to limit operation or
179 | modification of the work as a means of enforcing, against the work's
180 | users, your or third parties' legal rights to forbid circumvention of
181 | technological measures.
182 |
183 | 4. Conveying Verbatim Copies.
184 |
185 | You may convey verbatim copies of the Program's source code as you
186 | receive it, in any medium, provided that you conspicuously and
187 | appropriately publish on each copy an appropriate copyright notice;
188 | keep intact all notices stating that this License and any
189 | non-permissive terms added in accord with section 7 apply to the code;
190 | keep intact all notices of the absence of any warranty; and give all
191 | recipients a copy of this License along with the Program.
192 |
193 | You may charge any price or no price for each copy that you convey,
194 | and you may offer support or warranty protection for a fee.
195 |
196 | 5. Conveying Modified Source Versions.
197 |
198 | You may convey a work based on the Program, or the modifications to
199 | produce it from the Program, in the form of source code under the
200 | terms of section 4, provided that you also meet all of these conditions:
201 |
202 | a) The work must carry prominent notices stating that you modified
203 | it, and giving a relevant date.
204 |
205 | b) The work must carry prominent notices stating that it is
206 | released under this License and any conditions added under section
207 | 7. This requirement modifies the requirement in section 4 to
208 | "keep intact all notices".
209 |
210 | c) You must license the entire work, as a whole, under this
211 | License to anyone who comes into possession of a copy. This
212 | License will therefore apply, along with any applicable section 7
213 | additional terms, to the whole of the work, and all its parts,
214 | regardless of how they are packaged. This License gives no
215 | permission to license the work in any other way, but it does not
216 | invalidate such permission if you have separately received it.
217 |
218 | d) If the work has interactive user interfaces, each must display
219 | Appropriate Legal Notices; however, if the Program has interactive
220 | interfaces that do not display Appropriate Legal Notices, your
221 | work need not make them do so.
222 |
223 | A compilation of a covered work with other separate and independent
224 | works, which are not by their nature extensions of the covered work,
225 | and which are not combined with it such as to form a larger program,
226 | in or on a volume of a storage or distribution medium, is called an
227 | "aggregate" if the compilation and its resulting copyright are not
228 | used to limit the access or legal rights of the compilation's users
229 | beyond what the individual works permit. Inclusion of a covered work
230 | in an aggregate does not cause this License to apply to the other
231 | parts of the aggregate.
232 |
233 | 6. Conveying Non-Source Forms.
234 |
235 | You may convey a covered work in object code form under the terms
236 | of sections 4 and 5, provided that you also convey the
237 | machine-readable Corresponding Source under the terms of this License,
238 | in one of these ways:
239 |
240 | a) Convey the object code in, or embodied in, a physical product
241 | (including a physical distribution medium), accompanied by the
242 | Corresponding Source fixed on a durable physical medium
243 | customarily used for software interchange.
244 |
245 | b) Convey the object code in, or embodied in, a physical product
246 | (including a physical distribution medium), accompanied by a
247 | written offer, valid for at least three years and valid for as
248 | long as you offer spare parts or customer support for that product
249 | model, to give anyone who possesses the object code either (1) a
250 | copy of the Corresponding Source for all the software in the
251 | product that is covered by this License, on a durable physical
252 | medium customarily used for software interchange, for a price no
253 | more than your reasonable cost of physically performing this
254 | conveying of source, or (2) access to copy the
255 | Corresponding Source from a network server at no charge.
256 |
257 | c) Convey individual copies of the object code with a copy of the
258 | written offer to provide the Corresponding Source. This
259 | alternative is allowed only occasionally and noncommercially, and
260 | only if you received the object code with such an offer, in accord
261 | with subsection 6b.
262 |
263 | d) Convey the object code by offering access from a designated
264 | place (gratis or for a charge), and offer equivalent access to the
265 | Corresponding Source in the same way through the same place at no
266 | further charge. You need not require recipients to copy the
267 | Corresponding Source along with the object code. If the place to
268 | copy the object code is a network server, the Corresponding Source
269 | may be on a different server (operated by you or a third party)
270 | that supports equivalent copying facilities, provided you maintain
271 | clear directions next to the object code saying where to find the
272 | Corresponding Source. Regardless of what server hosts the
273 | Corresponding Source, you remain obligated to ensure that it is
274 | available for as long as needed to satisfy these requirements.
275 |
276 | e) Convey the object code using peer-to-peer transmission, provided
277 | you inform other peers where the object code and Corresponding
278 | Source of the work are being offered to the general public at no
279 | charge under subsection 6d.
280 |
281 | A separable portion of the object code, whose source code is excluded
282 | from the Corresponding Source as a System Library, need not be
283 | included in conveying the object code work.
284 |
285 | A "User Product" is either (1) a "consumer product", which means any
286 | tangible personal property which is normally used for personal, family,
287 | or household purposes, or (2) anything designed or sold for incorporation
288 | into a dwelling. In determining whether a product is a consumer product,
289 | doubtful cases shall be resolved in favor of coverage. For a particular
290 | product received by a particular user, "normally used" refers to a
291 | typical or common use of that class of product, regardless of the status
292 | of the particular user or of the way in which the particular user
293 | actually uses, or expects or is expected to use, the product. A product
294 | is a consumer product regardless of whether the product has substantial
295 | commercial, industrial or non-consumer uses, unless such uses represent
296 | the only significant mode of use of the product.
297 |
298 | "Installation Information" for a User Product means any methods,
299 | procedures, authorization keys, or other information required to install
300 | and execute modified versions of a covered work in that User Product from
301 | a modified version of its Corresponding Source. The information must
302 | suffice to ensure that the continued functioning of the modified object
303 | code is in no case prevented or interfered with solely because
304 | modification has been made.
305 |
306 | If you convey an object code work under this section in, or with, or
307 | specifically for use in, a User Product, and the conveying occurs as
308 | part of a transaction in which the right of possession and use of the
309 | User Product is transferred to the recipient in perpetuity or for a
310 | fixed term (regardless of how the transaction is characterized), the
311 | Corresponding Source conveyed under this section must be accompanied
312 | by the Installation Information. But this requirement does not apply
313 | if neither you nor any third party retains the ability to install
314 | modified object code on the User Product (for example, the work has
315 | been installed in ROM).
316 |
317 | The requirement to provide Installation Information does not include a
318 | requirement to continue to provide support service, warranty, or updates
319 | for a work that has been modified or installed by the recipient, or for
320 | the User Product in which it has been modified or installed. Access to a
321 | network may be denied when the modification itself materially and
322 | adversely affects the operation of the network or violates the rules and
323 | protocols for communication across the network.
324 |
325 | Corresponding Source conveyed, and Installation Information provided,
326 | in accord with this section must be in a format that is publicly
327 | documented (and with an implementation available to the public in
328 | source code form), and must require no special password or key for
329 | unpacking, reading or copying.
330 |
331 | 7. Additional Terms.
332 |
333 | "Additional permissions" are terms that supplement the terms of this
334 | License by making exceptions from one or more of its conditions.
335 | Additional permissions that are applicable to the entire Program shall
336 | be treated as though they were included in this License, to the extent
337 | that they are valid under applicable law. If additional permissions
338 | apply only to part of the Program, that part may be used separately
339 | under those permissions, but the entire Program remains governed by
340 | this License without regard to the additional permissions.
341 |
342 | When you convey a copy of a covered work, you may at your option
343 | remove any additional permissions from that copy, or from any part of
344 | it. (Additional permissions may be written to require their own
345 | removal in certain cases when you modify the work.) You may place
346 | additional permissions on material, added by you to a covered work,
347 | for which you have or can give appropriate copyright permission.
348 |
349 | Notwithstanding any other provision of this License, for material you
350 | add to a covered work, you may (if authorized by the copyright holders of
351 | that material) supplement the terms of this License with terms:
352 |
353 | a) Disclaiming warranty or limiting liability differently from the
354 | terms of sections 15 and 16 of this License; or
355 |
356 | b) Requiring preservation of specified reasonable legal notices or
357 | author attributions in that material or in the Appropriate Legal
358 | Notices displayed by works containing it; or
359 |
360 | c) Prohibiting misrepresentation of the origin of that material, or
361 | requiring that modified versions of such material be marked in
362 | reasonable ways as different from the original version; or
363 |
364 | d) Limiting the use for publicity purposes of names of licensors or
365 | authors of the material; or
366 |
367 | e) Declining to grant rights under trademark law for use of some
368 | trade names, trademarks, or service marks; or
369 |
370 | f) Requiring indemnification of licensors and authors of that
371 | material by anyone who conveys the material (or modified versions of
372 | it) with contractual assumptions of liability to the recipient, for
373 | any liability that these contractual assumptions directly impose on
374 | those licensors and authors.
375 |
376 | All other non-permissive additional terms are considered "further
377 | restrictions" within the meaning of section 10. If the Program as you
378 | received it, or any part of it, contains a notice stating that it is
379 | governed by this License along with a term that is a further
380 | restriction, you may remove that term. If a license document contains
381 | a further restriction but permits relicensing or conveying under this
382 | License, you may add to a covered work material governed by the terms
383 | of that license document, provided that the further restriction does
384 | not survive such relicensing or conveying.
385 |
386 | If you add terms to a covered work in accord with this section, you
387 | must place, in the relevant source files, a statement of the
388 | additional terms that apply to those files, or a notice indicating
389 | where to find the applicable terms.
390 |
391 | Additional terms, permissive or non-permissive, may be stated in the
392 | form of a separately written license, or stated as exceptions;
393 | the above requirements apply either way.
394 |
395 | 8. Termination.
396 |
397 | You may not propagate or modify a covered work except as expressly
398 | provided under this License. Any attempt otherwise to propagate or
399 | modify it is void, and will automatically terminate your rights under
400 | this License (including any patent licenses granted under the third
401 | paragraph of section 11).
402 |
403 | However, if you cease all violation of this License, then your
404 | license from a particular copyright holder is reinstated (a)
405 | provisionally, unless and until the copyright holder explicitly and
406 | finally terminates your license, and (b) permanently, if the copyright
407 | holder fails to notify you of the violation by some reasonable means
408 | prior to 60 days after the cessation.
409 |
410 | Moreover, your license from a particular copyright holder is
411 | reinstated permanently if the copyright holder notifies you of the
412 | violation by some reasonable means, this is the first time you have
413 | received notice of violation of this License (for any work) from that
414 | copyright holder, and you cure the violation prior to 30 days after
415 | your receipt of the notice.
416 |
417 | Termination of your rights under this section does not terminate the
418 | licenses of parties who have received copies or rights from you under
419 | this License. If your rights have been terminated and not permanently
420 | reinstated, you do not qualify to receive new licenses for the same
421 | material under section 10.
422 |
423 | 9. Acceptance Not Required for Having Copies.
424 |
425 | You are not required to accept this License in order to receive or
426 | run a copy of the Program. Ancillary propagation of a covered work
427 | occurring solely as a consequence of using peer-to-peer transmission
428 | to receive a copy likewise does not require acceptance. However,
429 | nothing other than this License grants you permission to propagate or
430 | modify any covered work. These actions infringe copyright if you do
431 | not accept this License. Therefore, by modifying or propagating a
432 | covered work, you indicate your acceptance of this License to do so.
433 |
434 | 10. Automatic Licensing of Downstream Recipients.
435 |
436 | Each time you convey a covered work, the recipient automatically
437 | receives a license from the original licensors, to run, modify and
438 | propagate that work, subject to this License. You are not responsible
439 | for enforcing compliance by third parties with this License.
440 |
441 | An "entity transaction" is a transaction transferring control of an
442 | organization, or substantially all assets of one, or subdividing an
443 | organization, or merging organizations. If propagation of a covered
444 | work results from an entity transaction, each party to that
445 | transaction who receives a copy of the work also receives whatever
446 | licenses to the work the party's predecessor in interest had or could
447 | give under the previous paragraph, plus a right to possession of the
448 | Corresponding Source of the work from the predecessor in interest, if
449 | the predecessor has it or can get it with reasonable efforts.
450 |
451 | You may not impose any further restrictions on the exercise of the
452 | rights granted or affirmed under this License. For example, you may
453 | not impose a license fee, royalty, or other charge for exercise of
454 | rights granted under this License, and you may not initiate litigation
455 | (including a cross-claim or counterclaim in a lawsuit) alleging that
456 | any patent claim is infringed by making, using, selling, offering for
457 | sale, or importing the Program or any portion of it.
458 |
459 | 11. Patents.
460 |
461 | A "contributor" is a copyright holder who authorizes use under this
462 | License of the Program or a work on which the Program is based. The
463 | work thus licensed is called the contributor's "contributor version".
464 |
465 | A contributor's "essential patent claims" are all patent claims
466 | owned or controlled by the contributor, whether already acquired or
467 | hereafter acquired, that would be infringed by some manner, permitted
468 | by this License, of making, using, or selling its contributor version,
469 | but do not include claims that would be infringed only as a
470 | consequence of further modification of the contributor version. For
471 | purposes of this definition, "control" includes the right to grant
472 | patent sublicenses in a manner consistent with the requirements of
473 | this License.
474 |
475 | Each contributor grants you a non-exclusive, worldwide, royalty-free
476 | patent license under the contributor's essential patent claims, to
477 | make, use, sell, offer for sale, import and otherwise run, modify and
478 | propagate the contents of its contributor version.
479 |
480 | In the following three paragraphs, a "patent license" is any express
481 | agreement or commitment, however denominated, not to enforce a patent
482 | (such as an express permission to practice a patent or covenant not to
483 | sue for patent infringement). To "grant" such a patent license to a
484 | party means to make such an agreement or commitment not to enforce a
485 | patent against the party.
486 |
487 | If you convey a covered work, knowingly relying on a patent license,
488 | and the Corresponding Source of the work is not available for anyone
489 | to copy, free of charge and under the terms of this License, through a
490 | publicly available network server or other readily accessible means,
491 | then you must either (1) cause the Corresponding Source to be so
492 | available, or (2) arrange to deprive yourself of the benefit of the
493 | patent license for this particular work, or (3) arrange, in a manner
494 | consistent with the requirements of this License, to extend the patent
495 | license to downstream recipients. "Knowingly relying" means you have
496 | actual knowledge that, but for the patent license, your conveying the
497 | covered work in a country, or your recipient's use of the covered work
498 | in a country, would infringe one or more identifiable patents in that
499 | country that you have reason to believe are valid.
500 |
501 | If, pursuant to or in connection with a single transaction or
502 | arrangement, you convey, or propagate by procuring conveyance of, a
503 | covered work, and grant a patent license to some of the parties
504 | receiving the covered work authorizing them to use, propagate, modify
505 | or convey a specific copy of the covered work, then the patent license
506 | you grant is automatically extended to all recipients of the covered
507 | work and works based on it.
508 |
509 | A patent license is "discriminatory" if it does not include within
510 | the scope of its coverage, prohibits the exercise of, or is
511 | conditioned on the non-exercise of one or more of the rights that are
512 | specifically granted under this License. You may not convey a covered
513 | work if you are a party to an arrangement with a third party that is
514 | in the business of distributing software, under which you make payment
515 | to the third party based on the extent of your activity of conveying
516 | the work, and under which the third party grants, to any of the
517 | parties who would receive the covered work from you, a discriminatory
518 | patent license (a) in connection with copies of the covered work
519 | conveyed by you (or copies made from those copies), or (b) primarily
520 | for and in connection with specific products or compilations that
521 | contain the covered work, unless you entered into that arrangement,
522 | or that patent license was granted, prior to 28 March 2007.
523 |
524 | Nothing in this License shall be construed as excluding or limiting
525 | any implied license or other defenses to infringement that may
526 | otherwise be available to you under applicable patent law.
527 |
528 | 12. No Surrender of Others' Freedom.
529 |
530 | If conditions are imposed on you (whether by court order, agreement or
531 | otherwise) that contradict the conditions of this License, they do not
532 | excuse you from the conditions of this License. If you cannot convey a
533 | covered work so as to satisfy simultaneously your obligations under this
534 | License and any other pertinent obligations, then as a consequence you may
535 | not convey it at all. For example, if you agree to terms that obligate you
536 | to collect a royalty for further conveying from those to whom you convey
537 | the Program, the only way you could satisfy both those terms and this
538 | License would be to refrain entirely from conveying the Program.
539 |
540 | 13. Remote Network Interaction; Use with the GNU General Public License.
541 |
542 | Notwithstanding any other provision of this License, if you modify the
543 | Program, your modified version must prominently offer all users
544 | interacting with it remotely through a computer network (if your version
545 | supports such interaction) an opportunity to receive the Corresponding
546 | Source of your version by providing access to the Corresponding Source
547 | from a network server at no charge, through some standard or customary
548 | means of facilitating copying of software. This Corresponding Source
549 | shall include the Corresponding Source for any work covered by version 3
550 | of the GNU General Public License that is incorporated pursuant to the
551 | following paragraph.
552 |
553 | Notwithstanding any other provision of this License, you have
554 | permission to link or combine any covered work with a work licensed
555 | under version 3 of the GNU General Public License into a single
556 | combined work, and to convey the resulting work. The terms of this
557 | License will continue to apply to the part which is the covered work,
558 | but the work with which it is combined will remain governed by version
559 | 3 of the GNU General Public License.
560 |
561 | 14. Revised Versions of this License.
562 |
563 | The Free Software Foundation may publish revised and/or new versions of
564 | the GNU Affero General Public License from time to time. Such new versions
565 | will be similar in spirit to the present version, but may differ in detail to
566 | address new problems or concerns.
567 |
568 | Each version is given a distinguishing version number. If the
569 | Program specifies that a certain numbered version of the GNU Affero General
570 | Public License "or any later version" applies to it, you have the
571 | option of following the terms and conditions either of that numbered
572 | version or of any later version published by the Free Software
573 | Foundation. If the Program does not specify a version number of the
574 | GNU Affero General Public License, you may choose any version ever published
575 | by the Free Software Foundation.
576 |
577 | If the Program specifies that a proxy can decide which future
578 | versions of the GNU Affero General Public License can be used, that proxy's
579 | public statement of acceptance of a version permanently authorizes you
580 | to choose that version for the Program.
581 |
582 | Later license versions may give you additional or different
583 | permissions. However, no additional obligations are imposed on any
584 | author or copyright holder as a result of your choosing to follow a
585 | later version.
586 |
587 | 15. Disclaimer of Warranty.
588 |
589 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
590 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
591 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
592 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
593 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
594 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
595 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
596 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
597 |
598 | 16. Limitation of Liability.
599 |
600 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
601 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
602 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
603 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
604 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
605 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
606 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
607 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
608 | SUCH DAMAGES.
609 |
610 | 17. Interpretation of Sections 15 and 16.
611 |
612 | If the disclaimer of warranty and limitation of liability provided
613 | above cannot be given local legal effect according to their terms,
614 | reviewing courts shall apply local law that most closely approximates
615 | an absolute waiver of all civil liability in connection with the
616 | Program, unless a warranty or assumption of liability accompanies a
617 | copy of the Program in return for a fee.
618 |
619 | END OF TERMS AND CONDITIONS
620 |
621 | How to Apply These Terms to Your New Programs
622 |
623 | If you develop a new program, and you want it to be of the greatest
624 | possible use to the public, the best way to achieve this is to make it
625 | free software which everyone can redistribute and change under these terms.
626 |
627 | To do so, attach the following notices to the program. It is safest
628 | to attach them to the start of each source file to most effectively
629 | state the exclusion of warranty; and each file should have at least
630 | the "copyright" line and a pointer to where the full notice is found.
631 |
632 |
633 | Copyright (C)
634 |
635 | This program is free software: you can redistribute it and/or modify
636 | it under the terms of the GNU Affero General Public License as published
637 | by the Free Software Foundation, either version 3 of the License, or
638 | (at your option) any later version.
639 |
640 | This program is distributed in the hope that it will be useful,
641 | but WITHOUT ANY WARRANTY; without even the implied warranty of
642 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
643 | GNU Affero General Public License for more details.
644 |
645 | You should have received a copy of the GNU Affero General Public License
646 | along with this program. If not, see .
647 |
648 | Also add information on how to contact you by electronic and paper mail.
649 |
650 | If your software can interact with users remotely through a computer
651 | network, you should also make sure that it provides a way for users to
652 | get its source. For example, if your program is a web application, its
653 | interface could display a "Source" link that leads users to an archive
654 | of the code. There are many ways you could offer source, and different
655 | solutions will be better for different programs; see section 13 for the
656 | specific requirements.
657 |
658 | You should also get your employer (if you work as a programmer) or school,
659 | if any, to sign a "copyright disclaimer" for the program, if necessary.
660 | For more information on this, and how to apply and follow the GNU AGPL, see
661 | .
662 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Diablo 2 / D2R Bossq and Monster Drop Simulator 
2 |
3 | The drop simulator uses item type and quality generating functions and data files from D2 (TreasureClassEx.txt, ItemRatio.txt, ...) to reproduce the game's random loot drop mechanic. Quest bosses and other units like Cows, Countess, Council are available.
4 | - The code is open source and available [here](https://github.com/search?q=repo%3Apairofdocs%2Fd2-drop-simulator+language%3APython&type=Code)
5 | - To play, download the zip [here](https://github.com/pairofdocs/d2-drop-simulator/archive/refs/heads/master.zip) extract and double click `dropsim.exe`
6 | - Note: Windows will complain that the app is not signed by a verified source the first time it's launched. I click on "Show more" then "Run anyway"
7 | - An online drop simulator can be used here: https://pairofdocs.github.io/d2-dropsim-web/
8 |
9 | 
10 |
11 | 
12 |
13 | 
14 |
15 | 
16 |
17 | Each session's drops are logged to a file `session.txt`
18 | 
19 |
20 | Will RNG drop a Shako? Vipermagi, Gheeds, Occy?
21 | Vampgaze, Duriels, Skullders?
22 |
23 |
24 | ### Todos
25 | - Enable/disable check for same unique per run
26 | - Ethereal status
27 |
28 |
29 | ### Run `x` times
30 | Specify the number of runs to simulate with the text input field underneath the button `Run x times`. The results of the runs will be logged to the file `session.txt`. Drop sounds are disabled if the number of runs is more than 1.
31 |
32 |
33 | ### Drop Sounds
34 | A button to toggle drop sounds enables/disables playing a sound effect while loot is 'dropped' by a boss/monster.
35 | D2 mp3 files from this reddit [thread](https://www.reddit.com/r/pathofexile/comments/9at2tw/d2_sounds_arranged_for_neversinks_filterblade/?utm_source=share&utm_medium=mweb&_branch_match_id=894651600463416745) are included in the `sound/` folder.
36 | To use one of these sound files as the app's drop sound, rename the file to `dropsound.mp3`. To use your own drop sound effect, place your mp3 sound file in `sound/` and rename it to `dropsound.mp3`.
37 |
38 |
39 | ### Random Seed
40 | The `Seed` text input field allows setting a random number generator seed (an integer value) so that drops for a series of runs can be reproduced. The seed can only be set once for the duration of the app. If another seed is wanted the app has to be restarted.
41 |
42 |
43 | ### Modifying Drop Rates
44 | Modding the drop rates can be done through the data files in `data-113d/`. For example: Meph's drop treasure classes and item probabilities can be edited on line 692 in [TreasureClassEx.txt](https://github.com/pairofdocs/d2-drop-simulator/blob/master/data-113d/TreasureClassEx.txt#L692). Once edited, restart dropsim.exe and test. The Phrozen Keep has this great [guide](https://d2mods.info/forum/kb/viewarticle?a=368) for TreasureClassEx.txt.
45 |
46 |
47 | ### Credits and Tools
48 | - http://dropcalc.silospen.com/item.php
49 | - http://mfb.bplaced.net/dropcalc/dropcalc.php?lang=en&patch=113&mode=lod&interface=default&window=true
50 | - https://www.geeksforgeeks.org/create-first-gui-application-using-python-tkinter/
51 | - https://d2mods.info/forum/kb/viewarticle?a=368
52 | - https://d2mods.info/forum/kb/viewarticle?a=2
53 | - https://d2mods.info/forum/kb/viewarticle?a=320
54 | - https://www.purediablo.com/forums/threads/item-generation-tutorial.110/
55 |
56 |
57 | ### Copyrights
58 | Diablo II and Diablo II: Resurrected are [copyrighted](https://www.blizzard.com/en-us/legal/9c9cb70b-d1ed-4e17-998a-16c6df46be7b/copyright-notices) by Blizzard Entertainment, Inc. All rights reserved. Diablo II, Diablo II: Resurrected and Blizzard Entertainment are [trademarks](https://www.blizzard.com/en-us/legal/9c9cb70b-d1ed-4e17-998a-16c6df46be7b/copyright-notices) or registered trademarks of Blizzard Entertainment, Inc. in the U.S. and/or other countries.
59 | All trademarks referenced here are the properties of their respective owners.
60 |
61 | For the sake of convenience some text files and image files that the drop simulator requires are provided in this repository.
62 | These files are part of the Diablo II game series and are copyrighted by Blizzard Entertainment.
63 | They are provided only to save you the trouble of extracting them from the Diablo II game files.
64 | Promotional [material](https://youtu.be/DttPBtsZ5fc?t=87) from Blizzard Entertainment was used for background images in the drop simulator.
65 |
66 | This project and its maintainers are not associated with or endorsed by Blizzard Entertainment, Inc.
67 |
--------------------------------------------------------------------------------
/data-113d/ItemTypes.txt:
--------------------------------------------------------------------------------
1 | ItemType Code Equiv1 Equiv2 Repair Body BodyLoc1 BodyLoc2 Shoots Quiver Throwable Reload ReEquip AutoStack Magic Rare Normal Charm Gem Beltable MaxSock1 MaxSock25 MaxSock40 TreasureClass Rarity StaffMods CostFormula Class VarInvGfx InvGfx1 InvGfx2 InvGfx3 InvGfx4 InvGfx5 InvGfx6 StorePage *eol
2 | None 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0
3 | None 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0
4 | Shield shie shld 1 1 rarm larm 0 0 0 0 1 0 0 0 0 3 3 4 0 3 1 0 armo 0
5 | Armor tors armo 1 1 tors tors 0 0 0 0 1 0 0 0 0 3 4 6 0 3 1 0 armo 0
6 | Gold gold misc 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 0 0 0
7 | Bow Quiver bowq misl 0 1 rarm larm bow 0 1 0 1 1 0 0 0 0 0 0 0 3 0 0 misc 0
8 | Crossbow Quiver xboq misl 0 1 rarm larm xbow 0 1 0 1 1 0 0 0 0 0 0 0 3 0 0 misc 0
9 | Player Body Part play misc 0 0 0 0 0 0 1 1 0 0 0 0 0 0 3 0 0 misc 0
10 | Herb herb misc 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 misc 0
11 | Potion poti misc 0 0 0 0 0 0 1 0 0 1 0 0 0 0 3 0 0 misc 0
12 | Ring ring misc 0 1 rrin lrin 0 0 0 0 1 1 0 0 0 0 0 0 0 0 3 0 5 invrin1 invrin2 invrin3 invrin4 invrin5 misc 0
13 | Elixir elix misc 0 0 0 0 0 0 0 0 0 1 0 0 0 0 3 0 0 misc 0
14 | Amulet amul misc 0 1 neck neck 0 0 0 0 1 1 0 0 0 0 0 0 0 0 3 0 3 invamu1 invamu2 invamu3 misc 0
15 | Charm char misc 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 3 0 3 invch1 invch4 invch7 misc 0
16 | Not Used 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0
17 | Boots boot armo 1 1 feet feet 0 0 0 0 1 0 0 0 0 0 0 0 0 3 1 0 armo 0
18 | Gloves glov armo 1 1 glov glov 0 0 0 0 1 0 0 0 0 0 0 0 0 3 1 0 armo 0
19 | Not Used 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0
20 | Book book misc 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 0 0 misc 0
21 | Belt belt armo 1 1 belt belt 0 0 0 0 1 0 0 0 0 0 0 0 0 3 1 0 armo 0
22 | Gem gem sock 0 0 0 0 0 0 1 0 1 0 0 0 0 0 3 0 0 misc 0
23 | Torch torc misc 0 1 0 0 0 0 1 0 0 0 0 0 0 0 3 0 0 misc 0
24 | Scroll scro misc 0 0 0 0 0 0 1 0 0 1 0 0 0 0 3 0 0 misc 0
25 | Not Used 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0
26 | Scepter scep rod 1 1 rarm larm 0 0 0 0 1 0 0 0 0 3 5 6 0 1 pal 0 0 weap 0
27 | Wand wand rod 1 1 rarm larm 0 0 0 0 1 0 0 0 0 2 2 2 0 1 nec 0 0 weap 0
28 | Staff staf rod 1 1 rarm larm 0 0 0 0 1 0 0 0 0 5 6 6 0 1 sor 0 0 weap 0
29 | Bow bow miss 0 1 rarm larm bowq 0 0 0 0 1 0 0 0 0 3 4 6 1 3 0 0 weap 0
30 | Axe axe mele 1 1 rarm larm 0 0 0 0 1 0 0 0 0 4 5 6 0 3 0 0 weap 0
31 | Club club blun 1 1 rarm larm 0 0 0 0 1 0 0 0 0 3 4 6 0 3 0 0 weap 0
32 | Sword swor mele 1 1 rarm larm 0 0 0 0 1 0 0 0 0 3 4 6 0 3 0 0 weap 0
33 | Hammer hamm blun 1 1 rarm larm 0 0 0 0 1 0 0 0 0 3 4 6 0 3 0 0 weap 0
34 | Knife knif mele 1 1 rarm larm 0 0 0 0 1 0 0 0 0 2 3 3 0 3 0 0 weap 0
35 | Spear spea mele 1 1 rarm larm 0 0 0 0 1 0 0 0 0 3 4 6 0 3 0 0 weap 0
36 | Polearm pole mele 1 1 rarm larm 0 0 0 0 1 0 0 0 0 3 4 6 0 3 0 0 weap 0
37 | Crossbow xbow miss 1 1 rarm larm xboq 0 0 0 0 1 0 0 0 0 3 4 6 0 3 0 0 weap 0
38 | Mace mace blun 1 1 rarm larm 0 0 0 0 1 0 0 0 0 3 4 6 0 3 0 0 weap 0
39 | Helm helm armo 1 1 head head 0 0 0 0 1 0 0 0 0 2 2 3 0 3 1 0 armo 0
40 | Missile Potion tpot thro 0 1 rarm larm 1 1 1 1 1 0 0 0 0 0 0 0 3 0 0 misc 0
41 | Quest ques 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0
42 | Body Part body misc 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 2 0 misc 0
43 | Key key misc 0 0 0 0 0 1 1 0 0 0 0 0 0 0 3 0 0 misc 0
44 | Throwing Knife tkni comb knif 1 1 rarm larm 1 1 1 1 1 0 0 0 0 0 0 0 0 3 0 0 misc 0
45 | Throwing Axe taxe comb axe 1 1 rarm larm 1 1 1 1 1 0 0 0 0 0 0 0 0 3 0 0 misc 0
46 | Javelin jave comb spea 1 1 rarm larm 1 1 1 1 1 0 0 0 0 0 0 0 0 3 0 0 misc 0
47 | Weapon weap 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 3 0 0 0
48 | Melee Weapon mele weap 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 3 0 0 0
49 | Missile Weapon miss weap 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 0 0 0
50 | Thrown Weapon thro weap 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 3 0 0 0
51 | Combo Weapon comb mele thro 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 3 0 0 0
52 | Any Armor armo 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 3 0 0 0
53 | Any Shield shld armo seco 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 0 0 0
54 | Miscellaneous misc 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 0 0 0
55 | Socket Filler sock misc 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0
56 | Second Hand seco 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 0 0 0
57 | Staves And Rods rod blun 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 0 0 0
58 | Missile misl misc 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0
59 | Blunt blun mele 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 0 0 0
60 | Expansion
61 | Jewel jewl sock 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 3 0 6 invjw1 invjw2 invjw3 invjw4 invjw5 invjw6 misc 0
62 | Class Specific clas 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 0 0 0
63 | Amazon Item amaz clas 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 ama 0 0
64 | Barbarian Item barb clas 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 bar 0 0
65 | Necromancer Item necr clas 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 nec 0 0
66 | Paladin Item pala clas 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 pal 0 0
67 | Sorceress Item sorc clas 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 sor 0 0
68 | Assassin Item assn clas 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 2 0 ass 0 0
69 | Druid Item drui clas 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 dru 0 0
70 | Hand to Hand h2h mele assn 1 1 rarm larm 0 0 0 0 1 0 0 0 0 2 3 3 0 2 0 ass 0 weap 0
71 | Orb orb weap sorc 1 1 rarm larm 0 0 0 0 1 0 0 0 0 2 3 3 0 1 sor 0 sor 0 weap 0
72 | Voodoo Heads head shld necr 1 1 rarm larm 0 0 0 0 1 0 0 0 0 2 3 3 0 1 nec 0 nec 0 armo 0
73 | Auric Shields ashd shld pala 1 1 rarm larm 0 0 0 0 1 0 0 0 0 3 4 4 0 1 0 pal 0 armo 0
74 | Primal Helm phlm helm barb 1 1 head head 0 0 0 0 1 0 0 0 0 2 3 3 0 1 bar 0 bar 0 armo 0
75 | Pelt pelt helm drui 1 1 head head 0 0 0 0 1 0 0 0 0 2 3 3 0 1 dru 0 dru 0 armo 0
76 | Cloak cloa tors assn 1 1 tors tors 0 0 0 0 1 0 0 0 0 0 0 0 0 1 ass 0 ass 0 armo 0
77 | Rune rune sock 0 0 0 0 0 0 1 0 0 0 0 0 0 0 3 0 0 misc 0
78 | Circlet circ helm 1 1 head head 0 0 0 0 1 0 0 0 0 1 2 3 0 3 1 0 armo 0
79 | Healing Potion hpot poti 0 0 0 0 0 0 1 0 0 1 0 0 0 0 3 0 0 misc 0
80 | Mana Potion mpot poti 0 0 0 0 0 0 1 0 0 1 0 0 0 0 3 0 0 misc 0
81 | Rejuv Potion rpot hpot mpot 0 0 0 0 0 0 1 0 0 1 0 0 0 0 3 0 0 misc 0
82 | Stamina Potion spot poti 0 0 0 0 0 0 1 0 0 1 0 0 0 0 3 0 0 misc 0
83 | Antidote Potion apot poti 0 0 0 0 0 0 1 0 0 1 0 0 0 0 3 0 0 misc 0
84 | Thawing Potion wpot poti 0 0 0 0 0 0 1 0 0 1 0 0 0 0 3 0 0 misc 0
85 | Small Charm scha char 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 3 0 3 invch1 invch4 invch7 misc 0
86 | Medium Charm mcha char 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 3 0 3 invch2 invch5 invch8 misc 0
87 | Large Charm lcha char 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 3 0 3 invch3 invch6 invch9 misc 0
88 | Amazon Bow abow bow amaz 0 1 rarm larm bowq 0 0 0 0 1 0 0 0 0 3 4 5 1 1 0 ama 0 weap 0
89 | Amazon Spear aspe spea amaz 1 1 rarm larm 0 0 0 0 1 0 0 0 0 3 4 6 0 1 0 ama 0 weap 0
90 | Amazon Javelin ajav jave amaz 1 1 rarm larm 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 ama 0 misc 0
91 | Hand to Hand 2 h2h2 h2h 1 1 rarm larm 0 0 0 0 1 0 0 0 0 2 3 3 0 2 ass 0 ass 0 weap 0
92 | Magic Bow Quiv mboq bowq 0 1 rarm larm bow 0 1 0 0 1 1 0 0 0 0 0 0 0 0 3 0 0 misc 0
93 | Magic Xbow Quiv mxbq xboq 0 1 rarm larm xbow 0 1 0 0 1 1 0 0 0 0 0 0 0 0 3 0 0 misc 0
94 | Chipped Gem gem0 gem 0 0 0 0 0 0 1 0 1 0 0 0 0 0 3 0 0 misc 0
95 | Flawed Gem gem1 gem 0 0 0 0 0 0 1 0 1 0 0 0 0 0 3 0 0 misc 0
96 | Standard Gem gem2 gem 0 0 0 0 0 0 1 0 1 0 0 0 0 0 3 0 0 misc 0
97 | Flawless Gem gem3 gem 0 0 0 0 0 0 1 0 1 0 0 0 0 0 3 0 0 misc 0
98 | Perfect Gem gem4 gem 0 0 0 0 0 0 1 0 1 0 0 0 0 0 3 0 0 misc 0
99 | Amethyst gema gem 0 0 0 0 0 0 1 0 1 0 0 0 0 0 3 0 0 misc 0
100 | Diamond gemd gem 0 0 0 0 0 0 1 0 1 0 0 0 0 0 3 0 0 misc 0
101 | Emerald geme gem 0 0 0 0 0 0 1 0 1 0 0 0 0 0 3 0 0 misc 0
102 | Ruby gemr gem 0 0 0 0 0 0 1 0 1 0 0 0 0 0 3 0 0 misc 0
103 | Sapphire gems gem 0 0 0 0 0 0 1 0 1 0 0 0 0 0 3 0 0 misc 0
104 | Topaz gemt gem 0 0 0 0 0 0 1 0 1 0 0 0 0 0 3 0 0 misc 0
105 | Skull gemz gem 0 0 0 0 0 0 1 0 1 0 0 0 0 0 3 0 0 misc 0
106 |
--------------------------------------------------------------------------------
/data-113d/SetItems.txt:
--------------------------------------------------------------------------------
1 | index set item *item rarity lvl lvl req chrtransform invtransform invfile flippyfile dropsound dropsfxframe usesound cost mult cost add add func prop1 par1 min1 max1 prop2 par2 min2 max2 prop3 par3 min3 max3 prop4 par4 min4 max4 prop5 par5 min5 max5 prop6 par6 min6 max6 prop7 par7 min7 max7 prop8 par8 min8 max8 prop9 par9 min9 max9 aprop1a apar1a amin1a amax1a aprop1b apar1b amin1b amax1b aprop2a apar2a amin2a amax2a aprop2b apar2b amin2b amax2b aprop3a apar3a amin3a amax3a aprop3b apar3b amin3b amax3b aprop4a apar4a amin4a amax4a aprop4b apar4b amin4b amax4b aprop5a apar5a amin5a amax5a aprop5b apar5b amin5b amax5b *eol
2 | Civerb's Ward Civerb's Vestments lrg Large Shield 7 13 9 lyel lyel 5 2500 1 ac 15 15 block 15 15 mana 21 22 res-pois 25 26 0
3 | Civerb's Icon Civerb's Vestments amu Amulet 7 13 9 lyel lyel 5 2500 2 regen-mana 40 40 regen 4 4 res-cold 25 25 ac 25 25 0
4 | Civerb's Cudgel Civerb's Vestments gsc Grand Scepter 7 13 9 lyel lyel 5 2500 att 75 75 dmg-max 17 23 dmg/lvl 8 0
5 | Hsarus' Iron Heel Hsarus' Defense mbt Chain Boots 7 4 3 dred dred 5 2500 2 res-fire 25 25 move2 20 20 att/lvl 20 0
6 | Hsarus' Iron Fist Hsarus' Defense buc Buckler 7 4 3 dred dred 5 2500 2 red-dmg 2 2 str 10 10 ac/lvl 20 0
7 | Hsarus' Iron Stay Hsarus' Defense mbl Belt 7 4 3 dred dred 5 2500 2 res-cold 20 20 hp 20 20 ac/lvl 20 0
8 | Cleglaw's Tooth Cleglaw's Brace lsd Long Sword 7 6 4 lred lred 5 2500 2 att% 30 30 deadly 50 50 dmg/lvl 10 0
9 | Cleglaw's Claw Cleglaw's Brace sml Small Shield 7 6 4 lred lred 5 2500 2 ac 17 17 res-pois-len 75 75 res-all 15 15 0
10 | Cleglaw's Pincers Cleglaw's Brace mgl Bracers 7 6 4 lred lred 5 2500 2 knock 1 1 slow 25 25 att/lvl 20 0
11 | Iratha's Collar Iratha's Finery amu Amulet 7 21 15 lgry lgry 5 2500 2 res-pois 30 30 res-pois-len 75 75 res-all 15 15 0
12 | Iratha's Cuff Iratha's Finery tgl Light Gauntlets 7 21 15 lgry lgry 5 2500 2 res-cold 30 30 half-freeze 1 1 swing2 20 20 0
13 | Iratha's Coil Iratha's Finery crn Crown 7 21 15 lgry lgry 5 2500 2 res-fire 30 30 res-ltng 30 30 ac/lvl 16 0
14 | Iratha's Cord Iratha's Finery tbl Heavy Belt 7 21 15 lgry lgry 5 2500 2 ac 25 25 dmg-min 5 5 dex 10 10 0
15 | Isenhart's Lightbrand Isenhart's Armory bsd Broad Sword 7 11 8 lgld lgld 5 2500 2 dmg-min 10 10 swing2 20 20 att/lvl 10 0
16 | Isenhart's Parry Isenhart's Armory gts Gothic Shield 7 11 8 lgld lgld 5 2500 2 ac 40 40 light-thorns 4 4 res-all 8 8 0
17 | Isenhart's Case Isenhart's Armory brs Breast Plate 7 11 8 lgld lgld 5 2500 2 ac 40 40 red-mag 2 2 ac/lvl 16 0
18 | Isenhart's Horns Isenhart's Armory fhl Full Helm 7 11 8 lgld lgld 5 2500 2 dex 6 6 red-dmg 2 2 res-all 8 8 0
19 | Vidala's Barb Vidala's Rig lbb Long Battle Bow 7 19 14 blac blac 5 2500 2 ltng-min 1 1 ltng-max 20 20 att/lvl 16 0
20 | Vidala's Fetlock Vidala's Rig tbt Light Plate Boots 7 19 14 blac blac 5 2500 2 stam 150 150 move3 30 30 res-all 8 8 0
21 | Vidala's Ambush Vidala's Rig lea Leather Armor 7 19 14 blac blac 5 2500 2 ac 50 50 dex 11 11 res-fire 24 24 ac/lvl 20 0
22 | Vidala's Snare Vidala's Rig amu Amulet 7 19 14 blac blac 5 2500 2 hp 15 15 res-cold 20 20 mag% 50 50 0
23 | Milabrega's Orb Milabrega's Regalia kit Kite Shield 7 23 17 dblu dblu 5 2500 2 mag% 20 20 ac 25 25 hp 50 50 ac% 50 50 0
24 | Milabrega's Rod Milabrega's Regalia wsp War Scepter 7 23 17 dblu dblu 5 2500 pal 1 1 dmg% 50 50 light 2 2 0
25 | Milabrega's Diadem Milabrega's Regalia crn Crown 7 23 17 dblu dblu 5 2500 2 hp 15 15 mana 15 15 res-cold 40 40 0
26 | Milabrega's Robe Milabrega's Regalia aar Ancient Armor 7 23 17 dblu dblu 5 2500 2 thorns 3 3 red-dmg 2 2 ac% 100 100 0
27 | Cathan's Rule Cathan's Traps bst Battle Staff 7 15 11 dgrn dgrn 5 2500 2 fireskill 1 1 fire-max 10 10 mana 50 50 res-all 10 10 0
28 | Cathan's Mesh Cathan's Traps chn Chain Mail 7 15 11 dgrn dgrn 5 2500 2 ac 15 15 ease -50 -50 thorns 5 5 res-fire 30 30 0
29 | Cathan's Visage Cathan's Traps msk Mask 7 15 11 dgrn dgrn 5 2500 2 mana 20 20 res-cold 25 25 ac/lvl 16 0
30 | Cathan's Sigil Cathan's Traps amu Amulet 7 15 11 dgrn dgrn 5 2500 2 balance1 10 10 light-thorns 5 5 att 50 50 mag% 25 25 0
31 | Cathan's Seal Cathan's Traps rin Ring 7 15 11 dgrn dgrn 5 2500 2 lifesteal 6 6 red-dmg 2 2 str 10 10 0
32 | Tancred's Crowbill Tancred's Battlegear mpi Military Pick 7 27 20 dgld dgld 5 2500 2 att 75 75 dmg% 80 80 mana 20 20 swing2 20 20 0
33 | Tancred's Spine Tancred's Battlegear ful Full Plate Mail 7 27 20 dgld dgld 5 2500 2 hp 40 40 str 15 15 ac/lvl 16 0
34 | Tancred's Hobnails Tancred's Battlegear lbt Leather Boots 7 27 20 dgld dgld 5 2500 2 regen-stam 25 25 dex 10 10 move3 30 30 str 10 10 0
35 | Tancred's Weird Tancred's Battlegear amu Amulet 7 27 20 dgld dgld 5 2500 2 red-dmg 2 2 red-mag 1 1 mag% 78 78 att 60 60 0
36 | Tancred's Skull Tancred's Battlegear bhm Bone Helm 7 27 20 dgld dgld 5 2500 2 dmg% 10 10 att 40 40 res-all 10 10 0
37 | Sigon's Gage Sigon's Complete Steel hgl Gauntlets 7 9 6 whit whit 5 2500 2 str 10 10 att 20 20 swing3 30 30 0
38 | Sigon's Visor Sigon's Complete Steel ghm Great Helm 7 9 6 whit whit 5 2500 2 mana 30 30 ac 25 25 att/lvl 16 0
39 | Sigon's Shelter Sigon's Complete Steel gth Gothic Plate 7 9 6 whit whit 5 2500 2 ac% 25 25 res-ltng 30 30 thorns 20 20 0
40 | Sigon's Sabot Sigon's Complete Steel hbt Plate Boots 7 9 6 whit whit 5 2500 2 move2 20 20 res-cold 40 40 att 50 50 mag% 50 50 0
41 | Sigon's Wrap Sigon's Complete Steel hbl Girdle 7 9 6 whit whit 5 2500 2 res-fire 20 20 hp 20 20 ac/lvl 16 0
42 | Sigon's Guard Sigon's Complete Steel tow Tower Shield 7 9 6 whit whit 5 2500 2 allskills 1 1 block 20 20 0
43 | Infernal Cranium Infernal Tools cap Cap 7 7 5 lyel lyel 5 2500 2 res-all 10 10 dmg-to-mana 20 20 ac/lvl 16 0
44 | Infernal Torch Infernal Tools gwn Grim Wand 7 7 5 lyel lyel 5 2500 2 dmg-min 8 8 nec 1 1 att/lvl 20 0
45 | Infernal Sign Infernal Tools tbl Heavy Belt 7 7 5 lyel lyel 5 2500 2 ac 25 25 hp 20 20 res-pois 25 25 half-freeze 1 1 0
46 | Berserker's Headgear Berserker's Garb hlm Helm 7 5 3 dred dred 5 2500 2 ac 15 15 res-fire 25 25 att/lvl 16 0
47 | Berserker's Hauberk Berserker's Garb spl Splint Mail 7 5 3 dred dred 5 2500 2 red-mag 2 2 bar 1 1 ac/lvl 24 0
48 | Berserker's Hatchet Berserker's Garb 2ax Double Axe 7 5 3 dred dred 5 2500 2 att% 30 30 manasteal 5 5 dmg% 50 50 0
49 | Death's Hand Death's Disguise lgl Gloves 7 8 6 lred lred 5 2500 2 res-pois 50 50 res-pois-len 75 75 swing3 30 30 0
50 | Death's Guard Death's Disguise lbl Sash 7 8 6 lred lred 5 2500 2 ac 20 20 nofreeze 1 1 res-all 15 15 0
51 | Death's Touch Death's Disguise wsd War Sword 7 8 6 lred lred 5 2500 2 dmg% 25 25 lifesteal 4 4 dmg-cold 75 25 75 0
52 | Angelic Sickle Angelical Raiment sbr Saber 7 17 12 lgry lgry 5 2500 2 att 75 75 dmg-undead 250 250 dmg% 75 75 swing3 30 30 0
53 | Angelic Mantle Angelical Raiment rng Ring Mail 7 17 12 lgry lgry 5 2500 2 red-dmg 3 3 ac% 40 40 ac 150 150 res-fire 50 50 0
54 | Angelic Halo Angelical Raiment rin Ring 3 17 12 lgry lgry 5 2500 2 regen 6 6 hp 20 20 att/lvl 24 mag% 50 50 0
55 | Angelic Wings Angelical Raiment amu Amulet 7 17 12 lgry lgry 5 2500 2 light 3 3 dmg-to-mana 20 20 hp 75 75 allskills 1 1 0
56 | Arctic Horn Arctic Gear swb Short War Bow 7 3 2 lgld lgld 5 2500 2 att% 20 20 dmg% 50 50 att/lvl 16 dmg-cold 75 20 30 0
57 | Arctic Furs Arctic Gear qui Quilted Armor 7 3 2 lgld lgld 5 2500 2 ac% 275 325 res-all 10 10 ac/lvl 24 res-cold 15 15 0
58 | Arctic Binding Arctic Gear vbl Light Belt 7 3 2 lgld lgld 5 2500 2 res-cold 40 40 ac 30 30 mag% 40 40 res-cold 10 10 0
59 | Arctic Mitts Arctic Gear tgl Light Gauntlets 7 3 2 lgld lgld 5 2500 2 hp 20 20 swing1 10 10 att 50 50 dex 10 10 0
60 | Arcanna's Sign Arcanna's Tricks amu Amulet 1 20 15 blac blac 5 2500 2 mana 15 15 regen-mana 20 20 mag% 50 50 res-fire 20 20 0
61 | Arcanna's Deathwand Arcanna's Tricks wst War Staff 7 20 15 blac blac 5 2500 2 sor 1 1 deadly 25 25 mana 50 50 regen-mana 5 5 0
62 | Arcanna's Head Arcanna's Tricks skp Skull Cap 7 20 15 blac blac 5 2500 2 regen 4 4 thorns 2 2 ac/lvl 24 res-ltng 15 15 0
63 | Arcanna's Flesh Arcanna's Tricks ltp Light Plate 7 20 15 blac blac 5 2500 2 light 2 2 red-dmg 3 3 ac 100 100 enr 10 10 0
64 | Expansion 0
65 | Natalya's Totem Natalya's Odium xh9 Grim Helm 7 22 59 dgry dgry 5 5000 ac 135 175 dex 20 30 str 10 20 res-all 10 20 red-mag 3 3 0
66 | Natalya's Mark Natalya's Odium 7qr Scissors Suwayyah 7 22 79 dgry dgry 5 5000 swing3 40 40 dmg% 200 200 ignore-ac 1 1 dmg-cold 100 50 50 dmg-fire 12 17 dmg-undead 200 200 dmg-demon 200 200 0
67 | Natalya's Shadow Natalya's Odium ucl Loricated Mail 7 22 73 dgry dgry 5 5000 ac 150 225 hp/lvl 8 skilltab 19 2 2 res-pois-len 75 75 res-pois 25 25 sock 1 3 0
68 | Natalya's Soul Natalya's Odium xmb Mesh Boots 7 22 25 dgry dgry 5 5000 ac 75 125 move3 40 40 regen-stam/lvl 2 dur 50 50 res-cold 15 25 res-ltng 15 25 0
69 | Aldur's Stony Gaze Aldur's Watchtower dr8 Hunter's Guise 7 29 36 oran oran 5 5000 2 ac 90 90 regen-mana 17 17 light 5 5 balance3 25 25 res-cold 40 50 sock 2 2 enr 15 15 enr 15 15 enr 15 15 0
70 | Aldur's Deception Aldur's Watchtower uul Shadow Plate 7 29 76 oran oran 5 5000 2 ac 300 300 skilltab 16 1 1 str 20 20 dex 15 15 res-ltng 40 50 ease -50 -50 skilltab 17 1 1 vit 15 15 vit 15 15 vit 15 15 0
71 | Aldur's Gauntlet Aldur's Watchtower 9mt Jagged Star 7 29 42 oran oran 5 5000 2 dmg-norm 40 62 dmg-ltng 50 75 lifesteal 10 10 swing3 30 30 dmg-demon 200 200 manasteal 5 5 sock 2 5 str 15 15 str 15 15 str 15 15 0
72 | Aldur's Advance Aldur's Watchtower xtb Battle Boots 7 29 45 oran oran 5 5000 2 indestruct 1 1 regen-stam 32 32 hp 50 50 dmg-to-mana 10 10 move3 40 40 stam 180 180 res-fire 40 50 dex 15 15 dex 15 15 dex 15 15 0
73 | Immortal King's Will Immortal King ba5 Avenger Guard 7 37 47 lgry lgry 5 5000 ac 125 125 gold% 37 37 skilltab 14 2 2 light 4 4 mag% 25 40 sock 2 2 0
74 | Immortal King's Soul Cage Immortal King uar Sacred Armor 7 37 76 lgry lgry 5 5000 2 ac 400 400 gethit-skill 52 5 5 skilltab 12 2 2 res-pois 50 50 balance2 25 25 res-cold 40 40 res-fire 40 40 res-ltng 40 40 ac% 50 50 0
75 | Immortal King's Detail Immortal King zhb War Belt 7 37 29 lgry lgry 5 5000 2 ac 36 36 res-fire 28 28 res-ltng 31 31 str 25 25 ac 105 105 balance2 25 25 ac% 100 100 red-dmg% 20 20 skilltab 13 2 2 0
76 | Immortal King's Forge Immortal King xhg War Gauntlets 7 37 30 lgry lgry 5 5000 2 ac 65 65 str 20 20 dex 20 20 gethit-skill 38 12 4 swing2 25 25 ac 120 120 lifesteal 10 10 manasteal 10 10 freeze 2 2 0
77 | Immortal King's Pillar Immortal King xhb War Boots 7 37 31 lgry lgry 5 5000 2 ac 75 75 move3 40 40 att 110 110 hp 44 44 mag% 25 25 skilltab 12 2 2 ac 160 160 half-freeze 1 1 0
78 | Immortal King's Stone Crusher Immortal King 7m7 Ogre Maul 7 37 76 lgry lgry 5 5000 2 indestruct 1 1 swing3 40 40 dmg-demon 200 200 dmg-undead 200 200 crush 35 40 dmg% 200 200 sock 2 2 dmg-fire 211 397 dmg-ltng 7 477 dmg-cold 150 127 364 dmg-pois 150 349 349 dmg-mag 250 361 0
79 | Tal Rasha's Fire-Spun Cloth Tal Rasha's Wrappings zmb Mesh Belt 7 26 53 dpur dpur 5 5000 2 ease -20 -20 mana 30 30 dex 20 20 dmg-to-mana 37 37 mag% 10 15 ac 60 60 cast2 10 10 0
80 | Tal Rasha's Adjudication Tal Rasha's Wrappings amu Amulet 1 26 67 dpur dpur 5 5000 2 res-ltng 33 33 sor 2 2 hp 50 50 dmg-ltng 3 32 mana 42 42 cast2 10 10 0
81 | Tal Rasha's Lidless Eye Tal Rasha's Wrappings oba Swirling Crystal 7 26 65 dpur dpur 5 5000 2 hp 57 57 mana 77 77 enr 10 10 cast3 20 20 skill Fire Mastery 1 2 skill Lightning Mastery 1 2 skill Cold Mastery 1 2 sor 1 1 pierce-fire 15 15 pierce-ltng 15 15 extra-cold 15 15 0
82 | Tal Rasha's Guardianship Tal Rasha's Wrappings uth Lacquered Plate 7 26 71 dpur dpur 5 5000 2 ease -60 -60 red-mag 15 15 mag% 88 88 res-cold 40 40 res-fire 40 40 res-ltng 40 40 ac 400 400 cast2 10 10 0
83 | Tal Rasha's Horadric Crest Tal Rasha's Wrappings xsk Death Mask 7 26 66 dpur dpur 5 5000 mana 30 30 hp 60 60 ac 45 45 res-all 15 15 lifesteal 10 10 manasteal 10 10 0
84 | Griswold's Valor Griswold's Legacy urn Corona 7 44 69 dgld dgld 5 5000 2 ac% 50 75 abs-cold/lvl 2 2 sock 2 2 ease -40 -40 mag% 20 30 res-all 5 5 skilltab 10 2 2 0
85 | Griswold's Heart Griswold's Legacy xar Ornate Plate 7 44 45 dgld dgld 5 5000 ac 500 500 skilltab 11 2 2 sock 3 3 str 20 20 ease -40 -40 0
86 | Griswold's Redemption Griswold's Legacy 7ws Caduceus 7 44 53 dgld dgld 5 5000 2 dmg% 200 240 swing2 40 40 dmg-undead 200 200 ease -20 -20 sock 3 4 skilltab 9 2 2 dmg-norm 10 20 dmg-norm 10 20 0
87 | Griswold's Honor Griswold's Legacy paf Vortex Shield 7 44 68 dgld dgld 5 5000 ac 108 108 sock 3 block2 65 65 block 20 20 res-all 45 45 0
88 | Trang-Oul's Guise Trang-Oul's Avatar uh9 Bone Visage 7 32 65 dgld dgld 5 5000 ac 80 100 balance2 25 25 thorns 20 20 mana 150 150 regen 5 5 0
89 | Trang-Oul's Scales Trang-Oul's Avatar xul Chaos Armor 7 32 49 dyel dyel 5 5000 2 ease -40 -40 ac-miss 100 100 res-pois 40 40 skilltab 8 2 2 move3 40 40 ac% 150 150 res-ltng 50 50 red-dmg% 25 25 0
90 | Trang-Oul's Wing Trang-Oul's Avatar ne9 Cantor Trophy 7 32 54 dyel dyel 5 5000 2 ac 125 125 str 25 25 dex 15 15 res-fire 38 45 block 30 30 res-pois 40 40 skilltab 7 2 2 pierce-pois 25 25 regen 15 15 0
91 | Trang-Oul's Claws Trang-Oul's Avatar xmg Heavy Bracers 7 32 45 dyel dyel 5 5000 ac 30 30 cast3 20 20 res-cold 30 30 skilltab 6 2 2 extra-pois 25 25 0
92 | Trang-Oul's Girth Trang-Oul's Avatar utc Troll Belt 7 32 47 dyel dyel 5 5000 2 ac 75 100 stam 30 30 regen 5 5 hp 66 66 nofreeze 1 1 ease -40 -40 mana 25 50 res-cold 40 40 0
93 | M'avina's True Sight M'avina's Battle Hymn ci3 Diadem 7 21 59 whit whit 5 5000 2 ac 150 150 regen 10 10 swing2 30 30 mana 25 25 allskills 1 1 att% 50 50 res-all 25 25 0
94 | M'avina's Embrace M'avina's Battle Hymn uld Kraken Shell 7 21 70 whit whit 5 5000 2 gethit-skill 55 10 3 ease -30 -30 red-mag 5 12 skilltab 1 2 2 ac/lvl 32 ac 350 350 balance2 30 30 0
95 | M'avina's Icy Clutch M'avina's Battle Hymn xtg Battle Gauntlets 7 21 32 whit whit 5 5000 2 ac 45 50 dmg-cold 150 6 18 half-freeze 1 1 gold% 56 56 str 10 10 dex 15 15 dmg-cold 100 131 252 extra-cold 20 20 0
96 | M'avina's Tenet M'avina's Battle Hymn zvb Sharkskin Belt 7 21 45 whit whit 5 5000 2 ac 50 50 move2 20 20 manasteal 5 5 light 5 5 res-all 25 25 0
97 | M'avina's Caster M'avina's Battle Hymn amc Grand Matron Bow 7 21 70 whit whit 5 5000 2 dmg% 188 188 swing3 40 40 magicarrow 1 1 att 50 50 dmg-mag 114 377 hit-skill Nova 10 15 skilltab 0 2 2 0
98 | Telling of Beads The Disciple amu Amulet 1 39 30 lblu lblu 5 5000 res-pois 35 50 allskills 1 1 res-cold 18 18 thorns 8 10 0
99 | Laying of Hands The Disciple ulg Bramble Mitts 7 39 63 lblu lblu 5 5000 ac 25 25 swing2 20 20 res-fire 50 50 dmg-demon 350 350 hit-skill 101 10 3 0
100 | Rite of Passage The Disciple xlb Demonhide Boots 7 39 29 lblu lblu 5 5000 ac 25 25 move3 30 30 half-freeze 1 1 stam 15 25 0
101 | Dark Adherent The Disciple uui Dusk Shroud 7 39 43 lblu lblu 5 5000 ac 305 415 res-fire 24 24 gethit-skill 48 25 3 dmg-pois 50 125 175 0
102 | Credendum The Disciple umc Mithril Coil 7 39 65 lblu lblu 5 5000 ac 50 50 str 10 10 dex 10 10 res-all 15 15 0
103 | Dangoon's Teaching Heaven's Brethren 7ma Reinforced Mace 7 55 68 5 5000 dmg/lvl 12 swing3 40 40 hit-skill 44 10 3 dmg-fire 20 30 0
104 | Heaven's Taebaek Heaven's Brethren uts Ward 7 55 81 5 5000 ac 50 50 mana 100 100 res-ltng 30 30 thorns 30 30 indestruct 1 1 block 25 25 block3 30 30 0
105 | Haemosu's Adament Heaven's Brethren xrs Cuirass 7 55 44 5 5000 ac 500 500 ac-miss 35 35 hp 75 75 ac-hth 40 40 ease -20 -20 0
106 | Ondal's Almighty Heaven's Brethren uhm Spired Helm 7 55 69 5 5000 ac 50 50 ease -40 -40 hit-skill 72 10 3 str 10 10 dex 15 15 balance3 24 24 0
107 | Guillaume's Face Orphan's Call xhm Winged Helm 7 41 34 lgry lgry 5 5000 ac% 120 120 balance3 30 30 crush 35 35 deadly 15 15 str 15 15 0
108 | Wilhelm's Pride Orphan's Call ztb Battle Belt 7 41 42 lgry lgry 5 5000 ac% 75 75 manasteal 5 5 res-cold 10 10 lifesteal 5 5 0
109 | Magnus' Skin Orphan's Call xvg Sharkskin Gloves 7 41 37 lgry lgry 5 5000 ac% 50 50 res-fire 15 15 swing2 20 20 light 3 3 att 100 100 0
110 | Wihtstan's Guard Orphan's Call xml Round Shield 7 41 29 lgry lgry 5 5000 ac% 175 175 block3 40 40 block 55 55 half-freeze 1 1 light 5 5 0
111 | Hwanin's Splendor Hwanin's Majesty xrn Grand Crown 7 28 45 5 5000 regen 20 20 red-mag 10 10 res-cold 37 37 ac% 100 100 0
112 | Hwanin's Refuge Hwanin's Majesty xcl Tigulated Mail 7 28 30 5 5000 ac 200 200 res-pois 27 27 hp 100 100 gethit-skill 42 10 3 0
113 | Hwanin's Seal Hwanin's Majesty mbl Belt 7 28 35 5 5000 dmg-ltng 3 33 noheal 1 1 ac/lvl 12 dmg-to-mana 12 12 0
114 | Hwanin's Justice Hwanin's Majesty 9vo Bill 7 28 28 5 5000 att 330 330 indestruct 1 1 hit-skill 45 10 3 swing3 40 40 dmg% 200 200 dmg-ltng 5 25 0
115 | Sazabi's Cobalt Redeemer Sazabi's Grand Tribute 7ls Cryptic Sword 7 34 73 dblu dblu 5 5000 dmg% 150 150 dmg-cold 50 25 35 swing3 40 40 dmg-demon 318 318 indestruct 1 1 dex 15 15 str 5 5 0
116 | Sazabi's Ghost Liberator Sazabi's Grand Tribute upl Balrog Skin 7 34 67 dblu dblu 5 5000 ac 400 400 balance3 30 30 str 25 25 att-demon 300 300 hp 50 75 0
117 | Sazabi's Mental Sheath Sazabi's Grand Tribute xhl Basinet 7 34 43 dblu dblu 5 5000 ac 100 100 allskills 1 1 res-fire 15 20 res-ltng 15 20 0
118 | Bul-Kathos' Sacred Charge Bul-Kathos' Children 7gd Colossus Blade 7 50 61 dgrn dgrn 5 5000 crush 35 35 res-all 20 20 swing2 20 20 knock 1 1 dmg% 200 200 0
119 | Bul-Kathos' Tribal Guardian Bul-Kathos' Children 7wd Mythical Sword 7 50 54 dgrn dgrn 5 5000 res-fire 50 50 dmg-pois 50 255 255 swing2 20 20 str 20 20 dmg% 200 200 0
120 | Cow King's Horns Cow King's Leathers xap War Hat 7 20 25 5 5000 ac 75 75 half-freeze 1 1 dmg-to-mana 35 35 thorns 10 10 0
121 | Cow King's Hide Cow King's Leathers stu Studded Leather 7 20 18 5 5000 res-all 18 18 ac% 60 60 hp 30 30 gethit-skill 53 18 5 0
122 | Cow King's Hoofs Cow King's Leathers vbt Heavy Boots 7 20 13 5 5000 ac 25 35 move3 30 30 mag% 25 25 dex 20 20 dmg-fire 25 35 0
123 | Naj's Puzzler Naj's Ancient Set 6cs Elder Staff 7 43 78 5 5000 enr 35 35 dmg% 150 150 charged 54 69 11 cast3 30 30 dmg-ltng 6 45 mana 70 70 allskills 1 1 0
124 | Naj's Light Plate Naj's Ancient Set ult Hellforge Plate 7 43 71 5 5000 ease -60 -60 hp 65 65 res-all 25 25 dmg-to-mana 45 45 allskills 1 1 ac 300 300 0
125 | Naj's Circlet Naj's Ancient Set ci0 Circlet 7 43 28 5 5000 ac 75 75 dmg-fire 25 35 Light 5 5 str 15 15 gethit-skill 53 12 5 0
126 | Sander's Paragon McAuley's Folly cap Cap 3 20 25 lpur lpur 5 5000 mag% 35 35 thorns 8 8 ac/lvl 8 0
127 | Sander's Riprap McAuley's Folly vbt Heavy Boots 7 20 20 lpur lpur 5 5000 move3 40 40 att 100 100 str 5 5 dex 10 10 0
128 | Sander's Taboo McAuley's Folly vgl Heavy Gloves 7 20 28 lpur lpur 5 5000 ac 20 25 swing2 20 20 hp 40 40 dmg-pois 75 30 36 0
129 | Sander's Superstition McAuley's Folly bwn Bone Wand 7 20 25 lpur lpur 5 5000 dmg% 2 75 75 mana 25 25 manasteal 8 8 cast3 20 20 dmg-cold 50 25 75 0
130 |
--------------------------------------------------------------------------------
/data-113d/itemratio.txt:
--------------------------------------------------------------------------------
1 | Function Version Uber Class Specific Unique UniqueDivisor UniqueMin Rare RareDivisor RareMin Set SetDivisor SetMin Magic MagicDivisor MagicMin HiQuality HiQualityDivisor Normal NormalDivisor
2 | Ratio - (Monster Level / Ratio Divisor) 0 0 0 400 2 6400 160 3 3200 125 6 5600 30 16 192 12 16 4 8
3 | Uber 0 1 0 240 2 6400 96 3 3200 96 6 5600 3 100 192 4 16 1 8
4 | Ratio - (Monster Level / Ratio Divisor) 1 0 0 400 1 6400 100 2 3200 160 2 5600 34 3 192 12 8 2 2
5 | Uber 1 1 0 400 1 6400 100 2 3200 160 2 5600 34 3 192 12 8 1 1
6 | Class Specific 1 0 1 240 3 6400 80 3 3200 120 3 5600 17 6 192 9 8 2 2
7 | Class Specific Uber 1 1 1 240 3 6400 80 3 3200 120 3 5600 17 6 192 9 8 1 1
8 |
--------------------------------------------------------------------------------
/data-113d/misc.txt:
--------------------------------------------------------------------------------
1 | name *name szFlavorText compactsave version level levelreq rarity spawnable speed nodurability cost gamble cost code alternategfx namestr component invwidth invheight hasinv gemsockets gemapplytype flippyfile invfile uniqueinvfile special Transmogrify TMogType TMogMin TMogMax useable throwable type type2 dropsound dropsfxframe usesound unique transparent transtbl lightradius belt autobelt stackable minstack maxstack spawnstack quest questdiffcheck missiletype spellicon pSpell state cstate1 cstate2 len stat1 calc1 stat2 calc2 stat3 calc3 spelldesc spelldescstr spelldesccalc durwarning qntwarning gemoffset BetterGem bitfield1 CharsiMin CharsiMax CharsiMagicMin CharsiMagicMax CharsiMagicLvl GheedMin GheedMax GheedMagicMin GheedMagicMax GheedMagicLvl AkaraMin AkaraMax AkaraMagicMin AkaraMagicMax AkaraMagicLvl FaraMin FaraMax FaraMagicMin FaraMagicMax FaraMagicLvl LysanderMin LysanderMax LysanderMagicMin LysanderMagicMax LysanderMagicLvl DrognanMin DrognanMax DrognanMagicMin DrognanMagicMax DrognanMagicLvl HraltiMin HraltiMax HraltiMagicMin HraltiMagicMax HraltiMagicLvl AlkorMin AlkorMax AlkorMagicMin AlkorMagicMax AlkorMagicLvl OrmusMin OrmusMax OrmusMagicMin OrmusMagicMax OrmusMagicLvl ElzixMin ElzixMax ElzixMagicMin ElzixMagicMax ElzixMagicLvl AshearaMin AshearaMax AshearaMagicMin AshearaMagicMax AshearaMagicLvl CainMin CainMax CainMagicMin CainMagicMax CainMagicLvl HalbuMin HalbuMax HalbuMagicMin HalbuMagicMax HalbuMagicLvl MalahMin MalahMax MalahMagicMin MalahMagicMax MalahMagicLvl LarzukMin LarzukMax LarzukMagicMin LarzukMagicMax LarzukMagicLvl DrehyaMin DrehyaMax DrehyaMagicMin DrehyaMagicMax DrehyaMagicLvl JamellaMin JamellaMax JamellaMagicMin JamellaMagicMax JamellaMagicLvl Source Art Game Art Transform InvTrans SkipName NightmareUpgrade HellUpgrade mindam maxdam PermStoreItem multibuy Nameable *eol
2 | elixir elixir 1 0 21 0 4 1 0 1 20 elx elx elx 16 1 1 0 0 0 flppot invpot 0 xxx 1 0 elix item_potion 14 item_potion_drink 0 0 5 0 0 0 0 0 0 0 0 -1 8 experience 5 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
3 | Healing Potion Healing Potion 1 0 0 0 1 0 0 1 30 hpo hpo hpo 16 1 1 0 0 0 flprps invrps 0 xxx 1 0 hpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 1 0
4 | Mana Potion Mana Potion 1 0 0 0 1 0 0 1 30 mpo mpo mpo 16 1 1 0 0 0 flpbps invbps 0 xxx 1 0 mpot item_potion 14 item_potion_drink 0 0 5 0 1 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 1 0
5 | Full Healing Potion Full Healing Potion 1 0 0 0 2 0 0 1 150 hpf hpo hpf 16 1 1 0 0 0 flprpl invrpl 0 xxx 1 0 hpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 1 0
6 | Full Mana Potion Full Mana Potion 1 0 0 0 2 0 0 1 150 mpf mpo mpf 16 1 1 0 0 0 flpbpl invbpl 0 xxx 1 0 mpot item_potion 14 item_potion_drink 0 0 5 0 1 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 1 0
7 | Stamina Potion Stamina Potion 1 0 0 0 1 1 0 1 25 vps vps vps 16 1 1 0 0 0 flpwps invwps 0 xxx 1 0 spot item_potion 14 item_potion_drink 0 0 5 0 1 0 0 0 0 0 0 -1 9 staminapot 750 staminarecoverybonus 5000 0 0 0 non 0 255 255 2 4 255 255 3 5 3 5 255 255 255 3 5 255 255 255 255 2 3 255 255 2 3 255 255 255 2 3 255 0 0 0 xxx xxx 1 1 0
8 | Antidote Potion Antidote Potion 1 0 0 0 1 1 0 1 40 yps yps yps 16 1 1 0 0 0 flpnps invnps 0 xxx 1 0 apot item_potion 14 item_potion_drink 0 0 5 0 1 0 0 0 0 0 0 -1 6 antidote poison 750 poisonresist 50 maxpoisonresist 10 0 0 0 non 0 255 255 2 4 255 255 9 15 9 15 255 255 255 8 11 255 255 255 255 8 11 255 255 3 5 255 255 255 3 5 255 0 0 0 xxx xxx 1 1 0
9 | Rejuv Potion Rejuv Potion 1 0 0 0 2 0 0 1 400 rvs yps rvs 16 1 1 0 0 0 flpvps invvps 0 xxx 1 0 rpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 5 hitpoints 35 mana 35 1 ItemStatsrejuv1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
10 | Full Rejuv Potion Full Rejuv Potion 1 0 0 0 2 0 0 1 1500 rvl ypl rvl 16 1 1 0 0 0 flpvpl invvpl 0 xxx 1 0 rpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 5 hitpoints 100 mana 100 1 ItemStatsrejuv2 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
11 | Thawing Potion Thawing Potion 1 0 0 0 2 1 0 1 25 wms yps wms 16 1 1 0 0 0 flpyps invyps 0 xxx 1 0 wpot item_potion 14 item_potion_drink 0 0 5 0 1 0 0 0 0 0 0 -1 6 thawing freeze cold 750 coldresist 50 maxcoldresist 10 0 0 0 non 0 255 255 1 2 255 255 3 5 3 5 255 255 255 6 9 255 255 255 255 6 9 255 255 2 4 255 255 255 2 4 255 0 0 0 xxx xxx 1 1 0
12 | Town Portal Book Town Portal Book 0 0 0 0 2 1 0 1 250 tbk bbk tbk 16 1 2 0 0 0 flpbbk invbbk 0 xxx 1 0 book item_book 12 item_book 0 0 5 0 0 0 1 1 20 5 0 -1 2 0 0 0 non 0 255 255 2 255 255 255 2 4 2 4 255 255 255 2 4 2 4 255 255 255 255 255 1 2 255 255 255 1 2 255 0 0 0 xxx xxx 1 0
13 | Identify Book Identify Book 0 0 0 0 2 1 0 1 200 ibk rbk ibk 16 1 2 0 0 0 flprbk invrbk 0 xxx 1 0 book item_book 12 item_book 0 0 5 0 0 0 1 1 20 5 0 -1 1 0 0 0 non 0 255 255 2 255 255 255 2 4 2 4 255 255 255 2 4 2 4 255 255 255 255 255 1 2 255 255 255 1 2 255 0 0 0 xxx xxx 1 0
14 | amulet amulet 0 0 1 0 4 1 0 1 2400 63000 amu amu amu 16 1 1 1 1 1 flpamu invamu 0 xxx 0 0 amul item_amulet 12 item_amulet 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
15 | viper amulet viper amulet 0 0 15 0 4 0 0 1 400 vip vip vip 16 1 1 0 0 0 flpamu invvip invvip 0 xxx 0 0 amul item_amulet 12 item_amulet 0 0 5 0 0 0 0 0 0 0 10 1 0 -1 0 0 0 non 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 1 xxx xxx 0
16 | ring ring 0 0 1 0 4 1 0 1 1800 50000 rin rin rin 16 1 1 1 1 1 flprin invrin 0 xxx 0 0 ring item_ring 12 item_ring 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
17 | gold gold 1 0 0 0 1 1 0 1 0 gld gld gld 16 1 1 0 0 0 flpgld invgld 0 xxx 0 0 gold item_gold 12 item_gold 0 0 5 0 0 0 1 0 5000 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
18 | Bark Scroll Bark Scroll 1 0 0 0 0 0 0 1 100 bks bks bks 16 2 2 0 0 0 flpscr invscb 0 xxx 0 0 ques item_scroll 10 item_scroll 1 0 5 0 0 0 0 0 0 0 5 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
19 | deciphered Bark Scroll deciphered Bark Scroll 1 0 0 0 0 0 0 1 12000 bkd bkd bkd 16 2 2 0 0 0 flpscr invscb 0 xxx 0 0 ques item_scroll 10 item_scroll 1 0 5 0 0 0 0 0 0 0 5 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
20 | Arrows Arrows 0 0 0 0 1 1 0 1 256 aqv aqv aqv 16 1 3 0 0 0 flpqvr invqvr 0 xxx 0 0 bowq item_quiver 12 item_quiver 0 0 5 0 0 0 1 100 350 200 0 -1 0 1 0 non 0 3 5 255 1 3 255 255 3 4 3 4 255 255 255 3 4 3 4 255 255 255 2 3 255 2 3 255 255 3 4 255 255 3 4 255 3 4 255 255 0 0 0 xxx xxx 1 0
21 | Torch Torch 1 0 0 0 0 0 0 1 50 tch bsh tch 7 1 2 0 0 0 flptrch invtrch 0 xxx 0 0 torc item_staff 12 item_staff 0 1 3 6 0 0 0 2 10 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
22 | Bolts Bolts 0 0 0 0 1 1 0 1 256 cqv cqv cqv 16 1 3 0 0 0 flpqvr invcqv 0 xxx 0 0 xboq item_quiver 12 item_quiver 0 0 5 0 0 0 1 60 250 150 0 -1 0 1 0 non 0 2 4 255 2 4 255 255 3 4 3 4 255 255 255 3 4 3 4 255 255 255 2 3 255 2 3 255 255 3 4 255 255 3 4 255 3 4 255 255 0 0 0 xxx xxx 1 0
23 | Town Portal Scroll Town Portal Scroll 1 0 0 0 2 1 0 1 100 tsc bsc tsc 16 1 1 0 0 0 flpbsc invbsc 0 xxx 1 0 scro item_scroll 10 item_scroll 0 0 5 0 1 0 0 0 0 0 0 -1 2 0 0 0 non 0 255 255 11 17 255 255 255 11 17 11 17 255 255 255 11 17 11 17 255 255 255 255 255 5 7 255 255 255 5 7 255 0 0 0 xxx xxx 1 1 0
24 | Identify Scroll Identify Scroll 1 0 0 0 2 1 0 1 80 isc rsc isc 16 1 1 0 0 0 flprsc invrsc 0 xxx 1 0 scro item_scroll 10 item_scroll 0 0 5 0 1 0 0 0 0 0 0 -1 1 0 0 0 non 0 255 255 11 17 255 255 255 11 17 11 17 255 255 255 11 17 11 17 255 255 255 255 255 5 7 255 255 255 5 7 255 0 0 0 xxx xxx 1 1 0
25 | Not used Heart 0 0 0 0 1 0 0 1 60 hrt hrt hrt 16 1 1 0 0 0 flphrt invhrt 1 hpo 0 0 0 0 body item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
26 | Not used Brain 0 0 0 0 1 0 0 1 60 brz brz brz 16 1 1 0 0 0 flpbrnz invbrnz 1 opm 1 1 0 0 body item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
27 | Not used Jawbone 0 0 0 0 1 0 0 1 75 jaw jaw jaw 16 1 1 0 0 0 flpjaw invjaw 1 cqv 10 40 0 0 body item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
28 | Not used Eye 0 0 0 0 1 0 0 1 45 eyz eyz eyz 16 1 1 0 0 0 flpeye inveye 1 mpo 0 0 0 0 body item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
29 | Not used Horn 0 0 0 0 1 0 0 1 48 hrn hrn hrn 16 1 1 0 0 0 flphorn invhorn 1 aqv 10 40 0 0 body item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
30 | Not used Tail 0 0 0 0 1 0 0 1 63 tal tal tal 16 1 1 0 0 0 flptail invtail 1 vps 0 0 0 0 body item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
31 | Not used Flag 0 0 0 0 1 0 0 1 98 flg flg flg 16 1 1 0 0 0 flpflag invflag 0 xxx 0 0 body item_lightarmor 12 item_lightarmor 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
32 | Not used Fang 0 0 0 0 1 0 0 1 80 fng fng fng 16 1 1 0 0 0 flpfang invfang 1 key 1 1 0 0 body item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
33 | Not used Quill 0 0 0 0 1 0 0 1 32 qll qll qll 16 1 1 0 0 0 flpquil invquil 1 aqv 10 40 0 0 body item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
34 | Not used Soul 0 0 0 0 1 0 0 1 100 sol sol sol 16 1 1 0 0 0 flpsple invsple 1 mpo 0 0 0 0 body item_rare 12 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
35 | Not used Scalp 0 0 0 0 1 0 0 1 40 scz scz scz 16 1 1 0 0 0 flpscp invscp 1 hpf 0 0 0 0 body item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
36 | Not used Spleen 0 0 0 0 1 0 0 1 85 spe spe spe 16 1 1 0 0 0 flpsple invsple 1 gps 1 1 0 0 body item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
37 | Skeleton Key Skeleton Key 0 0 0 0 1 1 0 1 45 key key key 16 1 1 0 0 0 flpkey invkey 0 xxx 0 0 key item_key 12 item_key 0 0 5 0 0 0 1 1 12 6 0 -1 0 0 0 non 0 255 5 9 5 9 255 1 2 1 2 255 255 6 9 6 9 255 255 2 3 2 3 255 255 255 255 255 255 255 1 1 255 255 255 1 2 1 2 255 0 0 0 xxx xxx 1 1 0
38 | Mephisto Key Mephisto Key 0 0 0 0 1 0 0 1 99999 luv key luv 16 1 2 0 0 0 flpmph invmph 0 xxx 0 0 key item_key 12 item_key 0 0 5 0 0 0 0 0 0 0 20 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
39 | scroll of self resurrect scroll of self resurrect 0 0 0 0 999 0 0 1 10000 xyz scr xyz 16 1 1 0 0 0 flpwps invxyz 0 xxx 1 0 ques item_potion 14 item_potion_drink 0 0 5 0 0 0 0 0 0 0 19 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
40 | jade figurine jade figurine 1 0 0 0 0 0 0 1 100 j34 bks j34 16 1 2 0 0 0 flpjbi invjbi 0 xxx 0 0 ques item_rare 12 1 0 3 0 0 0 0 0 0 0 19 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
41 | gold bird gold bird 1 0 0 0 0 0 0 1 100 g34 bks g34 16 1 2 0 0 0 flpgbi invgbi 0 xxx 0 0 ques item_rare 12 1 0 4 0 0 0 0 0 0 0 19 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
42 | lam esen's tome lam esen's tome 1 0 0 0 0 0 0 1 100 bbb bbb bbb 16 2 2 0 0 0 flpbbb invbbb 0 xxx 0 0 ques item_book 12 item_book 1 0 5 0 0 0 0 0 0 0 16 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
43 | Horadric Cube Horadric Cube 0 0 0 0 0 0 0 1 0 box rbk box 16 2 2 0 0 0 flpbox invbox 0 xxx 1 0 ques item_rare 12 0 0 5 0 0 0 0 0 0 0 10 0 -1 7 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
44 | Scroll of Horadric Quest Info Scroll of Horadric Quest Info 1 0 0 0 999 0 0 1 0 tr1 grg tr1 16 2 2 0 0 0 flphscr invhscr 0 xxx 0 0 ques item_book 12 item_book 1 0 5 0 0 0 0 0 0 0 10 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
45 | Mephisto SoulStone Mephisto SoulStone 1 0 0 0 999 0 0 1 0 mss scr mss 16 1 1 0 0 0 flpmss invmss 0 xxx 0 0 ques item_gem 12 item_gem 1 0 5 0 0 0 0 0 0 0 23 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
46 | Book of Skill Book of Skill 1 0 0 0 999 0 0 1 0 ass tbk ass 16 2 2 0 0 0 flpbbk invsbk 0 xxx 1 0 ques item_book 12 item_book 1 0 5 0 0 0 0 0 0 0 15 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
47 | KhalimEye KhalimEye 1 0 0 0 1 0 0 1 45 qey eyz qey 16 1 1 0 0 0 flpeye inveye 0 xxx 0 0 ques item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 17 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
48 | KhalimHeart KhalimHeart 1 0 0 0 1 0 0 1 60 qhr hrt qhr 16 1 1 0 0 0 flphrt invhrt 0 xxx 0 0 ques item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 17 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
49 | KhalimBrain KhalimBrain 1 0 0 0 1 0 0 1 60 qbr brz qbr 16 1 1 0 0 0 flpbrnz invbrnz 0 xxx 0 0 ques item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 17 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
50 | Player Ear Player Ear 1 0 0 0 1 0 0 1 0 ear ear ear 16 1 1 0 0 0 flpear invear 0 xxx 0 0 play item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
51 | Chipped Amethyst Chipped Amethyst 1 0 0 1 2 1 0 1 500 gcv gcv gcv 16 1 1 0 0 0 flpgsv invgsva 0 xxx 0 0 gema gem0 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gfv 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
52 | Flawed Amethyst Flawed Amethyst 1 0 0 5 3 1 0 1 1500 gfv gfv gfv 16 1 1 0 0 0 flpgsv invgsvb 0 xxx 0 0 gema gem1 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gsv 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
53 | Amethyst Amethyst 1 0 0 12 4 1 0 1 5000 gsv gsv gsv 16 1 1 0 0 0 flpgsv invgsvc 0 xxx 0 0 gema gem2 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gzv 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
54 | Flawless Amethyst Flawless Amethyst 1 0 0 15 5 1 0 1 15000 gzv gzv gzv 16 1 1 0 0 0 flpgsv invgsvd 0 xxx 0 0 gema gem3 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gpv 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
55 | Perfect Amethyst Perfect Amethyst 1 0 0 18 6 1 0 1 30000 gpv gpv gpv 16 1 1 0 0 0 flpgsv invgsve 0 xxx 0 0 gema gem4 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
56 | Chipped Topaz Chipped Topaz 1 0 0 1 3 1 0 1 500 gcy gcy gcy 16 1 1 0 0 0 flpgsy invgsya 0 xxx 0 0 gemt gem0 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gfy 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
57 | Flawed Topaz Flawed Topaz 1 0 0 5 4 1 0 1 1500 gfy gfy gfy 16 1 1 0 0 0 flpgsy invgsyb 0 xxx 0 0 gemt gem1 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gsy 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
58 | Topaz Topaz 1 0 0 12 5 1 0 1 5000 gsy gsy gsy 16 1 1 0 0 0 flpgsy invgsyc 0 xxx 0 0 gemt gem2 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gly 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
59 | Flawless Topaz Flawless Topaz 1 0 0 15 6 1 0 1 15000 gly gly gly 16 1 1 0 0 0 flpgsy invgsyd 0 xxx 0 0 gemt gem3 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gpy 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
60 | Perfect Topaz Perfect Topaz 1 0 0 18 7 1 0 1 30000 gpy gpy gpy 16 1 1 0 0 0 flpgsy invgsye 0 xxx 0 0 gemt gem4 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
61 | Chipped Saphire Chipped Saphire 1 0 0 1 4 1 0 1 500 gcb gcb gcb 16 1 1 0 0 0 flpgsb invgsba 0 xxx 0 0 gems gem0 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gfb 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
62 | Flawed Saphire Flawed Saphire 1 0 0 5 5 1 0 1 1500 gfb gfb gfb 16 1 1 0 0 0 flpgsb invgsbb 0 xxx 0 0 gems gem1 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gsb 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
63 | Saphire Saphire 1 0 0 12 6 1 0 1 5000 gsb gsb gsb 16 1 1 0 0 0 flpgsb invgsbc 0 xxx 0 0 gems gem2 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 glb 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
64 | Flawless Saphire Flawless Saphire 1 0 0 15 7 1 0 1 15000 glb glb glb 16 1 1 0 0 0 flpgsb invgsbd 0 xxx 0 0 gems gem3 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gpb 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
65 | Perfect Saphire Perfect Saphire 1 0 0 18 8 1 0 1 30000 gpb gpb gpb 16 1 1 0 0 0 flpgsb invgsbe 0 xxx 0 0 gems gem4 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
66 | Chipped Emerald Chipped Emerald 1 0 0 1 5 1 0 1 500 gcg gcg gcg 16 1 1 0 0 0 flpgsg invgsga 0 xxx 0 0 geme gem0 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gfg 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
67 | Flawed Emerald Flawed Emerald 1 0 0 5 6 1 0 1 1500 gfg gfg gfg 16 1 1 0 0 0 flpgsg invgsgb 0 xxx 0 0 geme gem1 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gsg 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
68 | Emerald Emerald 1 0 0 12 7 1 0 1 5000 gsg gsg gsg 16 1 1 0 0 0 flpgsg invgsgc 0 xxx 0 0 geme gem2 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 glg 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
69 | Flawless Emerald Flawless Emerald 1 0 0 15 8 1 0 1 15000 glg glg glg 16 1 1 0 0 0 flpgsg invgsgd 0 xxx 0 0 geme gem3 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gpg 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
70 | Perfect Emerald Perfect Emerald 1 0 0 18 9 1 0 1 30000 gpg gpg gpg 16 1 1 0 0 0 flpgsg invgsge 0 xxx 0 0 geme gem4 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
71 | Chipped Ruby Chipped Ruby 1 0 0 1 6 1 0 1 500 gcr gcr gcr 16 1 1 0 0 0 flpgsr invgsra 0 xxx 0 0 gemr gem0 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gfr 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
72 | Flawed Ruby Flawed Ruby 1 0 0 5 7 1 0 1 1500 gfr gfr gfr 16 1 1 0 0 0 flpgsr invgsrb 0 xxx 0 0 gemr gem1 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gsr 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
73 | Ruby Ruby 1 0 0 12 8 1 0 1 5000 gsr gsr gsr 16 1 1 0 0 0 flpgsr invgsrc 0 xxx 0 0 gemr gem2 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 glr 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
74 | Flawless Ruby Flawless Ruby 1 0 0 15 9 1 0 1 15000 glr glr glr 16 1 1 0 0 0 flpgsr invgsrd 0 xxx 0 0 gemr gem3 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gpr 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
75 | Perfect Ruby Perfect Ruby 1 0 0 18 10 1 0 1 30000 gpr gpr gpr 16 1 1 0 0 0 flpgsr invgsre 0 xxx 0 0 gemr gem4 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
76 | Chipped Diamond Chipped Diamond 1 0 0 1 7 1 0 1 500 gcw gcw gcw 16 1 1 0 0 0 flpgsw invgswa 0 xxx 0 0 gemd gem0 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gfw 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
77 | Flawed Diamond Flawed Diamond 1 0 0 5 8 1 0 1 1500 gfw gfw gfw 16 1 1 0 0 0 flpgsw invgswb 0 xxx 0 0 gemd gem1 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gsw 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
78 | Diamond Diamond 1 0 0 12 9 1 0 1 5000 gsw gsw gsw 16 1 1 0 0 0 flpgsw invgswc 0 xxx 0 0 gemd gem2 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 glw 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
79 | Flawless Diamond Flawless Diamond 1 0 0 15 10 1 0 1 15000 glw glw glw 16 1 1 0 0 0 flpgsw invgswd 0 xxx 0 0 gemd gem3 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 gpw 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
80 | Perfect Diamond Perfect Diamond 1 0 0 18 11 1 0 1 30000 gpw gpw gpw 16 1 1 0 0 0 flpgsw invgswe 0 xxx 0 0 gemd gem4 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
81 | Minor Healing Potion Minor Healing Potion 1 0 0 0 1 1 0 1 30 hp1 hp1 hp1 16 1 1 0 0 0 flprps invhp1 0 xxx 1 0 hpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 healthpot 192 hpregen 30 2 ItemStats1q 30 0 0 0 non 0 255 255 1 1 255 255 1 1 255 1 1 255 255 255 1 1 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 hp4 hp5 1 1 0
82 | Light Healing Potion Light Healing Potion 1 0 0 0 1 1 0 1 75 hp2 hp2 hp2 16 1 1 0 0 0 flprps invhp2 0 xxx 1 0 hpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 healthpot 160 hpregen 60 2 ItemStats1q 60 0 0 0 non 0 255 255 255 255 1 1 255 1 1 255 255 255 1 1 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 hp4 hp5 1 1 0
83 | Healing Potion Healing Potion 1 0 0 0 1 1 0 1 125 hp3 hp3 hp3 16 1 1 0 0 0 flprps invhp3 0 xxx 1 0 hpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 healthpot 171 hpregen 100 2 ItemStats1q 100 0 0 0 non 0 255 255 255 255 255 255 255 255 1 1 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 hp4 hp5 1 1 0
84 | Greater Healing Potion Greater Healing Potion 1 0 0 0 1 1 0 1 250 hp4 hp4 hp4 16 1 1 0 0 0 flprpl invhp4 0 xxx 1 0 hpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 healthpot 192 hpregen 180 2 ItemStats1q 180 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 xxx hp5 1 1 0
85 | Super Healing Potion Super Healing Potion 1 0 0 0 1 1 0 1 500 hp5 hp5 hp5 16 1 1 0 0 0 flprpl invhp5 0 xxx 1 0 hpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 healthpot 256 hpregen 320 2 ItemStats1q 320 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 1 0
86 | Minor Mana Potion Minor Mana Potion 1 0 0 0 1 1 0 1 60 mp1 mp1 mp1 16 1 1 0 0 0 flpbps invmp1 0 xxx 1 0 mpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 manapot 128 manarecovery 20 2 ItemStats1q 20 0 0 0 non 0 255 255 1 1 255 255 1 1 255 1 1 255 255 255 1 1 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 mp4 mp5 1 1 0
87 | Light Mana Potion Light Mana Potion 1 0 0 0 1 1 0 1 150 mp2 mp2 mp2 16 1 1 0 0 0 flpbps invmp2 0 xxx 1 0 mpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 manapot 128 manarecovery 40 2 ItemStats1q 40 0 0 0 non 0 255 255 255 255 1 1 255 1 1 255 255 255 1 1 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 mp4 mp5 1 1 0
88 | Mana Potion Mana Potion 1 0 0 0 1 1 0 1 300 mp3 mp3 mp3 16 1 1 0 0 0 flpbps invmp3 0 xxx 1 0 mpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 manapot 128 manarecovery 80 2 ItemStats1q 80 0 0 0 non 0 255 255 255 255 255 255 255 255 1 1 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 mp4 mp5 1 1 0
89 | Greater Mana Potion Greater Mana Potion 1 0 0 0 1 1 0 1 500 mp4 mp4 mp4 16 1 1 0 0 0 flpbpl invmp4 0 xxx 1 0 mpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 manapot 128 manarecovery 150 2 ItemStats1q 150 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 xxx mp5 1 1 0
90 | Super Mana Potion Super Mana Potion 1 0 0 0 1 1 0 1 1000 mp5 mp5 mp5 16 1 1 0 0 0 flpbpl invmp5 0 xxx 1 0 mpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 manapot 128 manarecovery 250 2 ItemStats1q 250 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 1 0
91 | Chipped Skull Chipped Skull 1 0 0 1 8 1 0 1 1000 skc skc skc 16 1 1 0 0 0 flpskl invskc 0 xxx 0 0 gemz gem0 item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 skf 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
92 | Flawed Skull Flawed Skull 1 0 0 5 9 1 0 1 3000 skf skf skf 16 1 1 0 0 0 flpskl invskf 0 xxx 0 0 gemz gem1 item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 sku 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
93 | Skull Skull 1 0 0 12 10 1 0 1 10000 sku sku sku 16 1 1 0 0 0 flpskl invsku 0 xxx 0 0 gemz gem2 item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 skl 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
94 | Flawless Skull Flawless Skull 1 0 0 15 11 1 0 1 30000 skl skl skl 16 1 1 0 0 0 flpskl invskl 0 xxx 0 0 gemz gem3 item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 skz 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
95 | Perfect Skull Perfect Skull 1 0 0 18 12 1 0 1 100000 skz skz skz 16 1 1 0 0 0 flpskl invskz 0 xxx 0 0 gemz gem4 item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
96 | Expansion Expansion
97 | herb herb 0 100 3 0 3 0 0 1 75 hrb hrb hrb 16 1 1 0 0 0 flphrb invhrb 0 xxx 1 0 herb item_herb 12 item_herb 0 0 5 0 1 0 0 0 0 0 0 -1 9 innersight 1000 velocitypercent 25 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
98 | Charm Small Charm Small 0 100 28 0 4 1 0 1 2000 45000 cm1 rld cm1 16 1 1 0 0 0 flpchm1 invchm 0 xxx 0 0 scha item_charm 12 item_charm 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
99 | Charm Medium Charm Medium 0 100 14 0 8 1 0 1 1000 38000 cm2 rda cm2 16 1 2 0 0 0 flpchm2 invwnd 0 xxx 0 0 mcha item_charm 12 item_charm 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
100 | Charm Large Charm Large 0 100 1 0 12 1 0 1 600 32000 cm3 rgd cm3 16 1 3 0 0 0 flpchm3 invsst 0 xxx 0 0 lcha item_charm 12 item_charm 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
101 | Small Red Potion Small Red Potion 1 100 0 0 1 0 0 1 100 rps rps rps 16 1 1 0 0 0 flprps invrps 0 xxx 1 0 hpot item_potion 14 item_potion_drink 0 0 5 0 0 0 1 5 10 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
102 | Large Red Potion Large Red Potion 1 100 0 0 1 0 0 1 100 rpl rpl rpl 16 1 1 0 0 0 flprpl invrpl 0 xxx 1 0 hpot item_potion 14 item_potion_drink 0 0 5 0 0 0 1 5 10 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
103 | Small Blue Potion Small Blue Potion 1 100 0 0 1 0 0 1 100 bps bps bps 16 1 1 0 0 0 flpbps invbps 0 xxx 1 0 mpot item_potion 14 item_potion_drink 0 0 5 0 0 0 1 5 10 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
104 | Large Blue Potion Large Blue Potion 1 100 0 0 1 0 0 1 100 bpl bpl bpl 16 1 1 0 0 0 flpbpl invbpl 0 xxx 1 0 mpot item_potion 14 item_potion_drink 0 0 5 0 0 0 1 5 10 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
105 | El Rune El 1 100 11 11 1 1 0 1 560 r01 r01 r01 16 1 1 0 0 0 flprun invrEl 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
106 | Eld Rune Eld 1 100 11 11 1 1 0 1 560 r02 r02 r02 16 1 1 0 0 0 flprun invrEld 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
107 | Tir Rune Tir 1 100 13 13 2 1 0 1 1260 r03 r03 r03 16 1 1 0 0 0 flprun invrTir 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
108 | Nef Rune Nef 1 100 13 13 2 1 0 1 1260 r04 r04 r04 16 1 1 0 0 0 flprun invrNef 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
109 | Eth Rune Eth 1 100 15 15 3 1 0 1 2240 r05 r05 r05 16 1 1 0 0 0 flprun invrEth 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
110 | Ith Rune Ith 1 100 15 15 3 1 0 1 2240 r06 r06 r06 16 1 1 0 0 0 flprun invrIth 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
111 | Tal Rune Tal 1 100 17 17 4 1 0 1 3500 r07 r07 r07 16 1 1 0 0 0 flprun invrTal 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
112 | Ral Rune Ral 1 100 19 19 5 1 0 1 5040 r08 r08 r08 16 1 1 0 0 0 flprun invrRal 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
113 | Ort Rune Ort 1 100 21 21 6 1 0 1 6860 r09 r09 r09 16 1 1 0 0 0 flprun invrOrt 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
114 | Thul Rune Thul 1 100 23 23 7 1 0 1 8960 r10 r10 r10 16 1 1 0 0 0 flprun invrThul 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
115 | Amn Rune Amn 1 100 25 25 8 1 0 1 11340 r11 r11 r11 16 1 1 0 0 0 flprun invrAmn 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
116 | Sol Rune Sol 1 100 27 27 9 1 0 1 14000 r12 r12 r12 16 1 1 0 0 0 flprun invrSol 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
117 | Shael Rune Shael 1 100 29 29 10 1 0 1 16940 r13 r13 r13 16 1 1 0 0 0 flprun invrShae 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
118 | Dol Rune Dol 1 100 31 31 11 1 0 1 20160 r14 r14 r14 16 1 1 0 0 0 flprun invrDol 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
119 | Hel Rune Hel 1 100 33 0 12 1 0 1 1715 r15 r15 r15 16 1 1 0 0 0 flprun invrHel 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
120 | Io Rune Io 1 100 35 35 13 1 0 1 27440 r16 r16 r16 16 1 1 0 0 0 flprun invrIo 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
121 | Lum Rune Lum 1 100 37 37 14 1 0 1 31500 r17 r17 r17 16 1 1 0 0 0 flprun invrLum 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
122 | Ko Rune Ko 1 100 39 39 15 1 0 1 35840 r18 r18 r18 16 1 1 0 0 0 flprun invrKo 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
123 | Fal Rune Fal 1 100 41 41 16 1 0 1 40460 r19 r19 r19 16 1 1 0 0 0 flprun invrFal 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
124 | Lem Rune Lem 1 100 43 43 17 1 0 1 45360 r20 r20 r20 16 1 1 0 0 0 flprun invrLem 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
125 | Pul Rune Pul 1 100 45 45 18 1 0 1 50540 r21 r21 r21 16 1 1 0 0 0 flprun invrPul 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
126 | Um Rune Um 1 100 47 47 19 1 0 1 56000 r22 r22 r22 16 1 1 0 0 0 flprun invrUm 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
127 | Mal Rune Mal 1 100 49 49 20 1 0 1 61740 r23 r23 r23 16 1 1 0 0 0 flprun invrMal 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
128 | Ist Rune Ist 1 100 51 51 21 1 0 1 67760 r24 r24 r24 16 1 1 0 0 0 flprun invrIst 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
129 | Gul Rune Gul 1 100 53 53 22 1 0 1 74060 r25 r25 r25 16 1 1 0 0 0 flprun invrGul 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
130 | Vex Rune Vex 1 100 55 55 23 1 0 1 80640 r26 r26 r26 16 1 1 0 0 0 flprun invrVex 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
131 | Ohm Rune Ohm 1 100 57 57 24 1 0 1 87500 r27 r27 r27 16 1 1 0 0 0 flprun invrOhm 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
132 | Lo Rune Lo 1 100 59 59 25 1 0 1 94640 r28 r28 r28 16 1 1 0 0 0 flprun invrLo 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
133 | Sur Rune Sur 1 100 61 61 26 1 0 1 102060 r29 r29 r29 16 1 1 0 0 0 flprun invrSur 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
134 | Ber Rune Ber 1 100 63 63 27 1 0 1 109760 r30 r30 r30 16 1 1 0 0 0 flprun invrBer 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
135 | Jah Rune Jah 1 100 65 65 28 1 0 1 117740 r31 r31 r31 16 1 1 0 0 0 flprun invrJo 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
136 | Cham Rune Cham 1 100 67 67 29 1 0 1 126000 r32 r32 r32 16 1 1 0 0 0 flprun invrCham 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
137 | Zod Rune Zod 1 100 69 69 30 1 0 1 134540 r33 r33 r33 16 1 1 0 0 0 flprun invrZod 0 xxx 0 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
138 | Jewel Jewel 0 100 1 0 8 1 0 1 1000 jew gpw jew 16 1 1 0 0 0 flpgsw invgswe 0 xxx 0 0 jewl item_jewel 12 item_jewel 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
139 | Maguffin ice 0 100 0 0 999 0 0 1 10000 ice scr ice 16 1 1 0 0 0 flpwps invxyz 0 xxx 0 0 ques item_potion 14 item_potion_drink 0 0 5 0 0 0 0 0 0 0 32 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
140 | Scroll Scroll 0 100 0 0 0 1 0 1 100 0sc rsc 0sc 16 1 1 0 0 0 flprsc invrsc 0 xxx 1 0 scro item_scroll 10 item_scroll 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
141 | Scroll of Malah - Boost Resistances Scroll of Malah - Boost Resistances 1 100 0 0 999 0 0 1 0 tr2 scr tr2 16 2 2 0 0 0 flpscr invscb 0 xxx 1 0 ques item_scroll 10 item_scroll 1 0 5 0 0 0 0 0 0 0 32 1 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
142 | Key of Terror Pandemonium Key 1 0 100 0 0 1 0 0 1 99999 pk1 key pk1 16 1 2 0 0 0 flpmph invmph 0 xxx 0 0 ques item_key 12 item_key 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
143 | Key of Hate Pandemonium Key 2 0 100 0 0 1 0 0 1 99999 pk2 key pk2 16 1 2 0 0 0 flpmph invmph 0 xxx 0 0 ques item_key 12 item_key 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
144 | Key of Destruction Pandemonium Key 3 0 100 0 0 1 0 0 1 99999 pk3 key pk3 16 1 2 0 0 0 flpmph invmph 0 xxx 0 0 ques item_key 12 item_key 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
145 | Diablo's Horn Diablo's Horn 0 100 0 0 1 0 0 1 80 dhn fng dhn 16 1 1 0 0 0 flpfang invfang 0 xxx 0 0 ques item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
146 | Baal's Eye Baal's Eye 0 109 0 0 1 0 0 1 80 bey eyz bey 16 1 1 0 0 0 flpeye inveye 0 xxx 0 0 ques item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
147 | Mephisto's Brain Mephisto's Brain 0 100 0 0 1 0 0 1 80 mbr brz mbr 16 1 1 0 0 0 flpbrnz invbrnz 0 xxx 0 0 ques item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
148 | Token of Absolution Token of Absolution 0 100 0 0 999 0 0 1 99999 toa toa toa 16 1 1 0 0 0 flprun invtoa 0 xxx 1 0 ques item_amulet 14 item_book 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
149 | Twisted Essence of Suffering Twisted Essence of Suffering 0 100 0 0 1 0 0 1 10000 tes fng tes 16 1 1 0 0 0 flpgsb invtes 0 xxx 0 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
150 | Charged Essence of Hatred Charged Essence of Hatred 0 100 0 0 1 0 0 1 10000 ceh eyz ceh 16 1 1 0 0 0 flpgsy invceh 0 xxx 0 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
151 | Burning Essence of Terror Burning Essence of Terror 0 100 0 0 1 0 0 1 10000 bet fng bet 16 1 1 0 0 0 flpgsr invbet 0 xxx 0 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
152 | Festering Essence of Destruction Festering Essence of Destruction 0 100 0 0 1 0 0 1 10000 fed brz fed 16 1 1 0 0 0 flpgsg invfed 0 xxx 0 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
153 | Standard Standard 0 100 90 90 4 1 0 1 2000 std flg std 16 1 1 0 0 0 flpflag invflag 0 xxx 0 0 ques item_charm 12 item_charm 1 0 5 0 0 0 0 0 0 0 0 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0
154 |
--------------------------------------------------------------------------------
/data_util.py:
--------------------------------------------------------------------------------
1 | import csv
2 | import random
3 |
4 |
5 | TCDICT = {}
6 | ARMORDICT = {}
7 | WEAPDICT = {}
8 | MISCDICT = {}
9 | ITEMTYPESDICT = {}
10 | MONSTATSDICT = {}
11 | ITEMRATIO = []
12 | UNIQUES = []
13 | SETS = []
14 | MISC_THROW_POTS = {
15 | "gps": {"name": "Rancid Gas Potion", "level": "32"},
16 | "ops": {"name": "Oil Potion", "level": "28"},
17 | "gpm": {"name": "Choking Gas Potion", "level": "20"},
18 | "opm": {"name": "Exploding Potion", "level": "16"},
19 | "gpl": {"name": "Strangling Gas Potion", "level": "8"},
20 | "opl": {"name": "Fulminating Potion", "level": "4"},
21 | }
22 | MONSTATSDICT_EXTRA = {
23 | "countess": {"Level": "11", "Level(N)": "45", "Level(H)": "82"}
24 | }
25 | seed_set = False
26 |
27 |
28 | def load_csv_to_dict(path_in, dict_in, row_key):
29 | with open(path_in, 'r') as csv_file:
30 | csv_reader = csv.DictReader(csv_file, delimiter='\t', quotechar='"', skipinitialspace=True)
31 | for row in csv_reader:
32 | # the key-value contains 'Treasure Class'/row_key redundantly. row = {'Treasure Class': '', 'group': '', ... }
33 | dict_in[row[row_key]] = row
34 |
35 |
36 | # read TCX csv into dictionary
37 | filepath = "data-113d/TreasureClassEx.txt"
38 | load_csv_to_dict(filepath, TCDICT, 'Treasure Class')
39 |
40 | # read armor csv into dictionary
41 | filepath = "data-113d/armor.txt"
42 | load_csv_to_dict(filepath, ARMORDICT, 'name')
43 | # ARMORDICT['Cap/hat']
44 | # {'name': 'Cap/hat',
45 | # ...
46 | # 'rarity': '1',
47 | # ...
48 | # 'level': '1',
49 |
50 | # read weapons csv into dictionary
51 | filepath = "data-113d/weapons.txt"
52 | load_csv_to_dict(filepath, WEAPDICT, 'name')
53 | # WEAPDICT['War Staff']
54 | # {'name': 'War Staff',
55 | # 'code': 'wst',
56 | # 'namestr': 'wst',
57 | # 'rarity': '2',
58 | # 'level': '24'
59 |
60 | # read misc csv into dictionary
61 | filepath = "data-113d/misc.txt"
62 | load_csv_to_dict(filepath, MISCDICT, 'name')
63 | # MISCDICT['Emerald']
64 | # {'name': 'Emerald',
65 | # 'code': 'gsg'
66 |
67 | # read itemtypes csv into dictionary
68 | filepath = "data-113d/ItemTypes.txt"
69 | load_csv_to_dict(filepath, ITEMTYPESDICT, 'Code') # index by 'Code' so I can reference ITEMTYPESDICT['Code']
70 |
71 | # read monstats csv into dictionary
72 | filepath = "data-113d/monstats.txt"
73 | load_csv_to_dict(filepath, MONSTATSDICT, 'Id')
74 |
75 |
76 | def load_csv_to_list(path_in, list_in):
77 | with open(path_in, 'r') as csv_file:
78 | csv_reader = csv.DictReader(csv_file, delimiter='\t', quotechar='"', skipinitialspace=True)
79 | for row in csv_reader:
80 | list_in.append(row)
81 |
82 |
83 | # read itemratio csv rows into list (not dictionary like above)
84 | filepath = "data-113d/itemratio.txt"
85 | load_csv_to_list(filepath, ITEMRATIO)
86 | # are the last 4 rows the only ones needed? Uber and Class specific?
87 |
88 | # read uniqueitems csv rows into list (not dictionary like above)
89 | filepath = "data-113d/UniqueItems.txt"
90 | load_csv_to_list(filepath, UNIQUES)
91 |
92 | # read setitems csv rows into list (not dictionary like above)
93 | filepath = "data-113d/SetItems.txt"
94 | load_csv_to_list(filepath, SETS)
95 |
96 |
97 | def one_roll_from_tc(tc_name_str, players_str):
98 | """
99 | Return a random selection (based on Item Probs) from a row (Treasureclass)
100 | one_roll_from_tc('Andarielq (H)') picks 7 --- Act 2 Equip A 19 Act 2 Good 3
101 | Out[210]: 'Act 2 (H) Equip A'
102 | """
103 | rowdict = TCDICT[tc_name_str]
104 | items, probs = [], []
105 |
106 | try:
107 | players_int = int(players_str)
108 | if players_int < 1:
109 | players_int = 1
110 | elif players_int > 8:
111 | players_int = 8
112 | except:
113 | players_int = 1
114 | # no drop exponent. /players 1 or 2 -> nd_exp 1, 3 or 4 -> nd_exp 2, 5 or 6 -> nd_exp 3, 7 or 8 -> nd_exp 4
115 | nd_exp = int(float(players_int)/2.0 + 0.5)
116 |
117 | for k,v in rowdict.items():
118 | if k.startswith("Item") and v:
119 | # add item to item list and probability to prob list
120 | items.append(v)
121 | probs.append(int(rowdict[f'Prob{len(items)}']))
122 | if rowdict['NoDrop']:
123 | nodrop_orig = int(rowdict['NoDrop'])
124 | sumprobs = sum(probs)
125 | ratio = (nodrop_orig/(nodrop_orig + sumprobs))**nd_exp
126 | nodrop_final = ((ratio)/(1-ratio))*sumprobs
127 | # do the dropcalcs take int() here? this could lead to diff avg drop %s, diff item drop %s. item generation tutorial rounds
128 | items, probs = items + [''], probs + [round(nodrop_final)]
129 |
130 | # choice from a list with weighted probability
131 | outcome = random.choices(items, weights=probs, k=1)[0]
132 |
133 | return outcome
134 |
135 |
136 | def final_rolls_from_tc(tc_name_str, players_str, seed_str):
137 | """
138 | weap18, weap48, armo60, armo6, weap12, amu, armo36 ~~~ drops work!
139 | roll multiple times if TCDICT inner has picks > 1. if TCDICT has picks < 1 assemble a sequence of TCs and do nested rolls
140 | return outcomes list ~ ['weap12', 'weap12', 'weap12', 'armo9', 'armo15', 'weap12'] for 6 drops of 'Durielq - Base'
141 | [{'rolleditemtc': 'armo18', 'rootclass': 'Durielq (N) - Base'}] storing itemname and root TClass
142 | [] for a noDrop outcome
143 | """
144 | global seed_set
145 | # set random seed if not set already. only set once for duration of app
146 | if seed_str and not seed_set:
147 | try:
148 | seedint = int(seed_str)
149 | except:
150 | seedint = 666
151 | random.seed(seedint)
152 | seed_set = True
153 |
154 | qboss = tc_name_str.split('(')[0].rstrip() in ['Andarielq', 'Durielq', 'Mephistoq', 'Diabloq', 'Baalq']
155 |
156 | outcomes = [] # store itemTC and TC class. Needed for keeping the uni/set/rare mf values
157 | rootpicknum = int(TCDICT[tc_name_str]['Picks'])
158 |
159 | if rootpicknum < 0:
160 | # get inner TCs and probNums then roll in order [TC1, TC1, TC2, TC2] and append to outcomes
161 | innertcs, rollnum, rollseq = [], [], []
162 | for k,v in TCDICT[tc_name_str].items():
163 | if k.startswith("Item") and v:
164 | # add item to item list and rollNum to prob list
165 | innertcs.append(v)
166 | rollnum.append(int(TCDICT[tc_name_str][f'Prob{len(innertcs)}']))
167 | # assemble sequence of TCs
168 | for i in range(len(innertcs)):
169 | rollseq += rollnum[i]*[innertcs[i]] # ['Countess Item', 'Countess Rune']
170 | for tc_roll in rollseq[0:abs(rootpicknum)]: # champs always drop 2 pots (Act x Cpot x gives 2), uniques 4 pots (pick=-3)
171 | if len(outcomes) < 6:
172 | outcomes += nested_rolls_in_tc(tc_roll, players_str, qboss, positive_picks=False, neg_root_tc=tc_name_str)
173 | outcomes = outcomes[0:6] # take the first 6, remove any extra drops
174 |
175 | else: # rootpicknum > 0
176 | outcomes = nested_rolls_in_tc(tc_name_str, players_str, qboss, positive_picks=True, neg_root_tc='')
177 |
178 | return outcomes
179 |
180 |
181 | def nested_rolls_in_tc(tc_name_str, players_str, qboss, positive_picks=True, neg_root_tc=''):
182 | """
183 | Nested picking from tc_name_str doing multiple picks (e.g. Duriel --> Duriel Base and Countess --> Countess Item and Rune)
184 | if negative picks are selected. a root_tc is input, e.g. 'Countess'. uni/set/rare qual values are used from this tc
185 | """
186 | # get first inner pick and pick number. (remove 'mul=' if gld is picked)
187 | if positive_picks:
188 | tc_name_str1 = one_roll_from_tc(tc_name_str, players_str).split(',mul=')[0]
189 | else:
190 | tc_name_str1 = tc_name_str # e.g. 'Countess Item'. one_roll_from_tc is not used since it randomly chooses a pick. a sequence of picks is used
191 |
192 | inner_pick_num = 0
193 | outcomes = []
194 | if tc_name_str1:
195 | if tc_name_str1 in TCDICT:
196 | rowdict = TCDICT[tc_name_str1]
197 | inner_pick_num = int(rowdict['Picks']) if rowdict['Picks'] else 1
198 | else:
199 | # 'tsc', 'gld' rolled and it's not a row in the TCDICT
200 | outcomes += [{'rolleditemtc': tc_name_str1, 'rootclass': tc_name_str}] # when not 'Durielq - Base' rolled from Durielq
201 |
202 | for i in range(inner_pick_num):
203 | tc_name_during_pick = tc_name_str1
204 | # keep traversing Treasure classes. limit of 6 items dropped from a monster (detail left out: gold can be a 7th drop for qbosses)
205 | while tc_name_during_pick and tc_name_during_pick in TCDICT and len(outcomes) < 6:
206 | tc_name_during_pick = one_roll_from_tc(tc_name_during_pick, players_str).split(',mul=')[0]
207 |
208 | if tc_name_during_pick and len(outcomes) < 6:
209 | # need monster name in TC for 'Cow'.
210 | # TODO: this logic should be improved if using TC classes for uniques or regular monsters. check if TCDICT has Unique val. Countess/ Council
211 | rootclass = neg_root_tc if neg_root_tc else tc_name_str # for negative pick nums use the input neg_root_tc string
212 | # if tc_name_str is a questboss
213 | if qboss:
214 | rootclass = tc_name_str if TCDICT[tc_name_str]['Unique'] else tc_name_str1 # if Unique qual values are in base TC, use it. else use 1st inner pick (duri - base)
215 |
216 | outcomes += [{'rolleditemtc': tc_name_during_pick, 'rootclass': rootclass}]
217 | # question: are multiple gold drops allowed? I think so, they get added to a 'gold pile' in-game
218 | return outcomes
219 |
220 |
221 | def roll_from_armo_weap_lvl(item_str):
222 | """
223 | armo6 (or weap6) --> all rows from armor.txt (or weapons.txt) with level 4,5,6 (2 levels below and current level)
224 | take into account rarity when picking an item from a list
225 | e.g. 'armo60' contains: Embossed Plate, Mage Plate, Shako, Heater, Wyrmhide Boots, Carnage Helm, Minion Skull
226 | """
227 | type_str = item_str[0:4]
228 | if type_str == "armo":
229 | itemdict = ARMORDICT
230 | else:
231 | itemdict = WEAPDICT
232 | lvl = int(item_str[4:])
233 | items, probs, levels, types = [], [], [], []
234 | # probability -> itemtypes.txt rarity. 3 for axe. 1 for staves, ... use ITEMTYPESDICT
235 | for k,v in itemdict.items():
236 | if v['level'] and (lvl-3 < int(v['level']) <= lvl):
237 | items.append(v['name'])
238 | # account for rarity = '' in data. weapons.txt rarity is for chests. look at itemtypes.txt
239 | try:
240 | rarity = int(ITEMTYPESDICT[v['type']]['Rarity']) # e.g [3, 3, 3, 3, 3, 3, 1, 3, 3, 2, 1] for 'weap09' axe-3, wristblade-2, orb-1
241 | except:
242 | rarity = 3 # default to 3 for normal (non class specific items)
243 | # print('Rarity not found in ITEMTYPEDICT')
244 | probs.append(rarity)
245 | levels.append(v['level'])
246 | types.append(v['type'])
247 |
248 | # choice from a list with weighted probability
249 | outcomeidx = random.choices(list(range(len(items))), weights=probs, k=1)[0]
250 |
251 | return items[outcomeidx], levels[outcomeidx], types[outcomeidx]
252 |
253 |
254 | def name_from_misc(item_str):
255 | out_name = 'Misc'
256 | level = ''
257 | for row in MISCDICT.values():
258 | if row['code'] == item_str:
259 | out_name = row['name'].title()
260 | level = row['level']
261 | # use misc throwing potions (gas, oil small,med,large) name and level from weapons.txt
262 | if out_name == 'Misc':
263 | out_name = MISC_THROW_POTS[item_str]['name']
264 | level = MISC_THROW_POTS[item_str]['level']
265 | return out_name, level
266 |
267 |
268 | def get_mlvl(mon_str):
269 | if mon_str.endswith(" - Base"):
270 | mon_str = mon_str.replace(" - Base", "")
271 | mon_name = mon_str.split(' (')[0].lower()
272 | if mon_name[0:4] == 'baal':
273 | mon_name = 'baalcrab'
274 | elif mon_name[0:3] == 'cow': # account for 'Cow King' if he's added to the tclist
275 | mon_name = 'hellbovine'
276 | elif mon_name[0:7] == 'council':
277 | mon_name = 'councilmember1'
278 |
279 | mon_diffi = ('(' + mon_str.split(' (')[1]) if '(' in mon_str else '' # '', '(N)', '(H)'
280 | mon_name = mon_name[0:-1] if mon_name.endswith('q') else mon_name
281 | if mon_name.lower().startswith('countess'): # account for monsters not in monstats.txt
282 | mlvl = int(MONSTATSDICT_EXTRA['countess']['Level'+mon_diffi])
283 | else:
284 | mlvl = int(MONSTATSDICT[mon_name]['Level'+mon_diffi])
285 |
286 | return mlvl
287 |
288 |
289 | def name_from_armo_weap_misc(item_str, mf_str, mon_str):
290 | """
291 | return an item name given armoX, weapX, or a misc. item string. mon_str ~ 'Andarielq (H)'
292 | """
293 | type_str = item_str[0:4]
294 | mlvl = get_mlvl(mon_str)
295 | if type_str in ['armo', 'weap']:
296 | out_name, level, itemtype = roll_from_armo_weap_lvl(item_str)
297 | # check for quality. unique, set, rare, magic. out_name 'uni~ Balanced Knife'
298 | out_name, success = check_uni_or_set(out_name, level, is_class_specific(itemtype), mlvl, mon_str, mf_str, 'uni')
299 |
300 | if not success:
301 | # print(out_name, 'uni check failed. checking set')
302 | out_name, success = check_uni_or_set(out_name, level, is_class_specific(itemtype), mlvl, mon_str, mf_str, 'set')
303 | # return rare quality
304 | if not success:
305 | out_name, success = check_uni_or_set(out_name, level, is_class_specific(itemtype), mlvl, mon_str, mf_str, 'rar')
306 | # check_rare roll, add magic~ or nonmagic~ (quest bosses and monsters logic will be same, referencing TC uni/set/rare col)
307 | if not success:
308 | out_name, success = check_uni_or_set(out_name, level, is_class_specific(itemtype), mlvl, mon_str, mf_str, 'mag')
309 | if not success:
310 | out_name = 'normal~ ' + out_name
311 |
312 | # else misc
313 | else:
314 | out_name, level = name_from_misc(item_str)
315 | # misc.txt has lvl>0 for ring, amu, charm, rune. do not check uniques of gems, runes, ...
316 | if level and int(level) > 0 and "rune" not in out_name.lower():
317 | out_name, success = check_uni_or_set(out_name, level, False, mlvl, mon_str, mf_str, 'uni')
318 |
319 | if not success:
320 | out_name, success = check_uni_or_set(out_name, level, False, mlvl, mon_str, mf_str, 'set')
321 | # return rare quality
322 | name_lower = out_name.lower()
323 | if not success and ("jewel" in name_lower or "ring" in name_lower or "amulet" in name_lower or "charm" in name_lower):
324 | # check roll for rare, magic
325 | out_name, success = check_uni_or_set(out_name, level, False, mlvl, mon_str, mf_str, 'rar')
326 | if not success:
327 | out_name = 'magic~ ' + out_name # jewel, ring, ammy, charm must be magic if rare roll fails
328 |
329 | return out_name
330 |
331 |
332 | def is_class_specific(type_str):
333 | """
334 | class specific -- non-empty column "class" in ItemTypes.txt
335 | is_class_specific('abow') --> True
336 | """
337 | class_str = ITEMTYPESDICT[type_str]['Class']
338 | return bool(class_str)
339 |
340 |
341 | def check_uni_or_set(name_str, level_str, is_class_spec, mlvl_int, mon_str, mf_str='0', qual_type='uni'):
342 | """
343 | inputs ~ ('Balanced Knife', '13', False -- for 'tkni')
344 | normal vs elite check isn't needed for Andy. uni,set,rare,magic have same values (rows 4 and 5 in itemratio.txt)
345 | """
346 | # if roll_success, no need to check next quality (set, rare)
347 | roll_success = False
348 | # mon lvl looks in monstats.txt. monstats['andariel']['LevelH']. The TC name can be looked up here too
349 | # monlvl = TCDICT['Andarielq (H)']['level']
350 | # ilvl = 75 # monlvl # hard coded for now
351 | qlvl = int(level_str) # level column in armor/weapon.txt. quality lvl of base item
352 | if is_class_spec:
353 | row = ITEMRATIO[4] # 'Unique': '240'
354 | else:
355 | row = ITEMRATIO[2] # 'Unique': '400'
356 |
357 | if qual_type == 'uni':
358 | qual = int(row['Unique'])
359 | qual_divisor = int(row['UniqueDivisor'])
360 | qual_min = int(row['UniqueMin'])
361 | qual_col = TCDICT[mon_str]['Unique']
362 | # MF diminishing returns factor is 250 for unique, 500 for set and 600 for rare
363 | factor = 250
364 | elif qual_type == 'set':
365 | qual = int(row['Set'])
366 | qual_divisor = int(row['SetDivisor'])
367 | qual_min = int(row['SetMin'])
368 | qual_col = TCDICT[mon_str]['Set']
369 | factor = 500
370 | elif qual_type == 'rar':
371 | # quest drop always has success on rare item roll. This matches TCX values of 1024 for Rare, Magic cols
372 | qual = int(row['Rare'])
373 | qual_divisor = int(row['RareDivisor'])
374 | qual_min = int(row['RareMin'])
375 | qual_col = TCDICT[mon_str]['Rare']
376 | factor = 600
377 | else:
378 | qual = int(row['Magic'])
379 | qual_divisor = int(row['MagicDivisor'])
380 | qual_min = int(row['MagicMin'])
381 | qual_col = TCDICT[mon_str]['Magic']
382 |
383 | qual_col = int(qual_col) if qual_col else 0
384 |
385 | # (BaseChance - ((mlvl_int-qlvl)/Divisor)) * 128 https://www.purediablo.com/forums/threads/item-generation-tutorial.110/
386 | # this is not a 'probability', more like a 'chance number'
387 | chance = (qual - ((mlvl_int-qlvl)/qual_divisor)) * 128
388 | # take abs() of mf if the input can be parsed to an int
389 | try:
390 | mf = abs(int(mf_str))
391 | except:
392 | mf = 0
393 | effect_mf = mf*factor/(mf+factor) if qual_type != 'mag' else mf
394 | chance = (chance*100)/(100 + effect_mf)
395 |
396 | if chance < qual_min:
397 | chance = qual_min
398 |
399 | chance = chance - (chance*qual_col/1024)
400 |
401 | if random.randrange(0, max(int(chance),1)) < 128:
402 | roll_success = True
403 | # either unique or failed unique. (and set/ failed set) for quest drops. non quest monsters can have uni, set, rare, magic, normal
404 | ### TODO: charms either gheeds or magic(blue)
405 | out_str = check_if_qlvl_works(name_str, mlvl_int, qual_type)
406 | else:
407 | out_str = name_str
408 |
409 | return out_str, roll_success
410 |
411 |
412 | def check_if_qlvl_works(name_str, ilvl, qual_type='uni'):
413 | """
414 | check for unique/set item's qlvl <= the monster lvl (ilvl)
415 | pick unique with probability according to it's rarity
416 | check_if_qlvl_works('spiderweb sash', 75) --> 'failed uni/set'
417 | NOTE: crystal sword 'Azurewrath' can be output. this function doesn't check the 'enabled' col
418 | NOTE: typo fixed in UniqueItems.txt : Razorswitch --> Jo Stalf -- Jo Staff
419 | typo: Gaunlets(H) --> Gauntlets(H)
420 | CedarBow --> Cedar Bow
421 | Rimeraven --> Raven Claw (and Rogue's Bow, Stormstrike changed)
422 | Tresllised Armor --> Trellised
423 | Doomspittle --> Doomslinger
424 | Kris --> Kriss
425 | Hunter’s Bow --> replace single quote/ apostrophe
426 |
427 | Bracers(M) -- Bracers in uniqueitems (chance guards code 'mgl')
428 | Mindrend --> Skull Splitter
429 | """
430 | possible_items = []
431 | probs = []
432 | quallist = None
433 |
434 | if "charm large" in name_str.lower():
435 | name_str = "charm" # shows up as "Charm" in blue when other charms appear as "Charm large"
436 |
437 | if qual_type == 'uni':
438 | quallist = UNIQUES
439 | namecol = '*type'
440 | prefix = "uni~ "
441 | elif qual_type == 'set':
442 | quallist = SETS
443 | namecol = '*item'
444 | prefix = "set~ "
445 | elif qual_type == 'rar':
446 | prefix = "rare~ "
447 | else:
448 | prefix = "magic~ "
449 |
450 | if quallist:
451 | for row in quallist:
452 | # remove (H), (M), (L) from gauntlets, gloves, belt. Careful with the .split('(') if unique/set items have '(' this fails. I fixed the item names. removed "(" from uni,set
453 | if row[namecol].lower().replace(' ','').replace("'","").replace("’","") == name_str.lower().split('(')[0].replace(' ', '').replace("'","").replace("’",""):
454 | # print(row[namecol], row['lvl'])
455 | if row['lvl'] and int(row['lvl']) > 0 and int(row['lvl']) <= ilvl:
456 | if not 'cow king' in row['index'].lower():
457 | possible_items.append(row['index'])
458 | probs.append(int(row['rarity']))
459 | if possible_items:
460 | outname = prefix + random.choices(possible_items, weights=probs, k=1)[0]
461 | else:
462 | # undo the large charm rename from above
463 | if name_str == 'charm':
464 | name_str = 'Charm Large'
465 | if qual_type in ['uni', 'set']:
466 | outname = 'failed ' + prefix + name_str # this should be rare or magic (for failed sets)
467 | else:
468 | outname = prefix + name_str
469 |
470 | return outname
471 |
--------------------------------------------------------------------------------
/dropsim.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/dropsim.exe
--------------------------------------------------------------------------------
/dropsim.py:
--------------------------------------------------------------------------------
1 |
2 | import logging
3 |
4 | from tkinter import *
5 | from playsound import playsound
6 |
7 | from data_util import final_rolls_from_tc, name_from_armo_weap_misc
8 |
9 | # log drops to file
10 | logging.basicConfig(filename='session.txt', filemode='w', format='%(message)s', level=logging.INFO)
11 |
12 |
13 | DIFFICULTIES = {'Normal': '', 'Nightmare': ' (N)', 'Hell': ' (H)'}
14 | TCNames = ['Andariel', 'Duriel', 'Mephisto', 'Diablo', 'Baal', 'Cow', 'Countess', 'Council'] # can add Pindle, Eldrich
15 | TCPicks = {TCNames[0]: 7,
16 | TCNames[1]: 5,
17 | TCNames[2]: 7,
18 | TCNames[3]: 7,
19 | TCNames[4]: 7, # this data is from TreasureClassEx.txt
20 | TCNames[5]: 1,
21 | TCNames[6]: 1, # Countess. pick 1 for negative pickNum, logic in data_util reads -pickNum and outputs list of outcomes}
22 | TCNames[7]: 3} # Trav council. councilmember2 in monstats.txt
23 | BOSS_IMGS = {TCNames[0]: "./img/andy-d2r-resize.png",
24 | TCNames[1]: "./img/duri-d2r-resize2.png",
25 | TCNames[2]: "./img/meph-d2r-resize2.png",
26 | TCNames[3]: "./img/diab-d2r-resize2.png",
27 | TCNames[4]: "./img/baal-d2r-resize2.png",
28 | TCNames[5]: "./img/cowlvl-d2r-resize2.png",
29 | TCNames[6]: "./img/countess-d2r-resize2.png",
30 | TCNames[7]: "./img/council-d2r-resize2.png"}
31 | # Need an HD baal pic. use Arreat summit image?
32 |
33 | # root window
34 | root = Tk()
35 |
36 | # root window title and dimension (width x height)
37 | root.title("Bossq and Monster Drop Simulator")
38 | root.geometry('640x480')
39 |
40 |
41 | # function to display loot
42 | num_runs = 0
43 | running_once = True
44 | def run_clicked():
45 | global num_runs, runx
46 |
47 | # run x times logic. do not play sound if running >1
48 | try:
49 | xtimes = max(int(runx.get()),1) # if neg. int, xtimes -> 1
50 | running_once = False if xtimes > 1 else True
51 | except:
52 | xtimes, running_once = 1, True
53 |
54 | # boss selected from a dropdown: boss.get(). e.g. 'Andariel', 'Cow', ...
55 | mon_str = boss.get()
56 | if mon_str in TCNames[0:5]:
57 | mon_str += 'q' + DIFFICULTIES[diffi.get()]
58 | else:
59 | mon_str += DIFFICULTIES[diffi.get()]
60 |
61 | players_str = txt.get()
62 | mf_str = txtmf.get()
63 | seed_str = txtseed.get()
64 | lbl3.configure(text = "Loot:")
65 |
66 | for r in range(xtimes):
67 | num_runs += 1
68 | logging.info(f"{num_runs})")
69 | drops = [] # 6 items at most. 7 picks from bosses
70 | # clean all previous drops
71 | for i in range(6):
72 | loot_labels[i].configure(text = '', fg = '#f5f5f5')
73 |
74 | for i in range(TCPicks[boss.get()]): # bosses have pick = 7, cows pick = 1
75 | if len(drops) == 6:
76 | break
77 | # output is [] if NoDrop. else ~ [{'rolleditemtc': 'armo18', 'rootclass': 'Durielq (N) - Base'}...]
78 | loot_items = final_rolls_from_tc(mon_str, players_str, seed_str)
79 | loot_items = [name_from_armo_weap_misc(it['rolleditemtc'], mf_str, it['rootclass']) for it in loot_items] # expanded item names
80 | if loot_items:
81 | for loot_item in loot_items:
82 | if len(drops) < 6:
83 | drops.append(loot_item)
84 |
85 | for i,loot_item in enumerate(drops):
86 | if "uni~" in loot_item:
87 | if "failed uni~" in loot_item:
88 | if 'potion' in loot_item.lower(): #loot_labels
89 | loot_labels[i].configure(text = loot_item.replace('failed uni~ ',''), fg = '#f5f5f5') # default gray
90 | else:
91 | loot_labels[i].configure(text = loot_item.replace('failed uni~ ',''), fg = '#ebe134') # rare/yellow
92 | if "charm" in loot_item.lower():
93 | loot_labels[i].configure(text = loot_item.replace('failed uni~ ',''), fg = '#8f82ff') # undo rare color for charm
94 | else:
95 | loot_labels[i].configure(text = loot_item.replace('uni~ ',''), fg = '#ba8106') # unique
96 | logging.info(f"{loot_item}")
97 |
98 | elif "set~" in loot_item:
99 | if "failed set~" in loot_item:
100 | if 'potion' in loot_item.lower():
101 | loot_labels[i].configure(text = loot_item.replace('failed set~ ',''), fg = '#f5f5f5') # default gray
102 | else:
103 | loot_labels[i].configure(text = loot_item.replace('failed set~ ',''), fg = '#8f82ff') # magic/blue
104 | else:
105 | loot_labels[i].configure(text = loot_item.replace('set~ ',''), fg = '#33d61a') # green
106 | logging.info(f"{loot_item}")
107 |
108 | elif "rare~" in loot_item:
109 | if 'potion' in loot_item.lower():
110 | loot_labels[i].configure(text = loot_item.replace('rare~ ',''), fg = '#f5f5f5') # default gray
111 | else:
112 | loot_labels[i].configure(text = loot_item.replace('rare~ ',''), fg = '#ebe134') # rare/yellow
113 | if "charm" in loot_item.lower():
114 | loot_labels[i].configure(text = loot_item.replace('rare~ ',''), fg = '#8f82ff') # undo rare color for charm
115 | elif "magic~" in loot_item:
116 | if 'potion' in loot_item.lower():
117 | loot_labels[i].configure(text = loot_item.replace('magic~ ',''), fg = '#f5f5f5') # default gray
118 | else:
119 | loot_labels[i].configure(text = loot_item.replace('magic~ ',''), fg = '#8f82ff') # magic/blue
120 | elif "normal~" in loot_item:
121 | loot_labels[i].configure(text = loot_item.replace('normal~ ',''), fg = '#f5f5f5') # default gray
122 |
123 | elif ("essence of" in loot_item.lower() or " rune" in loot_item.lower() or "key of" in loot_item.lower() or "puzzlebox" in loot_item.lower()):
124 | loot_labels[i].configure(text = loot_item, fg = '#eb721c')
125 | logging.info(f"{loot_item}")
126 | else:
127 | # reset color
128 | loot_labels[i].configure(text = loot_item, fg = '#f5f5f5')
129 |
130 | # final str fixes
131 | loot_str = loot_labels[i].cget('text')
132 | loot_str = loot_str.replace("Charm Large", "Grand Charm").replace("Charm Medium", "Large Charm").replace("Charm Small", "Small Charm")
133 | # if "charm" in loot_str.lower(): print("**************************charm", loot_str)
134 | loot_labels[i].configure(text = loot_str)
135 | logging.info(" ")
136 |
137 | # play drop sound
138 | if sound_btn.config('relief')[-1] == 'sunken' and running_once:
139 | playsound('./sound/dropsound.mp3', False)
140 |
141 |
142 | # background image
143 | def draw_bckgrd(boss_str=TCNames[0]):
144 | global bckgrd_image, bckgrd_label
145 | bckgrd_image = PhotoImage(file=BOSS_IMGS[boss_str])
146 | bckgrd_label = Label(root, image=bckgrd_image)
147 | bckgrd_label.place(x=0, y=34, relwidth=1, relheight=1)
148 |
149 | draw_bckgrd()
150 |
151 | # Run button
152 | btn = Button(root, text = "Run x times", width=9, fg = "red", command=run_clicked, font=('Segoe UI', 10))
153 | # set button grid
154 | btn.grid(column=0, row=0)
155 |
156 | # players setting
157 | lbl1 = Label(root, text = "/players", font=('Segoe UI', 10), width=15)
158 | lbl1.grid(column=1, row=0)
159 | # players entry field
160 | txt = Entry(root, width=4, font=('Segoe UI', 10))
161 | txt.insert(0, "1")
162 | txt.grid(column=2, row=0)
163 |
164 | # MF settings and run x field
165 | def draw_mf_runx_settings(mf_str="0", runx_str="1"):
166 | global lbl2, txtmf, runx
167 | lbl2 = Label(root, text = "+Magic Find", font=('Segoe UI', 10), width=15)
168 | lbl2.grid(column=1, row=1)
169 | # entry field
170 | txtmf = Entry(root, width=4, font=('Segoe UI', 10))
171 | txtmf.insert(0, mf_str)
172 | txtmf.grid(column=2, row=1)
173 | # run x times entry field
174 | runx = Entry(root, width=8, font=('Segoe UI', 10))
175 | runx.insert(0, runx_str)
176 | runx.grid(column=0, row=1)
177 |
178 | draw_mf_runx_settings()
179 |
180 | # difficulty settings dropdown
181 | diffi = StringVar(root)
182 | diffi.set(list(DIFFICULTIES.keys())[2]) # default value
183 | w = OptionMenu(root, diffi, *DIFFICULTIES)
184 | w.configure(width=10, font=('Segoe UI', 9))
185 | w.grid(column=3, row=0)
186 |
187 |
188 | def change_bkgrd_and_draw_labels(*args):
189 | prev_mf, prev_runx = txtmf.get(), runx.get()
190 | draw_bckgrd(boss.get())
191 | # redraw MF label. it's cut off once background image is drawn
192 | draw_mf_runx_settings(prev_mf, prev_runx)
193 | # redraw loot labels if boss dropdown callback is used. Had issue where duriel -> duriel click would remove the loot labels from FOV
194 | draw_lootlabels()
195 | # # play sound andy, duri, meph, diablo. The audio beginning is abrupt
196 | # playsound('./sound/andy-fear-me.mp3')
197 |
198 |
199 | # bosses settings dropdown
200 | boss = StringVar(root)
201 | boss.set(TCNames[0])
202 | wboss = OptionMenu(root, boss, *TCNames)
203 | wboss.configure(width=10, font=('Segoe UI', 9))
204 | wboss.grid(column=4, row=0)
205 | # when boss dropdown value is changed draw the background and labels
206 | boss.trace('w', change_bkgrd_and_draw_labels)
207 |
208 |
209 | def draw_lootlabels():
210 | global lbl3, lbl5, lbl6, lbl7, lbl8, lbl9, lbl10, loot_labels
211 |
212 | # instructions label and loot output
213 | lbl3 = Label(root, text = "Ready to Farm? Click 'Run'", width=27, font=('Segoe UI', 10), fg='#f5f5f5', bg='#242020')
214 | lbl3.place(x=340, y=130+23)
215 |
216 | # rows for loot drops. 6 loot rows total
217 | # lbl4 = Label(root, text = "", width=27, font=('Segoe UI', 10), fg='#f5f5f5', bg='#242020')
218 | # lbl4.place(x=340, y=130+23)
219 | lbl5 = Label(root, text = "", width=27, font=('Segoe UI', 10), fg='#f5f5f5', bg='#242020')
220 | lbl5.place(x=340, y=130+23*2)
221 | lbl6 = Label(root, text = "", width=27, font=('Segoe UI', 10), fg='#f5f5f5', bg='#242020')
222 | lbl6.place(x=340, y=130+23*3)
223 | lbl7 = Label(root, text = "", width=27, font=('Segoe UI', 10), fg='#f5f5f5', bg='#242020')
224 | lbl7.place(x=340, y=130+23*4)
225 | lbl8 = Label(root, text = "", width=27, font=('Segoe UI', 10), fg='#f5f5f5', bg='#242020')
226 | lbl8.place(x=340, y=130+23*5)
227 | lbl9 = Label(root, text = "", width=27, font=('Segoe UI', 10), fg='#f5f5f5', bg='#242020')
228 | lbl9.place(x=340, y=130+23*6)
229 | lbl10 = Label(root, text = "", width=27, font=('Segoe UI', 10), fg='#f5f5f5', bg='#242020')
230 | lbl10.place(x=340, y=130+23*7)
231 |
232 | loot_labels = [lbl5, lbl6, lbl7, lbl8, lbl9, lbl10]
233 |
234 | draw_lootlabels()
235 |
236 |
237 | # drop sound toggle button. Used above in run_clicked()
238 | def toggle_sound():
239 | if sound_btn.config('relief')[-1] == 'sunken':
240 | sound_btn.config(relief="raised", fg='black')
241 | sound_btn.config(text="Sound Off")
242 | else:
243 | sound_btn.config(relief="sunken", fg='#4ac936') # green
244 | sound_btn.config(text="Sound On")
245 |
246 | sound_btn = Button(text="Sound Off", width=8, relief="raised", command=toggle_sound)
247 | sound_btn.grid(column=5, row=0)
248 |
249 | # random seed setting
250 | lblseed = Label(root, text = "Seed", font=('Segoe UI', 10), width=7)
251 | lblseed.grid(column=6, row=0)
252 | # seed entry field
253 | txtseed = Entry(root, width=4, font=('Segoe UI', 10))
254 | txtseed.insert(0, "")
255 | txtseed.grid(column=7, row=0)
256 |
257 |
258 | root.mainloop()
259 |
--------------------------------------------------------------------------------
/img/350runs_shako.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/350runs_shako.jpg
--------------------------------------------------------------------------------
/img/andy-d2r-resize.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/andy-d2r-resize.png
--------------------------------------------------------------------------------
/img/andyq_drop_bckgrd.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/andyq_drop_bckgrd.jpg
--------------------------------------------------------------------------------
/img/arreat-d2r-resize2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/arreat-d2r-resize2.png
--------------------------------------------------------------------------------
/img/baal-d2r-resize2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/baal-d2r-resize2.png
--------------------------------------------------------------------------------
/img/council-d2r-orig.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/council-d2r-orig.png
--------------------------------------------------------------------------------
/img/council-d2r-resize2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/council-d2r-resize2.png
--------------------------------------------------------------------------------
/img/countess-d2r-resize2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/countess-d2r-resize2.png
--------------------------------------------------------------------------------
/img/countess_drop_bckgrd.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/countess_drop_bckgrd.jpg
--------------------------------------------------------------------------------
/img/cow_drop_bckgrd.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/cow_drop_bckgrd.jpg
--------------------------------------------------------------------------------
/img/cowlvl-d2r-resize2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/cowlvl-d2r-resize2.png
--------------------------------------------------------------------------------
/img/diab-d2r-resize2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/diab-d2r-resize2.png
--------------------------------------------------------------------------------
/img/diabq_drop_bckgrd.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/diabq_drop_bckgrd.jpg
--------------------------------------------------------------------------------
/img/duri-d2r-resize2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/duri-d2r-resize2.png
--------------------------------------------------------------------------------
/img/meph-d2r-resize2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/img/meph-d2r-resize2.png
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | playsound
--------------------------------------------------------------------------------
/session.txt:
--------------------------------------------------------------------------------
1 | 1)
2 |
3 | 2)
4 | uni~ Dwarf Star
5 |
6 | 3)
7 | set~ Laying of Hands
8 |
9 | 4)
10 |
11 | 5)
12 | set~ Hwanin's Splendor
13 |
14 | 6)
15 |
16 |
--------------------------------------------------------------------------------
/sound/12leveling.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/sound/12leveling.mp3
--------------------------------------------------------------------------------
/sound/1maybevaluable.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/sound/1maybevaluable.mp3
--------------------------------------------------------------------------------
/sound/3uniques.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/sound/3uniques.mp3
--------------------------------------------------------------------------------
/sound/6veryvaluable.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/sound/6veryvaluable.mp3
--------------------------------------------------------------------------------
/sound/7chancing.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/sound/7chancing.mp3
--------------------------------------------------------------------------------
/sound/dropsound.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/sound/dropsound.mp3
--------------------------------------------------------------------------------
/sound/placeholder.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pairofdocs/d2-drop-simulator/83ffe364a3f1bd558c725656e66127ea242fa58a/sound/placeholder.mp3
--------------------------------------------------------------------------------