# cfg-common --
#
#

###
# Flavors
# --------------------
# Amulets, mushrooms, potions, rings, rods, staffs, and wands each have
# a unique colorful description that is randomized for each character.
# With AngbandTk, it is possible to assign a unique icon to any or all
# of these flavors, and then assign a flavor to an object. You can
# assign anything to a flavor that you can to a monster, object, etc
# (ie, assign a sprite or an icon).
###

# These color names are from object1.c
set ring_col {
GREEN VIOLET L_BLUE L_BLUE L_GREEN
RED WHITE RED SLATE WHITE
GREEN GREEN RED L_DARK L_GREEN
UMBER BLUE GREEN WHITE L_WHITE
L_RED L_WHITE WHITE L_WHITE L_WHITE
L_RED RED BLUE YELLOW YELLOW
L_BLUE L_UMBER WHITE L_UMBER YELLOW
L_DARK L_WHITE GREEN L_BLUE L_DARK
YELLOW L_VIOLET
UMBER L_WHITE WHITE UMBER
BLUE GREEN YELLOW ORANGE
YELLOW ORANGE L_GREEN YELLOW
RED WHITE
}

# These color names are from Adam Bolt's reference page
set adam_col {
WHITE D_SLATE ORANGE RED GREEN
BLUE UMBER DARK SLATE VIOLET
YELLOW L_RED L_GREEN L_BLUE L_UMBER
}

# Assign icons to "ring" flavor
set head [expr 4 * 32]
set i 0
foreach color $ring_col {
	switch $color {
		L_WHITE {set color WHITE}
		L_DARK {set color D_SLATE}
		L_VIOLET {set color VIOLET}
	}		
	set index [lsearch -exact $adam_col $color]
	if {$index != -1} {
		icon flavor ring $i -type adam -index [expr $head + $index]
	} else {
		dbwin "ring '$color' NOT FOUND\n"
	}
	incr i
}

# Assign "ring" flavor to each ring by "sval"
foreach k_idx [angband k_info find -tval TV_RING] {
	angband k_info info $k_idx attrib
	if $attrib(insta_art) continue
	icon assign -to object -toindex $k_idx -flavor ring -index $attrib(sval)
}

set amulet_col {
YELLOW L_UMBER WHITE L_WHITE WHITE
L_DARK WHITE L_UMBER L_UMBER SLATE
GREEN YELLOW L_BLUE L_BLUE L_WHITE
L_UMBER VIOLET
}

set adam_col {
WHITE D_SLATE ORANGE RED GREEN
BLUE UMBER DARK SLATE VIOLET
YELLOW L_RED L_GREEN L_BLUE L_UMBER
}

# Assign icons to "amulet" flavor
set head [expr 7 * 32]
set i 0
foreach color $amulet_col {
	switch $color {
		L_WHITE {set color WHITE}
		L_DARK {set color D_SLATE}
	}
	set index [lsearch -exact $adam_col $color]
	if {$index != -1} {
		icon flavor amulet $i -type adam -index [expr $head + $index]
	} else {
		dbwin "amulet '$color' NOT FOUND\n"
	}
	incr i
}

# Assign "amulet" flavor to each amulet by "sval"
foreach k_idx [angband k_info find -tval TV_AMULET] {
	angband k_info info $k_idx attrib
	if $attrib(insta_art) continue
	icon assign -to object -toindex $k_idx -flavor amulet -index $attrib(sval)
}

set staff_col {
L_UMBER L_UMBER L_UMBER L_UMBER L_UMBER
L_UMBER L_UMBER L_UMBER L_UMBER L_UMBER
L_UMBER L_UMBER UMBER L_UMBER UMBER
L_UMBER L_UMBER L_UMBER L_UMBER RED
RED L_UMBER L_UMBER L_UMBER UMBER
GREEN L_UMBER L_UMBER L_WHITE UMBER
YELLOW SLATE
}

set adam_col {
UMBER D_UMBER RED GREEN YELLOW
SLATE D_SLATE
}

# Assign icons to "staff" flavor
set head [expr 7 * 32 + 16]
set i 0
foreach color $staff_col {
	switch $color {
		L_UMBER {set color UMBER}
		UMBER {set color D_UMBER}
		L_WHITE {set color SLATE}
	}
	set index [lsearch -exact $adam_col $color]
	if {$index != -1} {
		icon flavor staff $i -type adam -index [expr $head + $index]
	} else {
		dbwin "staff '$color' NOT FOUND\n"
	}
	incr i
}

# Assign "staff" flavor to each staff by "sval"
foreach k_idx [angband k_info find -tval TV_STAFF] {
	angband k_info info $k_idx attrib
	icon assign -to object -toindex $k_idx -flavor staff -index $attrib(sval)
}

# Shared by rods and wands
set metal_col {
L_BLUE L_DARK WHITE L_UMBER YELLOW
SLATE L_WHITE L_WHITE L_UMBER RED
L_WHITE L_WHITE L_WHITE WHITE WHITE
L_WHITE L_WHITE L_BLUE L_UMBER YELLOW
L_UMBER L_WHITE L_WHITE L_WHITE L_WHITE
L_BLUE L_BLUE UMBER L_UMBER L_UMBER
WHITE SLATE SLATE WHITE VIOLET
L_RED L_BLUE BLUE RED
}

set adam_col {
WHITE D_SLATE ORANGE RED GREEN
BLUE UMBER DARK SLATE VIOLET
YELLOW L_RED L_GREEN L_BLUE L_UMBER
}

# Assign icons to "wand" flavor
set head [expr 6 * 32 + 16]
set i 0
foreach color $metal_col {
	switch $color {
		L_DARK {set color D_SLATE}
		L_WHITE {set color WHITE}
	}
	set index [lsearch -exact $adam_col $color]
	if {$index != -1} {
		icon flavor wand $i -type adam -index [expr $head + $index]
	} else {
		dbwin "wand '$color' NOT FOUND\n"
	}
	incr i
}

# Assign "wand" flavor to each wand by "sval"
foreach k_idx [angband k_info find -tval TV_WAND] {
	angband k_info info $k_idx attrib
	icon assign -to object -toindex $k_idx -flavor wand -index $attrib(sval)
}

# Assign icons to "rod" flavor
set head [expr 6 * 32]
set i 0
foreach color $metal_col {
	switch $color {
		L_DARK {set color D_SLATE}
		L_WHITE {set color WHITE}
	}
	set index [lsearch -exact $adam_col $color]
	if {$index != -1} {
		icon flavor rod $i -type adam -index [expr $head + $index]
	} else {
		dbwin "rod '$color' NOT FOUND\n"
	}
	incr i
}

# Assign "rod" flavor to each rod by "sval"
foreach k_idx [angband k_info find -tval TV_ROD] {
	angband k_info info $k_idx attrib
	icon assign -to object -toindex $k_idx -flavor rod -index $attrib(sval)
}


set potion_col {
WHITE L_UMBER GREEN 0
L_BLUE BLUE BLUE L_DARK UMBER UMBER
L_WHITE L_GREEN WHITE L_UMBER RED L_BLUE
BLUE GREEN RED YELLOW GREEN
GREEN SLATE SLATE L_WHITE VIOLET
L_BLUE L_GREEN RED BLUE RED
GREEN VIOLET L_WHITE ORANGE ORANGE
L_RED L_RED VIOLET VIOLET VIOLET
RED RED L_WHITE L_DARK ORANGE
VIOLET RED WHITE YELLOW VIOLET
L_RED RED L_RED YELLOW GREEN
MULTI RED YELLOW YELLOW
L_UMBER UMBER L_DARK RED WHITE L_BLUE
}

set adam_col {
WHITE D_SLATE ORANGE RED GREEN
BLUE UMBER DARK SLATE VIOLET
YELLOW L_RED L_GREEN L_BLUE L_UMBER
}

# Assign icons to "potion" flavor
set head [expr 5 * 32]
set i 0
foreach color $potion_col {
	switch $color {
		L_WHITE {set color WHITE}
		MULTI {set color VIOLET}
		L_DARK {set color D_SLATE}
	}
	set index [lsearch -exact $adam_col $color]
	if {$index != -1} {
		icon flavor potion $i -type adam -index [expr $head + $index]
	} else {
		dbwin "potion '$color' NOT FOUND\n"
	}
	incr i
}

# Assign "potion" flavor to each potion by "sval"
foreach k_idx [angband k_info find -tval TV_POTION] {
	angband k_info info $k_idx attrib
	icon assign -to object -toindex $k_idx -flavor potion -index $attrib(sval)
}

set mushroom_col {
BLUE L_DARK L_DARK UMBER BLUE
GREEN RED YELLOW L_WHITE GREEN
SLATE L_BLUE L_GREEN VIOLET RED
SLATE L_UMBER WHITE WHITE UMBER
}

set adam_col {
WHITE D_SLATE ORANGE RED GREEN
BLUE UMBER DARK SLATE VIOLET
YELLOW L_RED L_GREEN L_BLUE L_UMBER
}

# Assign icons to "mushroom" flavor
set head [expr 5 * 32 + 16]
set i 0
foreach color $mushroom_col {
	switch $color {
		L_DARK {set color D_SLATE}
		L_WHITE {set color WHITE}
	}
	set index [lsearch -exact $adam_col $color]
	if {$index != -1} {
		icon flavor mushroom $i -type adam -index [expr $head + $index]
	} else {
		dbwin "mushroom '$color' NOT FOUND\n"
	}
	incr i
}

# Assign "mushroom" flavor to each mushroom by "sval"
foreach k_idx [angband k_info find -tval TV_FOOD] {
	angband k_info info $k_idx attrib
	if {$attrib(sval) >= 32} continue
	icon assign -to object -toindex $k_idx -flavor mushroom -index $attrib(sval)
}

# Hack -- Some monsters are never seen
# These "none 0" assignments are never overridden
foreach r_idx [angband r_info find -flag CHAR_CLEAR -flag ATTR_CLEAR] {
	icon assign -to monster -toindex $r_idx -type none -index 0
}

# Assign pile icon to "object 0"
icon assign -to object -toindex 0 -type adam -index 111

proc AutoAssignCharacterIcon {} {

	set class [list Warrior Mage Priest Rogue Ranger Paladin Warrior-Mage \
		Chaos-Warrior Monk Mindcrafter High-Mage]
	set head [lsearch -exact $class [angband player class]]
	if {$head == -1} {error "can't find player class"}
	set head [expr ($head + 18) * 32]
	set race [list Human Half-Elf Elf Hobbit Gnome Dwarf Half-Orc Half-Troll \
		Dunadan High-Elf Amberite Barbarian Half-Ogre Half-Giant Half-Titan \
		Cyclops Yeek Klackon Kobold Nibelung "Dark Elf" Draconian Mindflayer \
		Imp Golem Skeleton Zombie Vampire Spectre Sprite Beastman]
	set tail [lsearch -exact $race [angband player race]]
	if {$tail == -1} {error "can't find player race"}
	icon assign -to character -toindex 0 -type adam -index [expr $head + $tail]

	# Set the flag to indicate the icon was auto-assigned
	Global autoAssign 1
}

# Now assign a character icon based on race and class. This assignment
# may get overridden by a later assignment.
AutoAssignCharacterIcon

# Silly "debug" command
proc VerifyCharacterIcons {} {

	[Global misc,canvas] configure -bg gray40

	set indexClass 0
	foreach class [list Warrior Mage Priest Rogue Ranger Paladin Warrior-Mage \
		Chaos-Warrior Monk Mindcrafter High-Mage] {
		set head [expr ($indexClass + 18) * 32]

		set indexRace 0
		foreach race [list Human Half-Elf Elf Hobbit Gnome Dwarf Half-Orc Half-Troll \
			Dunadan High-Elf Amberite Barbarian Half-Ogre Half-Giant Half-Titan \
			Cyclops Yeek Klackon Kobold Nibelung "Dark Elf" Draconian Mindflayer \
			Imp Golem Skeleton Zombie Vampire Spectre Sprite Beastman] {

			icon assign -to character -toindex 0 \
				-type adam -index [expr $head + $indexRace]
			[Global misc,canvas] itemconfigure class -text $class
			[Global misc,canvas] itemconfigure race -text $race
			update
			after 150
			incr indexRace
		}
		incr indexClass
	}

	[Global misc,canvas] configure -bg Black
}
