1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-11-17 18:06:03 -05:00

re-ordered structures to optimize memory layout (#627)

This commit is contained in:
Tim Sarbin 2020-07-26 13:23:46 -04:00 committed by GitHub
parent 63aa1eebe9
commit 53599928f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 139 additions and 139 deletions

View File

@ -10,6 +10,29 @@ import (
// AutoMagicRecord describes rules for automatically generating magic properties when spawning // AutoMagicRecord describes rules for automatically generating magic properties when spawning
// items // items
type AutoMagicRecord struct { type AutoMagicRecord struct {
// IncludeItemCodes
// itype 1 to itype7
// "Include Type" fields. You need to place item codes in any of these columns to allow that item
// to receive mods from this row. See the note below.
IncludeItemCodes [7]string
// ModCode
// They're the Property codes from Properties.txt.
// These determine the actual properties which make up this autoprefix.
// Each autoprefix can include up to three modifiers.
ModCode [3]string
// ExcludeItemCodes
// etype 1 to etype3
// 'Exclude type' . This field prevents certain mods from spawning on specific item codes.
ExcludeItemCodes [3]string
// ModParam, min, max
// Parameter, min, and max values for the property
ModParam [3]int
ModMin [3]int
ModMax [3]int
// Name // Name
// String Comment Blizzard lists the equivalent prefix/affix here. // String Comment Blizzard lists the equivalent prefix/affix here.
// You can use what ever you wish here though. Handy for keeping track of groups. // You can use what ever you wish here though. Handy for keeping track of groups.
@ -23,28 +46,18 @@ type AutoMagicRecord struct {
// as Items with " version" set to 100 will NOT be generated in Classic Diablo II. // as Items with " version" set to 100 will NOT be generated in Classic Diablo II.
Version int Version int
// Spawnable
// It is a boolean type field, and states if this autoprefix can actually spawn in the game.
// You can disable this row by setting it to 0 , or enable it by setting it to 1
Spawnable bool
// SpawnOnRare
// It decides whether this autoprefix spawns on rare quality items or not.
// You can prevent that from happening by setting it to 0 , or you can allow it by setting it to 1
SpawnOnRare bool // rare
// MinSpawnLevel // MinSpawnLevel
// this field accepts numeric values and specifies the minimum level from which this autoprefix // this field accepts numeric values and specifies the minimum level from which this autoprefix
// can spawn. The column in question can be combined with the following maxlevel: to effectively // can spawn. The column in question can be combined with the following maxlevel: to effectively
// control groups of automods, // control groups of automods,
// because you can use this field to combine multiple rows so that the autoprefixes are assigned // because you can use this field to combine multiple rows so that the autoprefixes are assigned
// based on the level of the treasure drop [see below]. // based on the level of the treasure drop [see below].
MinSpawnLevel int // level MinSpawnLevel int
// MaxSpawnLevel // MaxSpawnLevel
// this field accepts numeric values and specifies the maximum level beyond which the automod // this field accepts numeric values and specifies the maximum level beyond which the automod
// stop spawning. // stop spawning.
MaxSpawnLevel int // maxlevel MaxSpawnLevel int
// LevelRequirement // LevelRequirement
// It is the level requirement for this autoprefix. // It is the level requirement for this autoprefix.
@ -60,7 +73,7 @@ type AutoMagicRecord struct {
// This is a polite thing to do, // This is a polite thing to do,
// as other classes gain no advantage from class specific modifiers. // as other classes gain no advantage from class specific modifiers.
// I am uncertain that this actually works. // I am uncertain that this actually works.
ClassLevelRequirement int // classlevelreq ClassLevelRequirement int
// Frequency // Frequency
// For autoprefix groups, it states the chance to spawn this specific group member vs others. // For autoprefix groups, it states the chance to spawn this specific group member vs others.
@ -77,49 +90,36 @@ type AutoMagicRecord struct {
// Weapons.txt or Armor.txt in order for the property to appear. // Weapons.txt or Armor.txt in order for the property to appear.
Group int Group int
// ModCode // PaletteTransform
// They're the Property codes from Properties.txt. // If transform is set to 1 then the item will be colored with the chosen color code,
// These determine the actual properties which make up this autoprefix. // taken from Colors.txt
// Each autoprefix can include up to three modifiers. PaletteTransform int
ModCode [3]string
// ModParam, min, max // CostDivide
// Parameter, min, and max values for the property // Numeric value that acts as divisor for the item price.
ModParam [3]int CostDivide int
ModMin [3]int
ModMax [3]int // CostMultiply
// Numeric value that acts as multiplier for the item price.
CostMultiply int
// CostAdd
// Numeric value that acts as a flat sum added to the item price.
CostAdd int
// Spawnable
// It is a boolean type field, and states if this autoprefix can actually spawn in the game.
// You can disable this row by setting it to 0 , or enable it by setting it to 1
Spawnable bool
// SpawnOnRare
// It decides whether this autoprefix spawns on rare quality items or not.
// You can prevent that from happening by setting it to 0 , or you can allow it by setting it to 1
SpawnOnRare bool
// transform // transform
// It is a boolean value whichallows the colorization of the items. // It is a boolean value whichallows the colorization of the items.
Transform bool Transform bool
// PaletteTransform
// If transform is set to 1 then the item will be colored with the chosen color code,
// taken from Colors.txt
PaletteTransform int // transformcolor
// IncludeItemCodes
// itype 1 to itype7
// "Include Type" fields. You need to place item codes in any of these columns to allow that item
// to receive mods from this row. See the note below.
IncludeItemCodes [7]string
// ExcludeItemCodes
// etype 1 to etype3
// 'Exclude type' . This field prevents certain mods from spawning on specific item codes.
ExcludeItemCodes [3]string
// CostDivide
// Numeric value that acts as divisor for the item price.
CostDivide int // divide
// CostMultiply
// Numeric value that acts as multiplier for the item price.
CostMultiply int // multiply
// CostAdd
// Numeric value that acts as a flat sum added to the item price.
CostAdd int // add
} }
// AutoMagic has all of the AutoMagicRecords, used for generating magic properties for spawned items // AutoMagic has all of the AutoMagicRecords, used for generating magic properties for spawned items

View File

@ -33,24 +33,6 @@ type ItemTypeRecord struct {
Equiv1 string Equiv1 string
Equiv2 string Equiv2 string
// Repair
// Boolean, 1=Merchants can repair this item type, 0=Merchants cannot repair this iType (note,
// this also refers to charges being rechargeable).
Repair bool
// Body
// Boolean, 1=The character can wear this iType,
// 0=This iType can only be carried in the inventory,
// cube or stash (and belt if it is set as “beltable” in the other item related txt files)
Body bool
// BodyLoc1-2
// If you have set the previous column to 1,
// you need to specify the inventory slots in which the item has to be equipped. (
// the codes used by this field are read from BodyLocs.txt)
BodyLoc1 int
BodyLoc2 int
// Shoots // Shoots
// This column specifies which type of quiver (“ammo”) this iType ( // This column specifies which type of quiver (“ammo”) this iType (
// in case it is a weapon) requires in order to shoot ( // in case it is a weapon) requires in order to shoot (
@ -67,6 +49,88 @@ type ItemTypeRecord struct {
// this also uses the ID pointer of course). // this also uses the ID pointer of course).
Quiver string Quiver string
// InvGfx1-6
// This column contains the file names of the inventory graphics that are randomly picked for
// this iType, so if you use columns 1-3, you will set VarInvGfx to 3 (duh).
InvGfx1 string
InvGfx2 string
InvGfx3 string
InvGfx4 string
InvGfx5 string
InvGfx6 string
// StorePage
// The page code for the page a vendor should place this iType in when sold,
// if you enable the magic tab in D2Client.dll,
// you need to use the proper code here to put items in that tab.
// Right now the ones used are weap = weapons1 and 2, armo = armor and misc = miscellaneous.
StorePage string
// BodyLoc1-2
// If you have set the previous column to 1,
// you need to specify the inventory slots in which the item has to be equipped. (
// the codes used by this field are read from BodyLocs.txt)
BodyLoc1 int
BodyLoc2 int
// MaxSock1, MaxSock25, MaxSock40
// Maximum sockets for iLvl 1-25,
// 26-40 and 40+. The range is hardcoded but the location is known,
// so you can alter around the range to your liking. On normal,
// items dropped from monsters are limited to 3, on nightmare to 4 and on hell to 6 sockets,
// irregardless of this columns content.
MaxSock1 int
MaxSock25 int
MaxSock40 int
// TreasureClass
// Can this iType ID Pointer be used as an auto TC in TreasureClassEx.txt. 1=Yes,
// 0=No. *Such as armo3-99 and weap3-99 etc.
TreasureClass int
// Rarity
// Dunno what it does, may have to do with the chance that an armor or weapon rack will pick
// items of this iType. If it works like other rarity fields,
// the chance is rarity / total_rarity * 100.
Rarity int
// StaffMods
// Contains the class code for the character class that should get +skills from this iType (
// such as wands that can spawn with +Necromancer skills). Note,
// this only works if the item is not low quality, set or unique. Note,
// that this uses the vanilla min/max skill IDs for each class as the range for the skill pool,
// so if you add new class skills to the end of the file, you should use automagic.txt instead
StaffMods d2enum.Hero
// CostFormula
// Does the game generate the sell/repair/buy prices of this iType based on its modifiers or does
// it use only the cost specific in the respective item txt files. 2=Organ (
// probably higher price based on unit that dropped the organ), 1=Yes, 0=No.
// Note: Only applies to items that are not unique or set, for those the price is solely controlled
// by the base item file and by the bonus to price given in SetItems and UniqueItems txt files.
// The exact functionality remains unknown, as for example charms, have this disabled.
CostFormula int
// Class
// Contains the class code for the class that should be able to use this iType (
// for class specific items).
Class d2enum.Hero
// VarInvGfx
// This column contains the sum of randomly picked inventory graphics this iType can have.
VarInvGfx int
// Repair
// Boolean, 1=Merchants can repair this item type, 0=Merchants cannot repair this iType (note,
// this also refers to charges being rechargeable).
Repair bool
// Body
// Boolean, 1=The character can wear this iType,
// 0=This iType can only be carried in the inventory,
// cube or stash (and belt if it is set as “beltable” in the other item related txt files)
Body bool
// Throwable // Throwable
// Can this iType be thrown (determines whenever it uses the quantity and throwing damage columns // Can this iType be thrown (determines whenever it uses the quantity and throwing damage columns
// in Weapons.txt for example). // in Weapons.txt for example).
@ -118,70 +182,6 @@ type ItemTypeRecord struct {
// Can this iType be placed in your characters belt slots? 1=Yes, // Can this iType be placed in your characters belt slots? 1=Yes,
// 0=No. (This requires further tweaking in other txt files). // 0=No. (This requires further tweaking in other txt files).
Beltable bool Beltable bool
// MaxSock1, MaxSock25, MaxSock40
// Maximum sockets for iLvl 1-25,
// 26-40 and 40+. The range is hardcoded but the location is known,
// so you can alter around the range to your liking. On normal,
// items dropped from monsters are limited to 3, on nightmare to 4 and on hell to 6 sockets,
// irregardless of this columns content.
MaxSock1 int
MaxSock25 int
MaxSock40 int
// TreasureClass
// Can this iType ID Pointer be used as an auto TC in TreasureClassEx.txt. 1=Yes,
// 0=No. *Such as armo3-99 and weap3-99 etc.
TreasureClass int
// Rarity
// Dunno what it does, may have to do with the chance that an armor or weapon rack will pick
// items of this iType. If it works like other rarity fields,
// the chance is rarity / total_rarity * 100.
Rarity int
// StaffMods
// Contains the class code for the character class that should get +skills from this iType (
// such as wands that can spawn with +Necromancer skills). Note,
// this only works if the item is not low quality, set or unique. Note,
// that this uses the vanilla min/max skill IDs for each class as the range for the skill pool,
// so if you add new class skills to the end of the file, you should use automagic.txt instead
StaffMods d2enum.Hero
// CostFormula
// Does the game generate the sell/repair/buy prices of this iType based on its modifiers or does
// it use only the cost specific in the respective item txt files. 2=Organ (
// probably higher price based on unit that dropped the organ), 1=Yes, 0=No.
// Note: Only applies to items that are not unique or set, for those the price is solely controlled
// by the base item file and by the bonus to price given in SetItems and UniqueItems txt files.
// The exact functionality remains unknown, as for example charms, have this disabled.
CostFormula int
// Class
// Contains the class code for the class that should be able to use this iType (
// for class specific items).
Class d2enum.Hero
// VarInvGfx
// This column contains the sum of randomly picked inventory graphics this iType can have.
VarInvGfx int
// InvGfx1-6
// This column contains the file names of the inventory graphics that are randomly picked for
// this iType, so if you use columns 1-3, you will set VarInvGfx to 3 (duh).
InvGfx1 string
InvGfx2 string
InvGfx3 string
InvGfx4 string
InvGfx5 string
InvGfx6 string
// StorePage
// The page code for the page a vendor should place this iType in when sold,
// if you enable the magic tab in D2Client.dll,
// you need to use the proper code here to put items in that tab.
// Right now the ones used are weap = weapons1 and 2, armo = armor and misc = miscellaneous.
StorePage string
} }
// ItemTypes stores all of the ItemTypeRecords // ItemTypes stores all of the ItemTypeRecords

View File

@ -14,15 +14,15 @@ import (
// TextBox represents a text input box // TextBox represents a text input box
type TextBox struct { type TextBox struct {
text string
x int
y int
visible bool
enabled bool
bgSprite *Sprite
textLabel Label textLabel Label
lineBar Label lineBar Label
text string
filter string filter string
x int
y int
bgSprite *Sprite
visible bool
enabled bool
isFocused bool isFocused bool
} }