# Module: MONSTFunctions
# Tcl version: 7.3 (Tcl/Tk/XF)
# Tk version: 3.6
# XF version: $__lastrelease$
#

# module contents
global moduleList
global autoLoadList
set moduleList(MONSTFunctions) { UpdateMonster ResetMonsterForm}
set autoLoadList(MONSTFunctions) {1}

# procedures to show toplevel windows


# User defined procedures


# Procedure: UpdateMonster
proc UpdateMonster {} {
  global CurrentMonster
  if {$CurrentMonster(handle) != {}} {
    global MonsterHitType
    $CurrentMonster(handle) alignment [[SN MonsterAlignment] get]
    $CurrentMonster(handle) armorclass [[SN MonsterArmorClass] get]
    set temp [[SN MonsterDamPerAttack] get]
    if {[scan $temp "%d-%d" l h] == 2} {
      $CurrentMonster(handle) damageperattack $l $h
    } else {
      $CurrentMonster(handle) damageperattack $temp
    }
    $CurrentMonster(handle) frequency [[SN MonsterFrequency] get]
    case $MonsterHitType in {
      {HitDice} {
	$CurrentMonster(handle) hittype Dice
	$CurrentMonster(handle) numhitdie [[SN MonsterHitDiceND] get]
	$CurrentMonster(handle) hitdie [[SN MonsterHitDiceNS] get]
      }
      {HitPoints} {
	$CurrentMonster(handle) hittype Points
	$CurrentMonster(handle) hitpoints [[SN MonsterHitPoints] get]
      }
    }
    $CurrentMonster(handle) intelligence [[SN MonsterIntelligence] get]
    $CurrentMonster(handle) magicresistance [[SN MonsterMagicResistance] get]
    set move [[SN MonsterMove] get]
    if {[scan $move {%d"/%d"} m f] == 2} {
      $CurrentMonster(handle) move $m
      $CurrentMonster(handle) fly $f
    } elseif {[scan $move {%d"//%d"} m s] == 2} {
      $CurrentMonster(handle) move $m
      $CurrentMonster(handle) swim $s
    } elseif {[scan $move {"%d"(%d")} m b] == 2} {
      $CurrentMonster(handle) move $m
      $CurrentMonster(handle) burrow $b
    } elseif {[scan $move {%d"*%d"} m w] == 2} {
      $CurrentMonster(handle) move $m
      $CurrentMonster(handle) web  $w
    } elseif {[scan $move {%d"} m] == 1} {
      $CurrentMonster(handle) move $m
    }
    $CurrentMonster(handle) name [[SN MonsterName] get]
    set temp [[SN MonsterNoAppearing] get]
    if {[scan $temp "%d-%d" l h] == 2} {
      $CurrentMonster(handle) numappearing $l $h
    } else {
      $CurrentMonster(handle) numappearing $temp
    }
    $CurrentMonster(handle) numattacks [[SN MonsterNoAttacks] get]
    $CurrentMonster(handle) percentlair [[SN MonsterPercentInLair] get]
    $CurrentMonster(handle) psionics [[SN MonsterPsionicAbility] get]
    scan [[SN MonsterSize] get] "%f'" size
    $CurrentMonster(handle) size $size
    $CurrentMonster(handle) specialattacks [[SN MonsterSpecialAttacks] get]
    $CurrentMonster(handle) specialdefences [[SN MonsterSpecialDefences] get]
    $CurrentMonster(handle) treasuretype [[SN MonsterTreasureType] get]
    $CurrentMonster(handle) comments [[SN MonsterComments] get 1.0 end]
    set CurrentMonster(isdirty) 1
  }
}


# Procedure: ResetMonsterForm
proc ResetMonsterForm {} {
  global CurrentMonster
  global MonsterHitType
  [SN MonsterAlignment] delete 0 end
  [SN MonsterArmorClass] delete 0 end
  [SN MonsterDamPerAttack] delete 0 end
  [SN MonsterFrequency] delete 0 end
  [SN MonsterHitDiceND] delete 0 end
  [SN MonsterHitDiceNS] delete 0 end
  [SN MonsterHitPoints] delete 0 end
  [SN MonsterIntelligence] delete 0 end
  [SN MonsterMagicResistance] delete 0 end
  [SN MonsterMove] delete 0 end
  [SN MonsterName] delete 0 end
  [SN MonsterNoAppearing] delete 0 end
  [SN MonsterNoAttacks] delete 0 end
  [SN MonsterPercentInLair] delete 0 end
  [SN MonsterPsionicAbility] delete 0 end
  [SN MonsterSize] delete 0 end
  [SN MonsterSpecialAttacks] delete 0 end
  [SN MonsterSpecialDefences] delete 0 end
  [SN MonsterTreasureType] delete 0 end
  [SN MonsterComments] delete 1.0 end
  set {MonsterHitType} {HitDice}
  [SN MonsterHitDiceR] select
  if {$CurrentMonster(handle) != {}} {
    [SN MonsterAlignment] insert end [$CurrentMonster(handle) alignment]
    [SN MonsterArmorClass] insert end [$CurrentMonster(handle) armorclass]
    set temp [$CurrentMonster(handle) damageperattack]
    if {[lindex $temp 0] == [lindex $temp 1]} {
      [SN MonsterDamPerAttack] insert end [lindex $temp 0]
    } else {
      [SN MonsterDamPerAttack] insert end [format "%d-%d" [lindex $temp 0] [lindex $temp 1]]
    }
    [SN MonsterFrequency] insert end [$CurrentMonster(handle) frequency]
    [SN MonsterHitDiceND] insert end [$CurrentMonster(handle) numhitdie]
    [SN MonsterHitDiceNS] insert end [$CurrentMonster(handle) hitdie]
    [SN MonsterHitPoints] insert end [$CurrentMonster(handle) hitpoints]
    [SN MonsterIntelligence] insert end [$CurrentMonster(handle) intelligence] 
    [SN MonsterMagicResistance] insert end [$CurrentMonster(handle) magicresistance]
    [SN MonsterMove] insert end "[$CurrentMonster(handle) move]\""
    set fly [$CurrentMonster(handle) fly]
    if {$fly != 0} {[SN MonsterMove] insert end "/$fly\""}
    set swim [$CurrentMonster(handle) swim]
    if {$swim != 0} {[SN MonsterMove] insert end "//$swim\""}
    set burrow [$CurrentMonster(handle) burrow]
    if {$burrow != 0} {[SN MonsterMove] insert end "($burrow\")"}
    set web [$CurrentMonster(handle) web]
    if {$web != 0} {[SN MonsterMove] insert end "*$web\""}
    [SN MonsterName] insert end [$CurrentMonster(handle) name]
    set temp [$CurrentMonster(handle) numappearing]
    if {[lindex $temp 0] == [lindex $temp 1]} {
      [SN MonsterNoAppearing] insert end [lindex $temp 0]
    } else {
      [SN MonsterNoAppearing] insert end [format "%d-%d" [lindex $temp 0] [lindex $temp 1]]
    }
    [SN MonsterNoAttacks] insert end [$CurrentMonster(handle) numattacks]
    [SN MonsterPercentInLair] insert end [$CurrentMonster(handle) percentlair]
    [SN MonsterPsionicAbility] insert end [$CurrentMonster(handle) psionics]
    [SN MonsterSize] insert end "[$CurrentMonster(handle) size]'"
    [SN MonsterSpecialAttacks] insert end [$CurrentMonster(handle) specialattacks]
    [SN MonsterSpecialDefences] insert end [$CurrentMonster(handle) specialdefences]
    [SN MonsterTreasureType] insert end [$CurrentMonster(handle) treasuretype]
    [SN MonsterComments] insert end [$CurrentMonster(handle) comments]
    case [$CurrentMonster(handle) hittype] in {
      {Dice} {
      	set {MonsterHitType} {HitDice}
	[SN MonsterHitDiceR] select
      }
      {Points} {
	set {MonsterHitType} {HitPoints}
	[SN MonsterHitPointsR] select
      }
      {} {
	set {MonsterHitType} {HitDice}
	[SN MonsterHitDiceR] select
      }
    }
  } else {
    [SN MonsterHitDiceND] insert end {1}
    [SN MonsterHitDiceNS] insert end {8}
  }
}


# Internal procedures

# eof
#

