Guide to Converting/Simulating 1.09 in 1.10f-1.14

Post here about all aspects of D2 mod making whether it's information, problems or whatever. Please specify whether your post is relating to Classic D2 or the Expansion.

Moderator: Nizari

User avatar
Cypress
Moderator
Champion of the Light
Posts: 448
Joined: Fri Dec 01, 2017 2:08 am

Guide to Converting/Simulating 1.09 in 1.10f-1.14

Post by Cypress » Sun Jul 16, 2023 9:37 pm

Download Link for Merged 1.09 + Overworked Txt Files: {not yet}
Download Link for Modding Conversion Files: {not yet}

This is a guide for porting 1.09 mods to 1.10f. It is described in a kind of awkward tabulated pseudocode. The goal is to keep as much of 1.09 intact during the transfer as possible, while also unlocking all the functionality of 1.10f. This means it should include all features (or lack of) of 1.09, like:

Mana potions are not sold by stores.
You can multibuy rejuv pots and hpots, but not mpots.
No synergies.
Boots and shields do not give strbonus.
Monsters are given flat stats, they do not scale with level.
Minions are the same as their unique; minion1/minion2 are only used for two types of foul crow nests.

Anything which is incomplete or untranslatable is put into curly brackets, {like so}. If you know of any fixes or explanations for these cases, please let me know! And if you notice anything that is in 1.09 but was not translated at all or properly to 1.10+, then be sure to point it out!

CREDITS/THANKS:
Eleriaqueen (directed to Offsets Spreadsheet for 1.09)
Kieran (description of rare/set/unique gambling in 1.09)
oli (description of rare/set/unique gambling in 1.09)
Myhrginoc (description of rare/set/unique gambling in 1.09: viewtopic.php?t=11200)

FUNCTIONS:

Code: Select all

txt	(directory to filename to execute following functions on)
endtxt	(stops modifying txt files activated by the txt function)
inscol	(name of column to insert, column is EMPTY)	(existing column to insert new column after)
inscolblock	(directory of filename to take column names from)	(first column name)	(last column name)	(existing column to insert new column block after, columns are EMPTY)
copypaste	(column to copy from, excluding column name)	(column to copy to, excluding column name)
setcel	(column name)	(row ID)	(value to be put into cell)
setcol	(column name)	(value to be put into all cells of that column, except for the column name)
namecol	(column name)	(new column name)
namecolblock	(directory of filename to take column names from)	(first column name)	(last column name)	(existing column to copy paste column names to)
idname	(column name containing ID cells)	(directory of txt file you want to use to convert IDs to names)	(using previous parameter's defined txt file: column name containing names to convert the IDs to)
copytxt	(directory of txt file to copy)	(directory of created txt file copy)
delcol	(column name of column to delete)
delcolblock	(column name of first column to delete)	(column name of last column to delete)
reprow	(column that gives the number of repeating units to convert into new rows that are inserted after the row minus 1; the respective repeating unit of each new row is placed into the 1st repeating unit's position, regardless of its original position, except for the 1st row which isn't given a new row at all since it already has the 1st row's position)	(first column of 1st repeating unit)	(last column of 1st repeating unit)
bool	(column containing boolean setting; execute the following function on a per row basis if the respective bool cell =1, otherwise the next function is ignored for that row)
usecolblock	(directory of filename to take column contents from, including column names and column contents)	(first column from defined file to take from)	(last column from defined file to take from)	(column to insert entire contents of columns after)
movdelcol	(column to move, then delete the empty column)	(column after which to move column to)
movdelcolblock	(first column to move, then delete the empty columns)	(last column to move, then delete the empty columns)	(column after which to move columns to)
calccol	(column to apply calcs to, excluding column name)	(calc to apply; so putting in *8 here would multiply each cell under column name by 8)
Function Input -> Output Examples:

Code: Select all

[inscol]
col1	col2	col3
row1	A	B
row2	C	D

inscol	colnew	col2

col1	col2	colnew	col3
row1	A		B
row2	C		D

inscol	colnew	col2

col1	col2	colnew	col3
row1	A		B
row2	C		D
[inscol]



[inscolblock]
folder1\txtfile1.txt contains:
col1	col2	col3
row1	A	B
row2	C	D

folder2\txtfile2.txt contains:
col7	col8	col9	col0
row9	M	N	O
row0	P	Q	R

txt	folder1\txtfile1.txt
inscolblock	folder2\txtfile2	col7	col9	col2

folder1\txtfile1.txt contains:					
col1	col2	col7	col8	col9	col3
row1	A				B
row2	C				D
					
folder2\txtfile2.txt contains:					
col7	col8	col9	col0		
row9	M	N	O		
row0	P	Q	R		

[inscolblock]

[copypaste]
col1	col2	col3	col4
row1	A	B	X
row2	C	D	Y

copypaste	col4	col2

col1	col2	col3	col4
row1	X	B	X
row2	Y	D	Y
[copypaste]

[setcel]
col1	col2	col3	col4
row1	A	B	X
row2	C	D	Y
row3	M	N	O

(ID count starts from 0, after the column row)
setcel	col4	0	cleglaw
setcel	col4	2	sigon
setcel	col2	1	hsarus

col1	col2	col3	col4
row1	A	B	cleglaw
row2	hsarus	D	Y
row3	M	N	sigon
[setcel]



[setcol]
col1	col2	col3	col4
row1	A	B	X
row2	C	D	Y
row3	M	N	O

setcol	col2	R

col1	col2	col3	col4
row1	R	B	X
row2	R	D	Y
row3	R	N	O
[setcol]



[namecol]
col1	col2	col3	col4
row1	A	B	X
row2	C	D	Y
row3	M	N	O

namecol	col2	prop1

col1	prop1	col3	col4
row1	A	B	X
row2	C	D	Y
row3	M	N	O
[namecol]



[namecolblock]
folder1\txtfile1.txt contains:
col1	col2	col3	col4	col5
row1	A	B	C	D
row2	E	F	G	H

folder2\txtfile2.txt contains:
zzz	aaa	bbb	ccc	ddd	eee
row1	M	N	O	P	X
row2	Q	R	S	T	Y

txt	folder1\txtfile1.txt
namecolblock	folder2\txtfile2.txt	aaa	ccc	col3

folder1\txtfile1.txt contains:
col1	col2	aaa	bbb	ccc
row1	A	B	C	D
row2	E	F	G	H

folder2\txtfile2.txt contains:
zzz	aaa	bbb	ccc	ddd	eee
row1	M	N	O	P	X
row2	Q	R	S	T	Y
[namecolblock]

[idname]
folder1\txtfile1.txt contains:
col1	col2	col3	col4	col5
row1	A	0	C	D
row2	E	1	G	H
row3	I	3	K	L
row4	M	3	N	O

folder2\txtfile2.txt contains:
zzz	aaa	bbb	ccc	ddd	eee
row1	p	q	r	s
row2	t	u	v	w
row3	x	y	z	1
row4	2	3	4	5

txt	folder1\txtfile1.txt
idname	col3	folder2\txtfile2.txt	eee

folder1\txtfile1.txt contains:
col1	col2	col3	col4	col5
row1	A	s	C	D
row2	E	w	G	H
row3	I	5	K	L
row4	M	5	N	O

folder2\txtfile2.txt contains:
zzz	aaa	bbb	ccc	ddd	eee
row1	p	q	r	s
row2	t	u	v	w
row3	x	y	z	1
row4	2	3	4	5
[idname]



[copytxt]
folder1\txtfile1.txt contains:
col1	col2	col3
row1	A	B
row2	C	D

copytxt	folder1\txtfile1.txt	folder2\txtfile9.txt

folder1\txtfile1.txt contains:
col1	col2	col3
row1	A	B
row2	C	D

folder2\txtfile9.txt contains:
col1	col2	col3
row1	A	B
row2	C	D
[copytxt]



[delcol]
col1	col2	col3	col4
row1	A	B	C
row2	D	E	F
row3	G	H	I
row4	J	K	L

delcol	col2

col1	col3	col4
row1	B	C
row2	E	F
row3	H	I
row4	K	L
[delcol]



[delcolblock]
delcolblock	(column name of first column to delete)	(column name of last column to delete)
col1	col2	col3	col4	col5	col6	col7
row1	A	B	C	X	P	Q
row2	D	E	F	Y	R	S
row3	G	H	I	Z	T	U
row4	J	K	L	O	V	M

delcolblock	col4	col6

col1	col2	col3	col7
row1	A	B	Q
row2	D	E	S
row3	G	H	U
row4	J	K	M
[delcolblock]



[reprow]
col1	num	item1	itemtype1	prop1	par1	min1	max1	item2	itemtype2	prop2	par2	min2	max2	item3	itemtype3	prop3	par3	min3	max3	eol
arctic	3	arctic bow	bow	dmg-cold	50	25	60	arctic armor	tors	all-res		5	10	arctic belt	belt	pois-res		20	20	0
death	2	death sword	swor	ias		10	20	death glove	glov	ias		30	30	death belt	belt	all-res		5	10	0
sigon	3	sigon shield	shie	block		20	20	sigon helm	helm	mana		15	25	sigon glove	glov	ias		5	5	0

reprow	num	item1	max1

col1	num	item1	itemtype1	prop1	par1	min1	max1	item2	itemtype2	prop2	par2	min2	max2	item3	itemtype3	prop3	par3	min3	max3	eol
arctic	3	arctic bow	bow	dmg-cold	50	25	60	arctic armor	tors	all-res		5	10	arctic belt	belt	pois-res		20	20	0
arctic	3	arctic armor	tors	all-res		5	10	arctic armor	tors	all-res		5	10	arctic belt	belt	pois-res		20	20	0
arctic	3	arctic belt	belt	pois-res		20	20	arctic armor	tors	all-res		5	10	arctic belt	belt	pois-res		20	20	0
death	2	death sword	swor	ias		10	20	death glove	glov	ias		30	30	death belt	belt	all-res		5	10	0
death	2	death glove	glov	ias		30	30	death glove	glov	ias		30	30	death belt	belt	all-res		5	10	0
sigon	3	sigon shield	shie	block		20	20	sigon helm	helm	mana		15	25	sigon glove	glov	ias		5	5	0
sigon	3	sigon helm	helm	mana		15	25	sigon helm	helm	mana		15	25	sigon glove	glov	ias		5	5	0
sigon	3	sigon glove	glov	ias		5	5	sigon helm	helm	mana		15	25	sigon glove	glov	ias		5	5	0
[reprow]



[bool]
col1	col2	col3	col4	col5	col6	col7
row1	A	C	sigon	1	P	Q
row2	D	E	cleglaw	0	R	S
row3	G	I	hsarus	1	T	U
row4	J	L	arctic	1	V	M
row5	z	x	death	0	o	p

bool	col5
copypaste	col4	col3

col1	col2	col3	col4	col5	col6	col7
row1	A	sigon	sigon	1	P	Q
row2	D	E	cleglaw	0	R	S
row3	G	hsarus	hsarus	1	T	U
row4	J	arctic	arctic	1	V	M
row5	z	x	death	0	o	p
[bool]



[usecolblock]
folder1\txtfile1.txt contains:
col1	col2	col3	col4	col5
row1	A	B	C	D
row2	E	F	G	H

folder2\txtfile2.txt contains:
zzz	aaa	bbb	ccc	ddd	eee
row1	M	N	O	P	X
row2	Q	R	S	T	Y

txt	folder1\txtfile1.txt
usecolblock	folder2\txtfile2.txt	aaa	ccc	col3

folder1\txtfile1.txt contains:							
col1	col2	col3	aaa	bbb	ccc	col4	col5
row1	A	B	M	N	O	C	D
row2	E	F	Q	R	S	G	H

folder2\txtfile2.txt contains:
zzz	aaa	bbb	ccc	ddd	eee
row1	M	N	O	P	X
row2	Q	R	S	T	Y
[usecolblock]

[movdelcol]
col1	col2	col3	col4
row1	A	B	X
row2	C	D	Y

movdelcol	col3	col1

col1	col3	col2	col4
row1	B	A	X
row2	D	C	Y
[movdelcol]

[movdelcolblock]
col1	col2	col3	col4	col5	col6
row1	A	B	X	M	O
row2	C	D	Y	N	P

movdelcolblock	col4	col6	col2

col1	col2	col4	col5	col6	col3
row1	A	X	M	O	B
row2	C	Y	N	P	D
[movdelcolblock]

[calccol]
col1	col2	col3	col4
row1	3	5	8
row2	6	10	16
row3	9	15	32
row4	12	20	64

calccol	col3	*8

col1	col2	col3	col4
row1	3	40	8
row2	6	80	16
row3	9	120	32
row4	12	160	64
[calccol]



---
---
---

{need pre-processing of 109 files to delete all instances of the annoying, useless Expansion rows. interferes with idname and usecolblock}

Code: Select all

txt	109\armor.txt
inscolname	namestr	code
copypaste	code	namestr
inscol	type2	type
idname	sound	000\wamsounds.txt	109name
inscol	StrBonus	maxdam
inscol	DexBonus	StrBonus
endtxt

Code: Select all

txt	109\cubemain.txt
inscol	op	version
inscol	param	op
inscol	value	param
inscolnameblock	110\cubemain.txt	output b	c mod 5 max	mod 5 max
endtxt

Code: Select all

txt	109\difficultylevels.txt
{109 has ExtraUniqueMonsters 0/1/2. this adds extra uniques only if levels.txt has monumin or monumax greater than 0 for a given level. so in vanilla, blood moor and den of evil wont spawn extrauniquemonsters since they have monumin=0 and monumax=0}
inscol	GambleRare	StaticFieldMin
inscol	GambleSet	GambleRare
inscol	GambleUnique	GambleSet
inscol	GambleUber	GambleUnique
inscol	GambleUltra	GambleUber
setcol	GambleRare	8000
setcol	GambleSet	10
setcol	GambleUnique	1
setcol	GambleUber	90
setcol	GambleUltra	33
endtxt
{i set gambleuber=90 and gambleultra=33, same as 1.10f settings. not sure if this is accurate for 109, but i cant find anything about the hardcoded values of gambleuber and gambleultra for 109, so this will have to do until it is found to be otherwise}

Code: Select all

txt	109\hirelings.txt
inscol	Version	Subtype
setcol	Version	100
endtxt

Code: Select all

txt	110\itemstatcost.txt
copypaste	1.09-Save Bits	Save Bits
copypaste	1.09-Save Add	Save Add
endtxt

Code: Select all

txt	109\itemtypes.txt
inscol	*eol	StorePage
setcol	*eol	0
endtxt

Code: Select all

txt	109\levels.txt
inscol	QuestFlag	Act
inscol	QuestFlagEx	QuestFlag
inscol	SizeX(N)	SizeY
inscol	SizeY(N)	SizeX(N)
inscol	SizeX(H)	SizeY(N)
inscol	SizeY(H)	SizeX(H)
copypaste	SizeX	SizeX(N)
copypaste	SizeX	SizeX(H)
copypaste	SizeY	SizeY(N)
copypaste	SizeY	SizeY(H)
inscol	Teleport	Depend
setcol	Teleport	1
setcel	Teleport	73	2
inscol	MonDen(N)	MonDen
inscol	MonDen(H)	MonDen(N)
copypaste	MonDen	MonDen(N)
copypaste	MonDen	Monden(H)
inscol	MonUMin(N)	MonUMax
inscol	MonUMax(N)	MonUMin(N)
inscol	MonUMin(H)	MonUMax(N)
inscol	MonUMax(H)	MonUMin(H)
{need to set MonU(N) and MonU(H) based on 109 difficultylevels.txt; monumin and monumax also get increased by it}
{need to convert mon IDs to mon names}
namecol	Mtot	NumMon
namecolblock	110\levels.txt	mon1	mon25	m1
{S1...S25 ???

https://d2mods.info/forum/kb/viewarticle?a=232

basically like a lame version of minion i think, only used in 1.09 vanilla for crow nests

how many crows does it spawn? one group of them?
}
namecolblock	110\levels.txt	umon1	umon25	U1
{C1...C5 = cmon1...cmon4; imperfect translation, 109 allows for more critters}
{CA1...CA5 = cpct1...cpt4 ; imperfect translation, 109 allows for more critters}
{CD1...CD5 = camt1...camt4 ; presumably. imperfect translation regardless, since 110's camt is broken according to txt guide}
{need to convert IDs to names, or change names to IDs in monstats}
endtxt

Code: Select all

txt	109\magicsuffix.txt
inscol	etype3	etype4
inscol	etype4	etype5
endtxt

Code: Select all

txt	109\misc.txt
inscol	auto prefix	gamble cost
inscol	namestr	alternategfx
copypaste	code	namestr
idname	sound	000\wamsounds.txt	109name
inscol	questdiffcheck	quest
usecolblock	000\pspell.txt	pSpell	spelldesccalc	spellicon
usecolblock	000\multibuy.txt	multibuy	multibuy	PermStoreItem

Code: Select all

txt	109\missiles.txt
usecolblock	110\missiles.txt	pcltdofunc	*damage param2 desc	Id
inscol	VelLev	MaxVel
usecolblock	110\missiles.txt	animrate	animrate	celfile
usecolblock	110\missiles.txt	xoffset	zoffset	nextdelay
inscolblock	110\missiles.txt	SrcTown	CltSrcTown	Size
inscolblock	110\missiles.txt	Town	Holy	Explosion
inscol	softhit	gethit
idname	Skill	skills.txt	skill
usecolblock	110\missiles.txt	ResultFlags	HitFlags	Skill
usecolblock	110\missiles.txt	ApplyMastery	ApplyMastery	HitShift
inscolblock	110\missiles.txt	Half2HSrc	SrcMissDmg	SrcDamage
inscolblock	110\missiles.txt	MinLevDam1	MinLevDam5	MinDamage
copypaste	LevDam1	MinLevDam1
copypaste	LevDam2	MinLevDam2
copypaste	LevDam3	MinLevDam3
copypaste	LevDam3	MinLevDam4
copypaste	LevDam3	MinLevDam5
inscolblock	110\missiles.txt	MaxLevDam1	DmgSymPerCalc	MaxDamage
copypaste	LevDam1	MaxLevDam1
copypaste	LevDam2	MaxLevDam2
copypaste	LevDam3	MaxLevDam3
copypaste	LevDam3	MaxLevDam4
copypaste	LevDam3	MaxLevDam5
inscolblock	110\missiles.txt	MinELev1	MinELev5	EMin
copypaste	ELev1	MinELev1
copypaste	ELev2	MinELev2
copypaste	ELev3	MinELev3
copypaste	ELev3	MinELev4
copypaste	ELev3	MinELev5
inscolblock	110\missiles.txt	MaxELev1	EDmgSymPerCalc	EMax
copypaste	ELev1	MaxELev1
copypaste	ELev2	MaxELev2
copypaste	ELev3	MaxELev3
copypaste	ELev3	MaxELev4
copypaste	ELev3	MaxELev5
usecolblock	110\missiles.txt	TravelSound	EOL	DamageRate
delcolblock	LevDam1	LevDam3
delcolblock	ELev1	ELev3
calccol	SrcDamage	*8
endtxt

Code: Select all

copytxt 109\monstats.txt	109\monstats2.txt
txt	109\monstats2.txt
{how to fix up class such that it is like 110 id?}
movdelcol	Height	Class
movdelcol	OverlayHeight	Height
movdelcol	PixHeight	OverlayHeight
movdelcol	SizeX	PixHeight
movdelcol	SizeY	SizeX
movdelcol	eSpawnCol	SizeY
movdelcol	MeleeRng	eSpawnCol
movdelcol	BaseW	MeleeRng
movdelcol	HitClass	BaseW
inscolblock	110\monstats2.txt	HDv	S8v	HitClass
{need to fill in HDv S8v columns}
movdelcolblock	HD	TotalPieces	S8v
movdelcolblock	ModeDH	ModeRN	TotalPieces
inscolblock	110\monstats2.txt	dDT	dRN	ModeRN
{need to fill in dDT dRN columns}
movdelcolblock	A1Move	CMove	dRN
movdelcol	CMove	A2Move
movdelcolblock	noGfxHitTest	HitTestHeight	S4Move
movdelcol	Restore	HitTestHeight
movdelcol	AutomapCel	Restore
movdelcol	NoMap	AutomapCel
movdelcol	NoOverlays	NoMap
movdelcolblock	IsSel	NeverSel	NoOverlays
inscol	shiftSel	NeverSel
{does shiftsel need to be filled?}
movdelcol	corpseSel	shiftSel
movdelcol	IsAtt	corpseSel
usecolblock	110\monstats2.txt	revive	revive	IsAtt
movdelcol	IsCritter	revive
movdelcol	eSmall	IsCritter
movdelcol	eLarge	eSmall
movdelcol	Soft	eLarge
movdelcol	Inert	Soft
movdelcol	ObjectCollision	Inert
movdelcol	DeadCollision	ObjectCollision
movdelcol	Shadow	DeadCollision
movdelcol	NoUniqueShift	Shadow
movdelcol	compositeDeath	NoUniqueShift
movdelcol	BloodLocal	compositeDeath
movdelcol	Bleed	BleedLocal
movdelcol	Light	Bleed
movdelcolblock	LightR	LightB	Light
inscolblock	110\monstats2.txt	Utrans	Utrans(H)	LightB
movdelcolblock	Heart	BodyPart	Utrans(H)
inscolblock	110\monstats2.txt	InfernoLen	EOL	BodyPart
{
infernolen fill?
infernoanim fill?
infernorollback fill?
resurrect fill?
resurrectmode fill?
resurrectskill fill?
}
setcol	EOL	0
namecolblock	110\monstats2.txt	Id	EOL	Class
delcolblock	namco	zoo
endtxt

txt	monstats.txt
{}

Code: Select all

txt	109\runes.txt
inscol	eol	T1Max7
setcol	eol	0
endtxt

Code: Select all

copytxt	109\setitems.txt	109\sets.txt
txt	109\sets.txt
delcolblock	NumItems	I6MaxE
namecol	Name	Index
inscol	Name	Index
inscolblock	110\sets.txt	Pcode2b	PMax2b	PMax2a
inscolblock	110\sets.txt	Pcode3b	PMax3b	PMax3a
inscolblock	110\sets.txt	Pcode4b	PMax4b	PMax4a
inscolblock	110\sets.txt	Pcode5b	PMax5b	PMax5a
inscolblock	110\sets.txt	FCode7	*eol	FMax6
setcol	*eol	0
namecolblock	110\sets.txt	index	*eol
endtxt

txt	109\setitems.txt
delcol	version
reprow	NumItems	Item1	I1MaxE
inscol	set	Name
copypaste	Name	set
namecol	Name	index
inscolblock	110\setitems.txt	item	*eol	Name
copypaste	Item1 Suffix	index
copypaste	Item1	item
copypaste	Item1 Rarity	rarity
copypaste	level	lvl
copypaste	lvl req	Item1 Lvlreq
copypaste	cost mult	Item1 cost mult
copypaste	cost add	Item1 cost add
copypaste	add func	Item1 Add
copypaste	prop1	I1Code1
copypaste	par1	I1Param1
copypaste	min1	I1Min1
copypaste	max1	I1Max1
copypaste	prop2	I1Code2
copypaste	par2	I1Param2
copypaste	min2	I1Min2
copypaste	max2	I1Max2
copypaste	aprop1a	I1CodeA
copypaste	apar1a	I1ParamA
copypaste	amin1a	I1MinA
copypaste	amax1a	I1MaxA
copypaste	aprop2a	I1CodeB
copypaste	apar2a	I1ParamB
copypaste	amin2a	I1MinB
copypaste	amax2a	I1MaxB
copypaste	aprop3a	I1CodeC
copypaste	apar3a	I1ParamC
copypaste	amin3a	I1MinC
copypaste	amax3a	I1MaxC
copypaste	aprop4a	I1CodeD
copypaste	apar4a	I1ParamD
copypaste	amin4a	I1MinD
copypaste	amax4a	I1MaxD
copypaste	aprop5a	I1CodeE
copypaste	apar5a	I1ParamE
copypaste	amin5a	I1MinE
copypaste	amax5a	I1MaxE
idname	transformcolor	000\colors.txt	code
bool	transform
copypaste	transformcolor	chrtransform
copypaste	chrtransform	invtransform
delcolblock	Item1	FMax6
endtxt

Code: Select all

copytxt	109\skills.txt	109\skilldesc.txt
txt	109\skilldesc.txt
namecol	skill	skilldesc
movdelcolblock	skillpage	skillcolumn	skilldesc
usecolblock	110\skills.txt	listrow	listpool	skillcolumn
movdelcol	iconcel	listpool
usecolblock	110\skills.txt	str name	eol
delcolblock	id	cost add
endtxt

txt	109\skills.txt
usecolblock	110\skills.txt	skilldesc	immediate	charclass
usecolblock	110\skills.txt	noammo	noammo	attackrank
movdelcol	range	noammo
usecolblock	110\skills.txt	weapsel	etypeb2	range
movdelcol	anim	etypeb2
usecolblock	110\skills.txt	seqtrans	seqtrans	anim
movdelcolblock	monanim	seqnum	seqtrans
usecolblock	110\skills.txt	seqinput	seqinput	seqnum
movdelcol	durability	seqinput
movdelcolblock	useattackrate	lineofsight	durability
movdelcolblock	useattackrate	searchmonsternear	lineofsight
namecol	searchmonsternear	searchenemynear
movdelcol	searchopenxy	searchenemynear
usecolblock	110\skills.txt	selectproc	selectproc	searchopenxy
movdelcol	selectdead	selectproc
namecol	selectdead	targetcorpse
movdelcolblock	targetpet	targetally	targetcorpse
usecolblock	110\skills.txt	targetitem	targetitem	targetally
movdelcol	attacknomana	targetitem
usecolblock	110\skills.txt	tgtplacecheck	tgtplacecheck	attacknomana
movdelcol	itemeffect	tgtplacecheck
usecolblock	110\skills.txt	itemclteffect	skpoints	itemeffect
movdelcol	reqlevel	skpoints
usecolblock	110\skills.txt	maxlvl	maxlvl	reqlevel
movdelcolblock	reqstr	reqskill3	maxlvl
usecolblock	110\skills.txt	restrict	restrict	reqskill3
movdelcolblock	state1	delay	restrict
idname	state1	000\restrict.txt	state
idname	state2	000\restrict.txt	state
idname	state3	000\restrict.txt	state
movdelcol	leftskl	delay
namecol	leftskl	leftskill
usecolblock	110\skills.txt	repeat	minmana	leftskill
movdelcolblock	manashift	intown	minmana
usecolblock	110\skills.txt	aura	aura	intown
movdelcol	periodic	aura
usecolblock	110\skills.txt	perdelay	perdelay	periodic
movdelcolblock	finishing	passive	perdelay
usecolblock	110\skills.txt	progressive	*calc4 desc	passive
movdelcolblock	param1	param6 description	*calc4 desc
usecolblock	110\skills.txt	param7	*param8 description	param6 description
movdelcol	ingame	*param8 description
movdelcolblock	tohit	levtohit	ingame
usecolblock	110\skills.txt	tohitcalc	kick	levtohit
inscolblock	110\skills.txt	MinLevDam1	MinLevDam5	MinDam
copypaste	LevDam1	MinLevDam1
copypaste	LevDam2	MinLevDam2
copypaste	LevDam3	MinLevDam3
copypaste	LevDam3	MinLevDam4
copypaste	LevDam3	MinLevDam5
inscolblock	110\skills.txt	MaxLevDam1	DmgSymPerCalc	MaxDamage
copypaste	LevDam1	MaxLevDam1
copypaste	LevDam2	MaxLevDam2
copypaste	LevDam3	MaxLevDam3
copypaste	LevDam3	MaxLevDam4
copypaste	LevDam3	MaxLevDam5
inscolblock	110\missiles.txt	MinELev1	MinELev5	EMin
copypaste	ELev1	MinELev1
copypaste	ELev2	MinELev2
copypaste	ELev3	MinELev3
copypaste	ELev3	MinELev4
copypaste	ELev3	MinELev5
inscolblock	110\missiles.txt	MaxELev1	EDmgSymPerCalc	EMax
copypaste	ELev1	MaxELev1
copypaste	ELev2	MaxELev2
copypaste	ELev3	MaxELev3
copypaste	ELev3	MaxELev4
copypaste	ELev3	MaxELev5
delcolblock	LevDam1	LevDam3
delcolblock	ELev1	ELev3
movdelcolblock	hitshift	ELevLen3	kick
usecolblock	110\skills.txt	ELenSymPerCalc	aibonus	ELevLen3
movdelcolblock	cost mult	cost add	aibonus
delcolblock	classreq	caster state
calccol	SrcDam	*8
endtxt
{need to add individual skill adjustments to make more like 109}

Code: Select all

txt	109\superuniques.txt
{new 110 column: Name}
{convert class from ID to monstats name}
{new 110 column: Replacable}
{new 110 column: Utrans, Utrans(N), Utrans(H)}
{need to find original 109 colors}
inscol	*eol	TC(H)
setcol	*eol	0

endtxt

Code: Select all

txt	109\treasureclassex.txt
inscol	group	Treasure Class
inscol	level	group
endtxt

Code: Select all

txt	109\uniqueitems.txt
namecol	completed	enabled
namecol	Level	lvl
namecol	LevelReq	lvlreq
inscol	carry1	type
idname	transformcolor	000\colors.txt	code
namecol	invtransform	invtransform109
inscol	chrtransform	cost add
inscol	invtransform	chrtransform
bool	transform
copypaste	transformcolor	chrtransform
bool	invtransform109
copypaste	transformcolor	invtransform
delcolblock	transform	transformcolor
inscol	flippyfile	invtransform
inscol	invfile	flippyfile
inscol	dropsound	invfile
inscol	dropsfxframe	dropsound
inscol	usesound	dropsfxframe
namecolblock	110\uniqueitems.txt	prop1	max12	ItemMod1Code
endtxt

Code: Select all

txt	109\weapons.txt
inscol	type2	type
inscol	namestr	alternategfx
copypaste	code	namestr
idname	sound	000\wamsounds.txt	109name
inscol	questdiffcheck	quest
endtxt
{recheck files for identical names. make sure they are actually the same. eg uniqueitem names are basically all different between 109 and 110}

CANNOT BE CONVERTED:
Uniqueprefix has some weird columns which presumably determine what montypes get what unique names, probably cannot be translated from 109 to 110.
Pierce allows you to change the number of times it can pierce, this is not possible in 110.
Last edited by Cypress on Sun Jul 30, 2023 12:04 am, edited 11 times in total.

oli25
Posts: 84
Joined: Sun Sep 18, 2011 9:38 pm

Re: Guide to Converting/Simulating 1.09 in 1.10f-1.14

Post by oli25 » Wed Jul 19, 2023 1:19 am

Hey Cypress,

One of the things from 1.09 that I have tried to replicate in 1.10 and failed is duriels charge. His aip are hardcoded in 1.09 so I don't know the exact values. But while I was testing different numbers I noticed that his charge is broken in 1.10+. When you run from his charge he will be stuck in a place making him valnurable to ranged attacks.

I like this project, keep up the great work!

User avatar
Cypress
Moderator
Champion of the Light
Posts: 448
Joined: Fri Dec 01, 2017 2:08 am

Re: Guide to Converting/Simulating 1.09 in 1.10f-1.14

Post by Cypress » Tue Jul 25, 2023 1:05 am

Hi oli25, glad to hear you like the idea!

Unfortunately, I doubt that the Duriel charge can be fixed with softcoding. 110's biggest drawback is that it broke nearly every animation in the entire game. If Duriel's monseq is short, then he won't get stuck for a long time, but then his charge distance will be tiny. But if you give a long monseq, he'll get stuck longer in exchange for a longer charge distance. Either way, it won't be accurate to 109.

In 109, it seems like Duriel's animation goes up to a max length, or if the charge ends early, he will only whiff an A2 attack instead of doing every tedious frame in the complete animation. It's like the best of both worlds.

Going on a tangent, I think it could be fun to think of skills that would act kind of like 109 Duriel Charge even if it isn't really the same. Stuff like making it so Duriel can summon a Ghostly Duriel pet that performs 1 charge then dissipates, or making it so the charge is a Ghosty Duriel missile that rapidly accelerates and deals Duriel's weapon damage and knocks back, or even to punish players for closely whiffing the Duriel charge by ending the charge with some radial weapon damage explosion missiles.

oli25
Posts: 84
Joined: Sun Sep 18, 2011 9:38 pm

Re: Guide to Converting/Simulating 1.09 in 1.10f-1.14

Post by oli25 » Wed Jul 26, 2023 12:17 am

Thanks for shedding more light on the subject! I didn't know it was so bad in 1.10+. I love so many pre 1.10 features that are so hard to bring back in 1.10+ that after many iterations I moved back to modding 1.09 which is ofc very limited...

These are some really cool ideas of a new skills for duriel. I really loved how hardcore he was with his charge. In 1.10+ he is really laughable.

Return to “General Mod Making”