Current state

This commit is contained in:
mez 2024-03-29 11:04:29 +00:00
commit 0508cb4d83
6 changed files with 2005 additions and 0 deletions

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
auto/*
daisho.epub
daisho.html
daisho.pdf

343
battle.py Normal file
View file

@ -0,0 +1,343 @@
import math, random
deduct = 0
# attacker stats
attack = 10 # this can range from 0 to 255
magic = 255 # likewise
dmcon = 0 # set according to command
movetype = 0 # likewise
element = 0
command = "cure"
attackcheer = 0
attackfocus = 0
strengthplus = 0
magicplus = 0
piercing = False
powerbreak = False
celestial = False
name = "tidus"
hp = 9999
maxhp = 9999
bdl = True
mp = 999
maxmp = 999
magicbooster = False
accuracy = 3
skillaccuracy = 98
attackertype = "person"
attackluck = 3
# defender stats
defence = 34
magicdefence = 1
armour = False
armourbreak = False
mentalbreak = False
defend = False
protect = False
shell = False
defenceplus = 0
mdefenceplus = 0
defencecheer = 0
defencefocus = 5
evasion = 3
defendertype = "monster"
defenceluck = 3
fireeffect = "normal"
lightningeffect = "half"
watereffect = "vuln"
iceeffect = "absorb"
holyeffect = "normal"
defenderhp = 20000
# damage constant
if command == "attack":
dmcon = 16
movetype = "physical"
elif command == "cure":
dmcon = 24
movetype = "heal"
elif command == "cura":
dmcon = 40
movetype = "heal"
elif command == "curaga":
dmcon = 80
movetype = "heal"
elif command == "blizzard":
dmcon = 12
movetype = "magic"
element = "ice"
elif command == "thunder":
dmcon = 12
movetype = "magic"
element = "lightning"
elif command == "water":
dmcon = 12
movetype = "magic"
element = "water"
elif command == "fire":
dmcon = 12
movetype = "magic"
element = "fire"
elif command == "fira":
dmcon = 24
movetype = "magic"
element = "fire"
elif command == "blizzara":
dmcon = 24
movetype = "magic"
element = "ice"
elif command == "thundara":
dmcon = 24
movetype = "magic"
element = "lightning"
elif command == "watera":
dmcon = 24
movetype = "magic"
element = "water"
elif command == "firaga":
dmcon = 42
movetype = "magic"
element = "fire"
elif command == "blizzaga":
dmcon = 42
movetype = "magic"
element = "ice"
elif command == "waterga":
dmcon = 42
movetype = "magic"
element = "water"
elif command == "thundaga":
dmcon = 42
movetype = "magic"
element = "lightning"
elif command == "drain":
dmcon = 20
movetype = "physical" # presumably?
elif command == "osmose":
dmcon = 10
movetype = "magic"
elif command == "flare":
dmcon = 60
movetype = "magic"
elif command == "ultima":
dmcon = 70
movetype = "magic"
elif command == "holy":
dmcon = 100
movetype = "magic"
element = "holy"
# calculate damage
basedamage = math.floor((math.floor(((attack + attackcheer) ** 3) / 32) + 32) * math.floor(dmcon / 16))
if basedamage > 99999:
basedamage = 99999
defnum = math.floor(math.floor(((math.ceil(defence - 280.4)) ** 2) / 110) + 16)
damage = math.floor(basedamage * defnum / 730)
# now do modifiers
if strengthplus > 0:
damage = damage + (math.floor(damage * strengthplus / 100))
if armour == True:
if armourbreak == False and piercing == False:
damage = math.floor(damage / 3)
if armourbreak == True:
defence = 0
if defend == True:
damage = math.floor(damage / 2)
if protect == True:
damage = math.floor(damage / 2)
if powerbreak == True:
damage = math.floor(damage / 2)
if defenceplus > 0:
damage = damage - (math.floor(damage * defenceplus / 100))
if defencecheer > 0:
damage = math.ceil(damage * (15 - defencecheer) / 15)
if celestial == True:
defence = 0
if name == "tidus" or name == "wakka" or name == "kimahri" or name == "rikku":
damage = math.floor(damage * ((10 + (100 * hp / maxhp)) / 110))
elif name == "yuna" or name == "lulu":
damage = math.floor(damage * ((10 + (100 * mp / maxmp)) / 110))
elif name == "auron":
damage = math.floor(damage * ((130 - (100 * hp / maxhp)) / 60))
# now apply the defence stat i guess?
finaldamage = math.floor(damage * (730 - math.floor(((defence * 51) - math.floor((defence ** 2) / 11)) / 10)) / 730)
if element == "fire" and fireeffect == "half":
finaldamage = math.floor(finaldamage / 2)
elif element == "fire" and fireeffect == "vuln":
finaldamage = finaldamage + math.floor(finaldamage / 2)
elif element == "fire" and fireeffect == "absorb":
finaldamage = finaldamage * -1
if element == "water" and watereffect == "half":
finaldamage = math.floor(finaldamage / 2)
elif element == "water" and watereffect == "vuln":
finaldamage = finaldamage + math.floor(finaldamage / 2)
elif element == "water" and watereffect == "absorb":
finaldamage = finaldamage * -1
if element == "lightning" and lightningeffect == "half":
finaldamage = math.floor(finaldamage / 2)
elif element == "lightning" and lightningeffect == "vuln":
finaldamage = finaldamage + math.floor(finaldamage / 2)
elif element == "lightning" and lightningeffect == "absorb":
finaldamage = finaldamage * -1
if element == "ice" and iceeffect == "half":
finaldamage = math.floor(finaldamage / 2)
elif element == "ice" and iceeffect == "vuln":
finaldamage = finaldamage + math.floor(finaldamage / 2)
elif element == "ice" and iceeffect == "absorb":
finaldamage = finaldamage * -1
if element == "holy" and holyeffect == "half":
finaldamage = math.floor(finaldamage / 2)
elif element == "holy" and holyeffect == "vuln":
finaldamage = finaldamage + math.floor(finaldamage / 2)
elif element == "holy" and holyeffect == "absorb":
finaldamage = finaldamage * -1
if finaldamage > 99999:
finaldamage = 99999
if bdl == False and finaldamage > 9999:
finaldamage = 9999
if finaldamage < -99999:
finaldamage = -99999
if bdl == False and finaldamage < -9999:
finaldamage = -9999
if movetype == "physical":
print("Physical damage: " + str(finaldamage))
deduct = finaldamage
# magic damage and healing
if movetype == "heal":
magicbasedamage = dmcon * math.floor((magic + attackfocus + dmcon) / 2)
else:
magicbasedamage = math.floor(dmcon * (math.floor(((magic + attackfocus) ** 2) / 6) + dmcon) / 4)
if magicbasedamage > 99999:
magicbasedamage = 99999
mdefnum = math.floor(math.floor((((magicdefence - 280.4)) ** 2) / 110) + 16)
magicdamage = math.floor(magicbasedamage * mdefnum / 730)
# magic modifiers
if magicbooster == True:
magicdamage = magicdamage + math.floor(magicdamage / 2)
if magicplus > 0:
magicdamage = magicdamage + (math.floor(magicdamage * magicplus / 100))
if mentalbreak == True:
magicdamage = math.floor(magicdamage / 2)
magicdefence = 0
if shell == True:
magicdamage = math.floor(magicdamage / 2)
if mdefenceplus > 0:
magicdamage = magicdamage - (math.floor(magicdamage * mdefenceplus / 100))
if defencefocus > 0:
magicdamage = math.ceil(magicdamage * (15 - defencefocus) / 15)
# magic defence
if movetype == "heal": # i assume this isn't affected by mdef
print("HP healed: " + str(magicdamage))
deduct = -1 * magicdamage
else:
finalmdamage = math.floor(magicdamage * (730 - math.floor(((magicdefence * 51) - math.floor((magicdefence ** 2) / 11)) / 10)) / 730)
if element == "fire" and fireeffect == "half":
finalmdamage = math.floor(finalmdamage / 2)
elif element == "fire" and fireeffect == "vuln":
finalmdamage = finalmdamage + math.floor(finalmdamage / 2)
elif element == "fire" and fireeffect == "absorb":
finalmdamage = finalmdamage * -1
if element == "water" and watereffect == "half":
finalmdamage = math.floor(finalmdamage / 2)
elif element == "water" and watereffect == "vuln":
finalmdamage = finalmdamage + math.floor(finalmdamage / 2)
elif element == "water" and watereffect == "absorb":
finalmdamage = finalmdamage * -1
if element == "lightning" and lightningeffect == "half":
finalmdamage = math.floor(finalmdamage / 2)
elif element == "lightning" and lightningeffect == "vuln":
finalmdamage = finalmdamage + math.floor(finalmdamage / 2)
elif element == "lightning" and lightningeffect == "absorb":
finalmdamage = finalmdamage * -1
if element == "ice" and iceeffect == "half":
finalmdamage = math.floor(finalmdamage / 2)
elif element == "ice" and iceeffect == "vuln":
finalmdamage = finalmdamage + math.floor(finalmdamage / 2)
elif element == "ice" and iceeffect == "absorb":
finalmdamage = finalmdamage * -1
if element == "holy" and holyeffect == "half":
finalmdamage = math.floor(finalmdamage / 2)
elif element == "holy" and holyeffect == "vuln":
finalmdamage = finalmdamage + math.floor(finalmdamage / 2)
elif element == "holy" and holyeffect == "absorb":
finalmdamage = finalmdamage * -1
if finalmdamage > 99999:
finalmdamage = 99999
if bdl == False and finalmdamage > 9999:
finalmdamage = 9999
if finalmdamage < -99999:
finalmdamage = -99999
if bdl == False and finalmdamage < -9999:
finalmdamage = -9999
if movetype == "magic":
print("Magic damage: " + str(finalmdamage))
deduct = finalmdamage
if attackertype == "person":
acnum = accuracy * 0.4 - evasion + 9
if acnum <= 0:
accent = 25
elif acnum < 2.5: # depends on when these are rounded?
accent = 30
elif acnum < 4.5:
accent = 40
elif acnum < 5.5:
accent = 50
elif acnum < 6.5:
accent = 60
elif acnum < 7.5:
accent = 80
else:
accent = 100
elif attackertype == "monster":
accent = skillaccuracy - evasion
hit = accent + attackluck - defenceluck
prohibit = random.randint(0,100)
if movetype != "heal":
if prohibit > hit:
print("Attack failed")
else:
print("Attack succeeded")
defenderhp = defenderhp - deduct
if defenderhp < 1:
print("KO")
else:
print("Target HP: " + str(defenderhp))

274
counter.py Normal file
View file

@ -0,0 +1,274 @@
import math, random
move = "attack"
agility = 1
speed = "normal"
name = "tidus"
ambush = False
playertype = "person"
autohaste = False
if move == "attack":
rank = 3
if agility > 169:
tickspeed = 3
elif agility > 97:
tickspeed = 4
elif agility > 61:
tickspeed = 5
elif agility > 43:
tickspeed = 6
elif agility > 34:
tickspeed = 7
elif agility > 28:
tickspeed = 8
elif agility > 22:
tickspeed = 9
elif agility > 18:
tickspeed = 10
elif agility > 16:
tickspeed = 11
elif agility > 14:
tickspeed = 12
elif agility > 11:
tickspeed = 13
elif agility > 9:
tickspeed = 14
elif agility > 6:
tickspeed = 15
elif agility > 4:
tickspeed = 16
elif agility > 3:
tickspeed = 20
elif agility > 2:
tickspeed = 22
elif agility > 1:
tickspeed = 24
elif agility > 0:
tickspeed = 26
else:
tickspeed = 28
if playertype == "person":
if agility == 1:
icv = random.randint(83,84)
elif agility == 2:
icv = random.randint(77,78)
elif agility == 3:
icv = random.randint(71,72)
elif agility == 4:
icv = random.randint(59,60)
elif agility == 5:
icv = random.randint(47,48)
elif agility == 6:
icv = random.randint(46,48)
elif agility == 7:
icv = random.randint(44,45)
elif agility == 8:
icv = random.randint(43,45)
elif agility == 9:
icv = random.randint(42,45)
elif agility == 10:
icv = random.randint(41,42)
elif agility == 11:
icv = random.randint(40,42)
elif agility == 12:
icv = random.randint(38,39)
elif agility == 13:
icv = random.randint(37,39)
elif agility == 14:
icv = random.randint(36,39)
elif agility == 15:
icv = random.randint(35,36)
elif agility == 16:
icv = random.randint(34,36)
elif agility == 17:
icv = random.randint(32,33)
elif agility == 18:
icv = random.randint(31,33)
elif agility == 19:
icv = random.randint(29,30)
elif agility == 20:
icv = random.randint(28,30)
elif agility == 21:
icv = random.randint(27,30)
elif agility == 22:
icv = random.randint(26,30)
elif agility == 23:
icv = random.randint(26,27)
elif agility == 24:
icv = random.randint(25,27)
elif agility == 25:
icv = random.randint(24,27)
elif agility == 26:
icv = random.randint(23,27)
elif agility == 27:
icv = random.randint(22,27)
elif agility == 28:
icv = random.randint(21,27)
elif agility == 29:
icv = random.randint(23,24)
elif agility == 30:
icv = random.randint(22,24)
elif agility == 31:
icv = random.randint(21,24)
elif agility == 32:
icv = random.randint(20,24)
elif agility == 33:
icv = random.randint(19,24)
elif agility == 34:
icv = random.randint(18,24)
elif agility == 35:
icv = random.randint(20,21)
elif agility == 36:
icv = random.randint(19,21)
elif agility == 37:
icv = random.randint(18,21)
elif agility == 38:
icv = random.randint(18,21)
elif agility == 39:
icv = random.randint(17,21)
elif agility == 39:
icv = random.randint(16,21)
elif agility == 40:
icv = random.randint(15,21)
elif agility == 41:
icv = random.randint(14,21)
elif agility == 42:
icv = random.randint(13,21)
elif agility == 43:
icv = random.randint(12,21)
elif agility < 46:
icv = random.randint(17,18)
elif agility < 48:
icv = random.randint(16,18)
elif agility < 50:
icv = random.randint(15,18)
elif agility < 52:
icv = random.randint(14,18)
elif agility < 54:
icv = random.randint(13,18)
elif agility < 56:
icv = random.randint(11,18)
elif agility < 58:
icv = random.randint(11,18)
elif agility < 60:
icv = random.randint(10,18)
elif agility < 62:
icv = random.randint(9,18)
elif agility < 66:
icv = random.randint(14,15)
elif agility < 70:
icv = random.randint(13,15)
elif agility < 74:
icv = random.randint(12,15)
elif agility < 78:
icv = random.randint(11,15)
elif agility < 82:
icv = random.randint(10,15)
elif agility < 86:
icv = random.randint(9,15)
elif agility < 90:
icv = random.randint(8,15)
elif agility < 94:
icv = random.randint(7,15)
elif agility < 98:
icv = random.randint(6,15)
elif agility < 106:
icv = random.randint(11,12)
elif agility < 114:
icv = random.randint(10,12)
elif agility < 122:
icv = random.randint(9,12)
elif agility < 130:
icv = random.randint(8,12)
elif agility < 138:
icv = random.randint(7,12)
elif agility < 146:
icv = random.randint(6,12)
elif agility < 154:
icv = random.randint(5,12)
elif agility < 162:
icv = random.randint(4,12)
elif agility < 170:
icv = random.randint(3,12)
elif agility < 186:
icv = random.randint(8,9)
elif agility < 202:
icv = random.randint(7,9)
elif agility < 218:
icv = random.randint(6,9)
elif agility < 234:
icv = random.randint(5,9)
elif agility < 250:
icv = random.randint(4,9)
else:
icv = random.randint(3,9)
elif playertype == "monster":
if agility == 1:
icv = random.randint(84,93)
elif agility == 2:
icv = random.randint(78,86)
elif agility == 3:
icv = random.randint(72,80)
elif agility == 4:
icv = random.randint(60,66)
elif agility < 7:
icv = random.randint(48,53)
elif agility < 10:
icv = random.randint(45,50)
elif agility < 12:
icv = random.randint(42,46)
elif agility < 15:
icv = random.randint(39,43)
elif agility < 17:
icv = random.randint(36,40)
elif agility < 19:
icv = random.randint(33,36)
elif agility < 23:
icv = random.randint(30,33)
elif agility < 29:
icv = random.randint(27,30)
elif agility < 35:
icv = random.randint(24,26)
elif agility < 44:
icv = random.randint(21,23)
elif agility < 62:
icv = random.randint(18,20)
elif agility < 98:
icv = random.randint(15,16)
elif agility < 170:
icv = random.randint(12,13)
else:
icv = random.randint(9,10)
if ambush == True:
icv = tickspeed * 3
if speed == "normal":
playerspeed = 1
elif speed == "haste":
playerspeed = 0.5
elif speed == "slow":
playerspeed = 2
countvalue = icv
battle = True
while battle == True:
while countvalue > 0:
if speed == "haste":
countvalue = countvalue - 2
else:
countvalue = countvalue - 1
print (name + " can move")
countvalue = math.ceil(tickspeed * rank * playerspeed)
if move == "haste":
countvalue = math.floor(countvalue / 2)
elif move == "slow":
countvalue = countvalue * 2

1282
daisho.org Normal file

File diff suppressed because it is too large Load diff

11
modding.org Normal file
View file

@ -0,0 +1,11 @@
- import the .fbx file of the character being replaced, which was exported using ff12 asset converter
- may need to flip the model and make it larger
- import the other model and transform it to the same scale (may not be the same transformation; make it look the same size, i.e. make the shoulders come to the same level)
- get rid of anything not needed on the new model
- set new model to view skeleton and points, then select the points and move them so that part of the model is aligned with the skeleton of the old model (e.g. position of arms)
- then scale the old model to be the same size as the new model (e.g. length of arms)
- capture the bones from the new model and bind them “by proximity” to the old model
- undo initial rotation/scaling before exporting
- delete all attributes except names
- asset converter: put the model and texture in the same folder and convert that
- “fix uvs, fix the skin weights”

91
party.py Normal file
View file

@ -0,0 +1,91 @@
tidus = {
"maxhp": 520,
"maxmp": 12,
"strength": 15,
"defence": 5,
"magic": 5,
"mdef": 5,
"agility": 10,
"luck": 18,
"evasion": 10,
"accuracy": 10
}
wakka = {
"maxhp": 618,
"maxmp": 10,
"strength": 14,
"defence": 10,
"magic": 10,
"mdef": 5,
"agility": 7,
"luck": 19,
"evasion": 5,
"accuracy": 25
}
yuna = {
"maxhp": 475,
"maxmp": 84,
"strength": 5,
"defence": 5,
"magic": 20,
"mdef": 20,
"agility": 10,
"luck": 17,
"evasion": 30,
"accuracy": 3
}
lulu = {
"maxhp": 380,
"maxmp": 92,
"strength": 5,
"defence": 8,
"magic": 20,
"mdef": 30,
"agility": 5,
"luck": 17,
"evasion": 40,
"accuracy": 3
}
kimahri = {
"maxhp": 644,
"maxmp": 78,
"strength": 16,
"defence": 15,
"magic": 17,
"mdef": 5,
"agility": 6,
"luck": 18,
"evasion": 5,
"accuracy": 5
}
auron = {
"maxhp": 1030,
"maxmp": 33,
"strength": 20,
"defence": 15,
"magic": 5,
"mdef": 5,
"agility": 5,
"luck": 17,
"evasion": 5,
"accuracy": 3
}
rikku = {
"maxhp": 360,
"maxmp": 85,
"strength": 10,
"defence": 8,
"magic": 10,
"mdef": 8,
"agility": 15,
"luck": 18,
"evasion": 5,
"accuracy": 5
}