Spoiler: R Code
Show
#Skill Roll
#d20roll
p.d6 <- rep(1/6,6)
d6 <- 1:6
dieroll<-function(x,n){
sample(d6, size=1, prob=p.d6, replace=T)
}
mean(result)
sd(result)
###
#Try to make a die-roll function
dieroll<-function(x,n){
p.die <- rep(1/x,x)
die <- 1:x
return(sample(die, size=n, prob=p.die, replace=T))
}
###Modified d20
d20<-function(x=0){
return(dieroll(20,1)+x)
}
###d12, d10, d8, d6, d4, d2
d12<-function(x=0){
return(dieroll(12,1)+x)
}
d10<-function(x=0){
return(dieroll(10,1)+x)
}
d8<-function(x=0){
return(dieroll(8,1)+x)
}
d6<-function(x=0){
return(dieroll(6,1)+x)
}
d4<-function(x=0){
return(dieroll(4,1)+x)
}
###
simatks<-function(Atk_bonus, AC, Max_HP){
hitdmg<-function(X){
return(d8(0))
}
critdmg<-function(x){
return(d8(0)+d8(0))
}
crit_counter=0
hit_counter=0
miss_counter=0
atk_counter=0
dmgcnt=0
HP = Max_HP
while(HP>0){
Atk_roll= d20(Atk_bonus)
hitdmg1=hitdmg(0)
critdmg1=critdmg(0)
Hitstring="Error"
if (Atk_roll-Atk_bonus==20){
HP = HP - critdmg1
dmgcnt = dmgcnt + critdmg1
crit_counter=crit_counter+1
atk_counter=atk_counter+1
Hitstring="Crit"
}
else if (Atk_roll >= AC){
HP = HP - hitdmg1
hit_counter=hit_counter+1
atk_counter=atk_counter+1
dmgcnt = dmgcnt + hitdmg1
Hitstring="Hit"
}
else if (Atk_roll < AC){
miss_counter=miss_counter+1
atk_counter=atk_counter+1
Hitstring="Missed"
}
#print(cat("attack #",atk_counter, Hitstring, "and", HP, " hit points remain||"))
}
return(atk_counter)
}
countatks=mapply(simatks, rep(0,1000), MoreArgs=list(AC=10, Max_HP=20))
counttable<-table(countatks)
atkprobtable=data.frame(counttable/sum(counttable))
names(atkprobtable)=c("Atks", "Prob")
atkprobtable=mapply(as.double,atkprobtable)
plot(atkprobtable, type="b")