From d6dfb16c6d0f9047e1eb804d930d0b895b8e72f9 Mon Sep 17 00:00:00 2001 From: Derek Smart Date: Mon, 11 Mar 2019 22:33:15 -0400 Subject: [PATCH] refactor stats and equipment Signed-off-by: Derek Smart --- .gitignore | 1 + .../com/grindaga/crissaegrim/Maps/Items.kt | 265 ---------------- .../grindaga/crissaegrim/Objects/Location.kt | 12 - .../controllers/EquipmentController.kt | 285 ++++++++++++++++++ .../controllers/StatsController.kt | 53 ++-- .../com/grindaga/crissaegrim/maps/StatsMap.kt | 17 -- .../crissaegrim/model/EquipmentModel.kt | 28 ++ .../grindaga/crissaegrim/model/Location.kt | 11 + .../grindaga/crissaegrim/model/StatsModel.kt | 67 ++-- .../com/grindaga/crissaegrim/objects/Slot.kt | 1 + .../crissaegrim/service/FileService.kt | 4 + .../grindaga/crissaegrim/views/MainView.kt | 5 +- 12 files changed, 370 insertions(+), 379 deletions(-) delete mode 100644 src/main/kotlin/com/grindaga/crissaegrim/Maps/Items.kt delete mode 100644 src/main/kotlin/com/grindaga/crissaegrim/Objects/Location.kt create mode 100644 src/main/kotlin/com/grindaga/crissaegrim/controllers/EquipmentController.kt delete mode 100644 src/main/kotlin/com/grindaga/crissaegrim/maps/StatsMap.kt create mode 100644 src/main/kotlin/com/grindaga/crissaegrim/model/EquipmentModel.kt create mode 100644 src/main/kotlin/com/grindaga/crissaegrim/model/Location.kt diff --git a/.gitignore b/.gitignore index 54ab2bb..52e6195 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ target .idea bin coverage +.DS_Store \ No newline at end of file diff --git a/src/main/kotlin/com/grindaga/crissaegrim/Maps/Items.kt b/src/main/kotlin/com/grindaga/crissaegrim/Maps/Items.kt deleted file mode 100644 index 30d5e3c..0000000 --- a/src/main/kotlin/com/grindaga/crissaegrim/Maps/Items.kt +++ /dev/null @@ -1,265 +0,0 @@ -package com.grindaga.crissaegrim.maps - -import com.grindaga.crissaegrim.objects.Location - -data class Items( - val emptyHand: Location = Location(0x25D), - val monsterVial_1: Location = Location(0x25F), - val monsterVial_2: Location = Location(0x260), - val monsterVial_3: Location = Location(0x261), - val shieldRod: Location = Location(0x262), - val leatherShield: Location = Location(0x263), - val knightShield: Location = Location(0x264), - val ironShield: Location = Location(0x265), - val axelordShield: Location = Location(0x266), - val heraldShield: Location = Location(0x267), - val darkShield: Location = Location(0x268), - val goddessShield: Location = Location(0x269), - val shamanShield: Location = Location(0x26A), - val medusaShield: Location = Location(0x26B), - val skullShield: Location = Location(0x26C), - val fireShield: Location = Location(0x26D), - val alucardShield: Location = Location(0x26E), - val swordOfDawn: Location = Location(0x26F), - val basilard: Location = Location(0x270), - val shortSword: Location = Location(0x271), - val combatKnife: Location = Location(0x272), - val nunchuku: Location = Location(0x273), - val wereBane: Location = Location(0x274), - val rapier: Location = Location(0x275), - val karmaCoin: Location = Location(0x276), - val magicMissile: Location = Location(0x277), - val redRust: Location = Location(0x278), - val takemitsu: Location = Location(0x279), - val shotel: Location = Location(0x27A), - val orange: Location = Location(0x27B), - val apple: Location = Location(0x27C), - val banana: Location = Location(0x27D), - val grapes: Location = Location(0x27E), - val strawberry: Location = Location(0x27F), - val pineapple: Location = Location(0x280), - val peanuts: Location = Location(0x281), - val toadstool: Location = Location(0x282), - val shiitake: Location = Location(0x283), - val cheesecake: Location = Location(0x284), - val shortcake: Location = Location(0x285), - val tart: Location = Location(0x286), - val parfait: Location = Location(0x287), - val pudding: Location = Location(0x288), - val iceCream: Location = Location(0x289), - val frankfurter: Location = Location(0x28A), - val hamburger: Location = Location(0x28B), - val pizza: Location = Location(0x28C), - val cheese: Location = Location(0x28D), - val hamAndEggs: Location = Location(0x28E), - val omelette: Location = Location(0x28F), - val morningSet: Location = Location(0x290), - val lunchA: Location = Location(0x291), - val lunchB: Location = Location(0x292), - val curryRice: Location = Location(0x293), - val gyrosPlate: Location = Location(0x294), - val spaghetti: Location = Location(0x295), - val grapeJuice: Location = Location(0x296), - val barleyTea: Location = Location(0x297), - val greenTea: Location = Location(0x298), - val natou: Location = Location(0x299), - val ramen: Location = Location(0x29A), - val misoSoup: Location = Location(0x29B), - val sushi: Location = Location(0x29C), - val porkBun: Location = Location(0x29D), - val readBeanBun: Location = Location(0x29E), - val chineseBun: Location = Location(0x29F), - val dimSumSet: Location = Location(0x2A0), - val potRoast: Location = Location(0x2A1), - val sirloin: Location = Location(0x2A2), - val turkey: Location = Location(0x2A3), - val mealTicket: Location = Location(0x2A4), - val neutronBomb: Location = Location(0x2A5), - val powerOfSire: Location = Location(0x2A6), - val pentagram: Location = Location(0x2A7), - val batPentagram: Location = Location(0x2A8), - val shuriken: Location = Location(0x2A9), - val crossShuriken: Location = Location(0x2AA), - val buffaloShuriken: Location = Location(0x2AB), - val flameShuriken: Location = Location(0x2AC), - val tnt: Location = Location(0x2AD), - val bwakaKnife: Location = Location(0x2AE), - val boomerang: Location = Location(0x2AF), - val javelin: Location = Location(0x2B0), - val tyrfing: Location = Location(0x2B1), - val namakura: Location = Location(0x2B2), - val knuckleDuster: Location = Location(0x2B3), - val gladius: Location = Location(0x2B4), - val scimitar: Location = Location(0x2B5), - val cutlass: Location = Location(0x2B6), - val sabre: Location = Location(0x2B7), - val falchion: Location = Location(0x2B8), - val broadsword: Location = Location(0x2B9), - val bekatowa: Location = Location(0x2BA), - val damascusSword: Location = Location(0x2BB), - val hunterSword: Location = Location(0x2BC), - val estoc: Location = Location(0x2BD), - val bastardSword: Location = Location(0x2BE), - val jewelKnuckles: Location = Location(0x2BF), - val claymore: Location = Location(0x2C0), - val talware: Location = Location(0x2C1), - val katana: Location = Location(0x2C2), - val flameberge: Location = Location(0x2C3), - val ironFist: Location = Location(0x2C4), - val zweiHander: Location = Location(0x2C5), - val swordOfHador: Location = Location(0x2C6), - val luminus: Location = Location(0x2C7), - val harper: Location = Location(0x2C8), - val obsidianSword: Location = Location(0x2C9), - val gram: Location = Location(0x2CA), - val jewelSword: Location = Location(0x2CB), - val mormegil: Location = Location(0x2CC), - val firebrand: Location = Location(0x2CD), - val thunderSword: Location = Location(0x2CE), - val icebrand: Location = Location(0x2CF), - val stoneSword: Location = Location(0x2D0), - val holySword: Location = Location(0x2D1), - val terminusEst: Location = Location(0x2D2), - val marsil: Location = Location(0x2D3), - val darkBlade: Location = Location(0x2D4), - val heavenSword: Location = Location(0x2D5), - val fistOfTulkas: Location = Location(0x2D6), - val gurthang: Location = Location(0x2D7), - val mourneBlade: Location = Location(0x2D8), - val alucardSword: Location = Location(0x2D9), - val mablungSword: Location = Location(0x2DA), - val badelaire: Location = Location(0x2DB), - val swordFamiliar: Location = Location(0x2DC), - val greatSword: Location = Location(0x2DD), - val mace: Location = Location(0x2DE), - val morningstar: Location = Location(0x2DF), - val holyRod: Location = Location(0x2E0), - val starFlail: Location = Location(0x2E1), - val moonRod: Location = Location(0x2E2), - val chakram: Location = Location(0x2E3), - val fireBoomerang: Location = Location(0x2E4), - val ironBall: Location = Location(0x2E5), - val holbeinDagger: Location = Location(0x2E6), - val blueKnuckles: Location = Location(0x2E7), - val dynamite: Location = Location(0x2E8), - val osafuneKatana: Location = Location(0x2E9), - val masamune: Location = Location(0x2EA), - val muramasa: Location = Location(0x2EB), - val heartRefresh: Location = Location(0x2EC), - val runeSword: Location = Location(0x2ED), - val antiVenom: Location = Location(0x2EE), - val uncurse: Location = Location(0x2EF), - val lifeApple: Location = Location(0x2F0), - val hammer: Location = Location(0x2F1), - val strUp: Location = Location(0x2F2), - val lckUp: Location = Location(0x2F3), - val intUp: Location = Location(0x2F4), - val attackUp: Location = Location(0x2F5), - val defenseUp: Location = Location(0x2F6), - val resistFire: Location = Location(0x2F7), - val resistThunder: Location = Location(0x2F8), - val resistIce: Location = Location(0x2F9), - val resistStone: Location = Location(0x2FA), - val resistHoly: Location = Location(0x2FB), - val resistDark: Location = Location(0x2FC), - val potion: Location = Location(0x2FD), - val highPotion: Location = Location(0x2FE), - val elixir: Location = Location(0x2FF), - val mannaPrism: Location = Location(0x300), - val vorpalBlade: Location = Location(0x301), - val crissagrim: Location = Location(0x302), - val yasatsuna: Location = Location(0x303), - val libraryCard: Location = Location(0x304), - val alucartShield: Location = Location(0x305), - val alucartSword: Location = Location(0x306), - val emptyBody: Location = Location(0x307), - val clothTunic: Location = Location(0x308), - val hideCuirass: Location = Location(0x309), - val bronzeCuirass: Location = Location(0x30A), - val ironCuirass: Location = Location(0x30B), - val steelCuirass: Location = Location(0x30C), - val silverPlate: Location = Location(0x30D), - val goldPlate: Location = Location(0x30E), - val platinumMail: Location = Location(0x30F), - val diamondPlate: Location = Location(0x310), - val fireMail: Location = Location(0x311), - val lightningMail: Location = Location(0x312), - val iceMail: Location = Location(0x313), - val mirrorCuirass: Location = Location(0x314), - val spikeBreakerArmor: Location = Location(0x315), - val alucardArmor: Location = Location(0x316), - val darkArmor: Location = Location(0x317), - val healingMail: Location = Location(0x318), - val holyArmor: Location = Location(0x319), - val walkArmor: Location = Location(0x31A), - val brilliantArmor: Location = Location(0x31B), - val mojoMail: Location = Location(0x31C), - val furyPlate: Location = Location(0x31D), - val draculaTunic: Location = Location(0x31E), - val godSGarb: Location = Location(0x31F), - val axelordArmor: Location = Location(0x320), - val emptyHead: Location = Location(0x321), - val sunglasses: Location = Location(0x322), - val ballroomMask: Location = Location(0x323), - val bandanna: Location = Location(0x324), - val feltHat: Location = Location(0x325), - val velvetHat: Location = Location(0x326), - val goggles: Location = Location(0x327), - val leatherHat: Location = Location(0x328), - val holyGlasses: Location = Location(0x329), - val steelHelm: Location = Location(0x32A), - val stoneMask: Location = Location(0x32B), - val circlet: Location = Location(0x32C), - val goldCirclet: Location = Location(0x32D), - val rubyCirclet: Location = Location(0x32E), - val opalCirclet: Location = Location(0x32F), - val topazCirclet: Location = Location(0x330), - val berylCirclet: Location = Location(0x331), - val catEyeCirclet: Location = Location(0x332), - val coralCirclet: Location = Location(0x333), - val dragonHelm: Location = Location(0x334), - val silverCrown: Location = Location(0x335), - val wizardHat: Location = Location(0x336), - val emptyCloak: Location = Location(0x337), - val clothCloak: Location = Location(0x338), - val reverseCloak: Location = Location(0x339), - val elvenCloak: Location = Location(0x33A), - val crystalCloak: Location = Location(0x33B), - val royalCloak: Location = Location(0x33C), - val bloodCloak: Location = Location(0x33D), - val josephsCloak: Location = Location(0x33E), - val twilightCloak: Location = Location(0x33F), - val emptyRelics: Location = Location(0x340), - val moonstone: Location = Location(0x341), - val sunstone: Location = Location(0x342), - val bloodstone: Location = Location(0x343), - val staurolite: Location = Location(0x344), - val ringOfPales: Location = Location(0x345), - val zircon: Location = Location(0x346), - val aquamarine: Location = Location(0x347), - val turquiose: Location = Location(0x348), - val onyx: Location = Location(0x349), - val garnet: Location = Location(0x34A), - val opal: Location = Location(0x34B), - val diamond: Location = Location(0x34C), - val lapisLazuli: Location = Location(0x34D), - val ringOfAres: Location = Location(0x34E), - val goldRing: Location = Location(0x34F), - val silverRing: Location = Location(0x350), - val ringOfVarda: Location = Location(0x351), - val ringOfArcana: Location = Location(0x352), - val mysticPendant: Location = Location(0x353), - val heartBrooch: Location = Location(0x354), - val necklaceOfJ: Location = Location(0x355), - val gauntlet: Location = Location(0x356), - val ankhOfLife: Location = Location(0x357), - val ringOfFeanor: Location = Location(0x358), - val medal: Location = Location(0x359), - val talisman: Location = Location(0x35A), - val duplicator: Location = Location(0x35B), - val kingsStone: Location = Location(0x35C), - val covenantStone: Location = Location(0x35D), - val nauglamir: Location = Location(0x35E), - val secretBoots: Location = Location(0x35F), - val alucartMail: Location = Location(0x360) -) diff --git a/src/main/kotlin/com/grindaga/crissaegrim/Objects/Location.kt b/src/main/kotlin/com/grindaga/crissaegrim/Objects/Location.kt deleted file mode 100644 index 8a941ec..0000000 --- a/src/main/kotlin/com/grindaga/crissaegrim/Objects/Location.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.grindaga.crissaegrim.objects - -data class Location( - val address: Int, - val length: Int = 0, - val reverseBytes: Boolean = false, - val type: String = "Numeric" -) { - fun getRange(): IntRange { - return address..(address + length) - } -} diff --git a/src/main/kotlin/com/grindaga/crissaegrim/controllers/EquipmentController.kt b/src/main/kotlin/com/grindaga/crissaegrim/controllers/EquipmentController.kt new file mode 100644 index 0000000..fde68cf --- /dev/null +++ b/src/main/kotlin/com/grindaga/crissaegrim/controllers/EquipmentController.kt @@ -0,0 +1,285 @@ +package com.grindaga.crissaegrim.controllers + +import com.grindaga.crissaegrim.model.EquipmentScope +import com.grindaga.crissaegrim.model.Equipment +import com.grindaga.crissaegrim.objects.Slot +import tornadofx.* + +class EquipmentController: Controller() { + val equipmentScope = EquipmentScope() + val equipment = equipmentScope.equipment + + init { + equipment.add(Equipment("emptyHand", 0, 0x25D)) + equipment.add(Equipment("monsterVial_1", 0, 0x25F)) + equipment.add(Equipment("monsterVial_2", 0, 0x260)) + equipment.add(Equipment("monsterVial_3", 0, 0x261)) + equipment.add(Equipment("shieldRod", 0, 0x262)) + equipment.add(Equipment("leatherShield", 0, 0x263)) + equipment.add(Equipment("knightShield", 0, 0x264)) + equipment.add(Equipment("ironShield", 0, 0x265)) + equipment.add(Equipment("axelordShield", 0, 0x266)) + equipment.add(Equipment("heraldShield", 0, 0x267)) + equipment.add(Equipment("darkShield", 0, 0x268)) + equipment.add(Equipment("goddessShield", 0, 0x269)) + equipment.add(Equipment("shamanShield", 0, 0x26A)) + equipment.add(Equipment("medusaShield", 0, 0x26B)) + equipment.add(Equipment("skullShield", 0, 0x26C)) + equipment.add(Equipment("fireShield", 0, 0x26D)) + equipment.add(Equipment("alucardShield", 0, 0x26E)) + equipment.add(Equipment("swordOfDawn", 0, 0x26F)) + equipment.add(Equipment("basilard", 0, 0x270)) + equipment.add(Equipment("shortSword", 0, 0x271)) + equipment.add(Equipment("combatKnife", 0, 0x272)) + equipment.add(Equipment("nunchuku", 0, 0x273)) + equipment.add(Equipment("wereBane", 0, 0x274)) + equipment.add(Equipment("rapier", 0, 0x275)) + equipment.add(Equipment("karmaCoin", 0, 0x276)) + equipment.add(Equipment("magicMissile", 0, 0x277)) + equipment.add(Equipment("redRust", 0, 0x278)) + equipment.add(Equipment("takemitsu", 0, 0x279)) + equipment.add(Equipment("shotel", 0, 0x27A)) + equipment.add(Equipment("orange", 0, 0x27B)) + equipment.add(Equipment("apple", 0, 0x27C)) + equipment.add(Equipment("banana", 0, 0x27D)) + equipment.add(Equipment("grapes", 0, 0x27E)) + equipment.add(Equipment("strawberry", 0, 0x27F)) + equipment.add(Equipment("pineapple", 0, 0x280)) + equipment.add(Equipment("peanuts", 0, 0x281)) + equipment.add(Equipment("toadstool", 0, 0x282)) + equipment.add(Equipment("shiitake", 0, 0x283)) + equipment.add(Equipment("cheesecake", 0, 0x284)) + equipment.add(Equipment("shortcake", 0, 0x285)) + equipment.add(Equipment("tart", 0, 0x286)) + equipment.add(Equipment("parfait", 0, 0x287)) + equipment.add(Equipment("pudding", 0, 0x288)) + equipment.add(Equipment("iceCream", 0, 0x289)) + equipment.add(Equipment("frankfurter", 0, 0x28A)) + equipment.add(Equipment("hamburger", 0, 0x28B)) + equipment.add(Equipment("pizza", 0, 0x28C)) + equipment.add(Equipment("cheese", 0, 0x28D)) + equipment.add(Equipment("hamAndEggs", 0, 0x28E)) + equipment.add(Equipment("omelette", 0, 0x28F)) + equipment.add(Equipment("morningSet", 0, 0x290)) + equipment.add(Equipment("lunchA", 0, 0x291)) + equipment.add(Equipment("lunchB", 0, 0x292)) + equipment.add(Equipment("curryRice", 0, 0x293)) + equipment.add(Equipment("gyrosPlate", 0, 0x294)) + equipment.add(Equipment("spaghetti", 0, 0x295)) + equipment.add(Equipment("grapeJuice", 0, 0x296)) + equipment.add(Equipment("barleyTea", 0, 0x297)) + equipment.add(Equipment("greenTea", 0, 0x298)) + equipment.add(Equipment("natou", 0, 0x299)) + equipment.add(Equipment("ramen", 0, 0x29A)) + equipment.add(Equipment("misoSoup", 0, 0x29B)) + equipment.add(Equipment("sushi", 0, 0x29C)) + equipment.add(Equipment("porkBun", 0, 0x29D)) + equipment.add(Equipment("readBeanBun", 0, 0x29E)) + equipment.add(Equipment("chineseBun", 0, 0x29F)) + equipment.add(Equipment("dimSumSet", 0, 0x2A0)) + equipment.add(Equipment("potRoast", 0, 0x2A1)) + equipment.add(Equipment("sirloin", 0, 0x2A2)) + equipment.add(Equipment("turkey", 0, 0x2A3)) + equipment.add(Equipment("mealTicket", 0, 0x2A4)) + equipment.add(Equipment("neutronBomb", 0, 0x2A5)) + equipment.add(Equipment("powerOfSire", 0, 0x2A6)) + equipment.add(Equipment("pentagram", 0, 0x2A7)) + equipment.add(Equipment("batPentagram", 0, 0x2A8)) + equipment.add(Equipment("shuriken", 0, 0x2A9)) + equipment.add(Equipment("crossShuriken", 0, 0x2AA)) + equipment.add(Equipment("buffaloShuriken", 0, 0x2AB)) + equipment.add(Equipment("flameShuriken", 0, 0x2AC)) + equipment.add(Equipment("tnt", 0, 0x2AD)) + equipment.add(Equipment("bwakaKnife", 0, 0x2AE)) + equipment.add(Equipment("boomerang", 0, 0x2AF)) + equipment.add(Equipment("javelin", 0, 0x2B0)) + equipment.add(Equipment("tyrfing", 0, 0x2B1)) + equipment.add(Equipment("namakura", 0, 0x2B2)) + equipment.add(Equipment("knuckleDuster", 0, 0x2B3)) + equipment.add(Equipment("gladius", 0, 0x2B4)) + equipment.add(Equipment("scimitar", 0, 0x2B5)) + equipment.add(Equipment("cutlass", 0, 0x2B6)) + equipment.add(Equipment("sabre", 0, 0x2B7)) + equipment.add(Equipment("falchion", 0, 0x2B8)) + equipment.add(Equipment("broadsword", 0, 0x2B9)) + equipment.add(Equipment("bekatowa", 0, 0x2BA)) + equipment.add(Equipment("damascusSword", 0, 0x2BB)) + equipment.add(Equipment("hunterSword", 0, 0x2BC)) + equipment.add(Equipment("estoc", 0, 0x2BD)) + equipment.add(Equipment("bastardSword", 0, 0x2BE)) + equipment.add(Equipment("jewelKnuckles", 0, 0x2BF)) + equipment.add(Equipment("claymore", 0, 0x2C0)) + equipment.add(Equipment("talware", 0, 0x2C1)) + equipment.add(Equipment("katana", 0, 0x2C2)) + equipment.add(Equipment("flameberge", 0, 0x2C3)) + equipment.add(Equipment("ironFist", 0, 0x2C4)) + equipment.add(Equipment("zweiHander", 0, 0x2C5)) + equipment.add(Equipment("swordOfHador", 0, 0x2C6)) + equipment.add(Equipment("luminus", 0, 0x2C7)) + equipment.add(Equipment("harper", 0, 0x2C8)) + equipment.add(Equipment("obsidianSword", 0, 0x2C9)) + equipment.add(Equipment("gram", 0, 0x2CA)) + equipment.add(Equipment("jewelSword", 0, 0x2CB)) + equipment.add(Equipment("mormegil", 0, 0x2CC)) + equipment.add(Equipment("firebrand", 0, 0x2CD)) + equipment.add(Equipment("thunderSword", 0, 0x2CE)) + equipment.add(Equipment("icebrand", 0, 0x2CF)) + equipment.add(Equipment("stoneSword", 0, 0x2D0)) + equipment.add(Equipment("holySword", 0, 0x2D1)) + equipment.add(Equipment("terminusEst", 0, 0x2D2)) + equipment.add(Equipment("marsil", 0, 0x2D3)) + equipment.add(Equipment("darkBlade", 0, 0x2D4)) + equipment.add(Equipment("heavenSword", 0, 0x2D5)) + equipment.add(Equipment("fistOfTulkas", 0, 0x2D6)) + equipment.add(Equipment("gurthang", 0, 0x2D7)) + equipment.add(Equipment("mourneBlade", 0, 0x2D8)) + equipment.add(Equipment("alucardSword", 0, 0x2D9)) + equipment.add(Equipment("mablungSword", 0, 0x2DA)) + equipment.add(Equipment("badelaire", 0, 0x2DB)) + equipment.add(Equipment("swordFamiliar", 0, 0x2DC)) + equipment.add(Equipment("greatSword", 0, 0x2DD)) + equipment.add(Equipment("mace", 0, 0x2DE)) + equipment.add(Equipment("morningstar", 0, 0x2DF)) + equipment.add(Equipment("holyRod", 0, 0x2E0)) + equipment.add(Equipment("starFlail", 0, 0x2E1)) + equipment.add(Equipment("moonRod", 0, 0x2E2)) + equipment.add(Equipment("chakram", 0, 0x2E3)) + equipment.add(Equipment("fireBoomerang", 0, 0x2E4)) + equipment.add(Equipment("ironBall", 0, 0x2E5)) + equipment.add(Equipment("holbeinDagger", 0, 0x2E6)) + equipment.add(Equipment("blueKnuckles", 0, 0x2E7)) + equipment.add(Equipment("dynamite", 0, 0x2E8)) + equipment.add(Equipment("osafuneKatana", 0, 0x2E9)) + equipment.add(Equipment("masamune", 0, 0x2EA)) + equipment.add(Equipment("muramasa", 0, 0x2EB)) + equipment.add(Equipment("heartRefresh", 0, 0x2EC)) + equipment.add(Equipment("runeSword", 0, 0x2ED)) + equipment.add(Equipment("antiVenom", 0, 0x2EE)) + equipment.add(Equipment("uncurse", 0, 0x2EF)) + equipment.add(Equipment("lifeApple", 0, 0x2F0)) + equipment.add(Equipment("hammer", 0, 0x2F1)) + equipment.add(Equipment("strUp", 0, 0x2F2)) + equipment.add(Equipment("lckUp", 0, 0x2F3)) + equipment.add(Equipment("intUp", 0, 0x2F4)) + equipment.add(Equipment("attackUp", 0, 0x2F5)) + equipment.add(Equipment("defenseUp", 0, 0x2F6)) + equipment.add(Equipment("resistFire", 0, 0x2F7)) + equipment.add(Equipment("resistThunder", 0, 0x2F8)) + equipment.add(Equipment("resistIce", 0, 0x2F9)) + equipment.add(Equipment("resistStone", 0, 0x2FA)) + equipment.add(Equipment("resistHoly", 0, 0x2FB)) + equipment.add(Equipment("resistDark", 0, 0x2FC)) + equipment.add(Equipment("potion", 0, 0x2FD)) + equipment.add(Equipment("highPotion", 0, 0x2FE)) + equipment.add(Equipment("elixir", 0, 0x2FF)) + equipment.add(Equipment("mannaPrism", 0, 0x300)) + equipment.add(Equipment("vorpalBlade", 0, 0x301)) + equipment.add(Equipment("crissagrim", 0, 0x302)) + equipment.add(Equipment("yasatsuna", 0, 0x303)) + equipment.add(Equipment("libraryCard", 0, 0x304)) + equipment.add(Equipment("alucartShield", 0, 0x305)) + equipment.add(Equipment("alucartSword", 0, 0x306)) + equipment.add(Equipment("emptyBody", 0, 0x307)) + equipment.add(Equipment("clothTunic", 0, 0x308)) + equipment.add(Equipment("hideCuirass", 0, 0x309)) + equipment.add(Equipment("bronzeCuirass", 0, 0x30A)) + equipment.add(Equipment("ironCuirass", 0, 0x30B)) + equipment.add(Equipment("steelCuirass", 0, 0x30C)) + equipment.add(Equipment("silverPlate", 0, 0x30D)) + equipment.add(Equipment("goldPlate", 0, 0x30E)) + equipment.add(Equipment("platinumMail", 0, 0x30F)) + equipment.add(Equipment("diamondPlate", 0, 0x310)) + equipment.add(Equipment("fireMail", 0, 0x311)) + equipment.add(Equipment("lightningMail", 0, 0x312)) + equipment.add(Equipment("iceMail", 0, 0x313)) + equipment.add(Equipment("mirrorCuirass", 0, 0x314)) + equipment.add(Equipment("spikeBreakerArmor", 0, 0x315)) + equipment.add(Equipment("alucardArmor", 0, 0x316)) + equipment.add(Equipment("darkArmor", 0, 0x317)) + equipment.add(Equipment("healingMail", 0, 0x318)) + equipment.add(Equipment("holyArmor", 0, 0x319)) + equipment.add(Equipment("walkArmor", 0, 0x31A)) + equipment.add(Equipment("brilliantArmor", 0, 0x31B)) + equipment.add(Equipment("mojoMail", 0, 0x31C)) + equipment.add(Equipment("furyPlate", 0, 0x31D)) + equipment.add(Equipment("draculaTunic", 0, 0x31E)) + equipment.add(Equipment("godSGarb", 0, 0x31F)) + equipment.add(Equipment("axelordArmor", 0, 0x320)) + equipment.add(Equipment("emptyHead", 0, 0x321)) + equipment.add(Equipment("sunglasses", 0, 0x322)) + equipment.add(Equipment("ballroomMask", 0, 0x323)) + equipment.add(Equipment("bandanna", 0, 0x324)) + equipment.add(Equipment("feltHat", 0, 0x325)) + equipment.add(Equipment("velvetHat", 0, 0x326)) + equipment.add(Equipment("goggles", 0, 0x327)) + equipment.add(Equipment("leatherHat", 0, 0x328)) + equipment.add(Equipment("holyGlasses", 0, 0x329)) + equipment.add(Equipment("steelHelm", 0, 0x32A)) + equipment.add(Equipment("stoneMask", 0, 0x32B)) + equipment.add(Equipment("circlet", 0, 0x32C)) + equipment.add(Equipment("goldCirclet", 0, 0x32D)) + equipment.add(Equipment("rubyCirclet", 0, 0x32E)) + equipment.add(Equipment("opalCirclet", 0, 0x32F)) + equipment.add(Equipment("topazCirclet", 0, 0x330)) + equipment.add(Equipment("berylCirclet", 0, 0x331)) + equipment.add(Equipment("catEyeCirclet", 0, 0x332)) + equipment.add(Equipment("coralCirclet", 0, 0x333)) + equipment.add(Equipment("dragonHelm", 0, 0x334)) + equipment.add(Equipment("silverCrown", 0, 0x335)) + equipment.add(Equipment("wizardHat", 0, 0x336)) + equipment.add(Equipment("emptyCloak", 0, 0x337)) + equipment.add(Equipment("clothCloak", 0, 0x338)) + equipment.add(Equipment("reverseCloak", 0, 0x339)) + equipment.add(Equipment("elvenCloak", 0, 0x33A)) + equipment.add(Equipment("crystalCloak", 0, 0x33B)) + equipment.add(Equipment("royalCloak", 0, 0x33C)) + equipment.add(Equipment("bloodCloak", 0, 0x33D)) + equipment.add(Equipment("josephsCloak", 0, 0x33E)) + equipment.add(Equipment("twilightCloak", 0, 0x33F)) + equipment.add(Equipment("emptyRelics", 0, 0x340)) + equipment.add(Equipment("moonstone", 0, 0x341)) + equipment.add(Equipment("sunstone", 0, 0x342)) + equipment.add(Equipment("bloodstone", 0, 0x343)) + equipment.add(Equipment("staurolite", 0, 0x344)) + equipment.add(Equipment("ringOfPales", 0, 0x345)) + equipment.add(Equipment("zircon", 0, 0x346)) + equipment.add(Equipment("aquamarine", 0, 0x347)) + equipment.add(Equipment("turquiose", 0, 0x348)) + equipment.add(Equipment("onyx", 0, 0x349)) + equipment.add(Equipment("garnet", 0, 0x34A)) + equipment.add(Equipment("opal", 0, 0x34B)) + equipment.add(Equipment("diamond", 0, 0x34C)) + equipment.add(Equipment("lapisLazuli", 0, 0x34D)) + equipment.add(Equipment("ringOfAres", 0, 0x34E)) + equipment.add(Equipment("goldRing", 0, 0x34F)) + equipment.add(Equipment("silverRing", 0, 0x350)) + equipment.add(Equipment("ringOfVarda", 0, 0x351)) + equipment.add(Equipment("ringOfArcana", 0, 0x352)) + equipment.add(Equipment("mysticPendant", 0, 0x353)) + equipment.add(Equipment("heartBrooch", 0, 0x354)) + equipment.add(Equipment("necklaceOfJ", 0, 0x355)) + equipment.add(Equipment("gauntlet", 0, 0x356)) + equipment.add(Equipment("ankhOfLife", 0, 0x357)) + equipment.add(Equipment("ringOfFeanor", 0, 0x358)) + equipment.add(Equipment("medal", 0, 0x359)) + equipment.add(Equipment("talisman", 0, 0x35A)) + equipment.add(Equipment("duplicator", 0, 0x35B)) + equipment.add(Equipment("kingsStone", 0, 0x35C)) + equipment.add(Equipment("covenantStone", 0, 0x35D)) + equipment.add(Equipment("nauglamir", 0, 0x35E)) + equipment.add(Equipment("secretBoots", 0, 0x35F)) + equipment.add(Equipment("alucartMail", 0, 0x360)) + } + + fun loadFromSlot(slot: Slot) { + for (item in equipment) { + item.value = slot.read(item) + } + } + + fun writeToSlot(slot: Slot) { + for (item in equipment) { + slot.write(item, item.value) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/grindaga/crissaegrim/controllers/StatsController.kt b/src/main/kotlin/com/grindaga/crissaegrim/controllers/StatsController.kt index f6c1a42..4743cbb 100644 --- a/src/main/kotlin/com/grindaga/crissaegrim/controllers/StatsController.kt +++ b/src/main/kotlin/com/grindaga/crissaegrim/controllers/StatsController.kt @@ -1,54 +1,37 @@ package com.grindaga.crissaegrim.controllers -import com.grindaga.crissaegrim.maps.StatsMap import com.grindaga.crissaegrim.model.StatsScope +import com.grindaga.crissaegrim.model.Stat import com.grindaga.crissaegrim.objects.Slot import tornadofx.* class StatsController: Controller() { val statsScope = StatsScope() - val statMap = StatsMap() val stats = statsScope.stats init { - stats.HP.setValue(0) - stats.HPMax.setValue(0) - stats.Hearts.setValue(0) - stats.HeartsMax.setValue(0) - stats.MP.setValue(0) - stats.MPMax.setValue(0) - stats.STR.setValue(0) - stats.CON.setValue(0) - stats.INT.setValue(0) - stats.LCK.setValue(0) - stats.ATTBonus.setValue(0) + stats.add(Stat("HP", 0, 0x474, 1, true)) + stats.add(Stat("HPMax", 0, 0x478, 1, true)) + stats.add(Stat("Hearts", 0, 0x47C, 1, true)) + stats.add(Stat("HeartsMax", 0, 0x480, 1, true)) + stats.add(Stat("MP", 0, 0x484, 1, true)) + stats.add(Stat("MPMax", 0, 0x488, 1, true)) + stats.add(Stat("STR", 0, 0x48C)) + stats.add(Stat("CON", 0, 0x490)) + stats.add(Stat("INT", 0, 0x494)) + stats.add(Stat("LCK", 0, 0x498)) + stats.add(Stat("ATTBonus", 0, 0x49)) } fun loadFromSlot(slot: Slot) { - stats.HP.setValue(slot.read(statMap.HP)) - stats.HPMax.setValue(slot.read(statMap.HPMax)) - stats.Hearts.setValue(slot.read(statMap.Hearts)) - stats.HeartsMax.setValue(slot.read(statMap.HeartsMax)) - stats.MP.setValue(slot.read(statMap.MP)) - stats.MPMax.setValue(slot.read(statMap.MPMax)) - stats.STR.setValue(slot.read(statMap.STR)) - stats.CON.setValue(slot.read(statMap.CON)) - stats.INT.setValue(slot.read(statMap.INT)) - stats.LCK.setValue(slot.read(statMap.LCK)) - stats.ATTBonus.setValue(slot.read(statMap.ATTBonus)) + for (stat in stats) { + stat.value = slot.read(stat) + } } fun writeToSlot(slot: Slot) { - slot.write(statMap.HP, stats.HP.value.toInt()) - slot.write(statMap.HPMax, stats.HP.value.toInt()) - slot.write(statMap.Hearts, stats.Hearts.value.toInt()) - slot.write(statMap.HeartsMax, stats.HeartsMax.value.toInt()) - slot.write(statMap.MP, stats.MP.value.toInt()) - slot.write(statMap.MPMax, stats.MPMax.value.toInt()) - slot.write(statMap.STR, stats.STR.value.toInt()) - slot.write(statMap.CON, stats.CON.value.toInt()) - slot.write(statMap.INT, stats.INT.value.toInt()) - slot.write(statMap.LCK, stats.LCK.value.toInt()) - slot.write(statMap.ATTBonus, stats.ATTBonus.value.toInt()) + for (stat in stats) { + slot.write(stat, stat.value) + } } } \ No newline at end of file diff --git a/src/main/kotlin/com/grindaga/crissaegrim/maps/StatsMap.kt b/src/main/kotlin/com/grindaga/crissaegrim/maps/StatsMap.kt deleted file mode 100644 index 5fa89dc..0000000 --- a/src/main/kotlin/com/grindaga/crissaegrim/maps/StatsMap.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.grindaga.crissaegrim.maps - -import com.grindaga.crissaegrim.objects.Location - -data class StatsMap ( - val HP: Location = Location(0x474, 1, true), - val HPMax: Location = Location(0x478, 1, true), - val Hearts: Location = Location(0x47C, 1, true), - val HeartsMax: Location = Location(0x480, 1, true), - val MP: Location = Location(0x484, 1, true), - val MPMax: Location = Location(0x488, 1, true), - val STR: Location = Location(0x48C), - val CON: Location = Location(0x490), - val INT: Location = Location(0x494), - val LCK: Location = Location(0x498), - val ATTBonus: Location = Location(0x49) -) \ No newline at end of file diff --git a/src/main/kotlin/com/grindaga/crissaegrim/model/EquipmentModel.kt b/src/main/kotlin/com/grindaga/crissaegrim/model/EquipmentModel.kt new file mode 100644 index 0000000..9149b32 --- /dev/null +++ b/src/main/kotlin/com/grindaga/crissaegrim/model/EquipmentModel.kt @@ -0,0 +1,28 @@ +package com.grindaga.crissaegrim.model + +import javafx.beans.property.SimpleIntegerProperty +import javafx.beans.property.SimpleStringProperty +import tornadofx.* + +class Equipment( + name: String, + value: Int, + override val address: Int, + override val length: Int = 0, + override val reverseBytes: Boolean = false, + override val type: String = "Numeric" +): Location { + val nameProperty = SimpleStringProperty(this, "name", name) + override var name by nameProperty + + val valueProperty = SimpleIntegerProperty(this, "value", value) + override var value by valueProperty + + override fun getRange(): IntRange { + return address..(address + length) + } +} + +class EquipmentScope : Scope() { + val equipment = mutableListOf().observable() +} \ No newline at end of file diff --git a/src/main/kotlin/com/grindaga/crissaegrim/model/Location.kt b/src/main/kotlin/com/grindaga/crissaegrim/model/Location.kt new file mode 100644 index 0000000..2f85929 --- /dev/null +++ b/src/main/kotlin/com/grindaga/crissaegrim/model/Location.kt @@ -0,0 +1,11 @@ +package com.grindaga.crissaegrim.model + +interface Location { + val name: String + val value: Int + val address: Int + val length: Int + val reverseBytes: Boolean + val type: String + fun getRange(): IntRange +} \ No newline at end of file diff --git a/src/main/kotlin/com/grindaga/crissaegrim/model/StatsModel.kt b/src/main/kotlin/com/grindaga/crissaegrim/model/StatsModel.kt index ee938f3..f98193a 100644 --- a/src/main/kotlin/com/grindaga/crissaegrim/model/StatsModel.kt +++ b/src/main/kotlin/com/grindaga/crissaegrim/model/StatsModel.kt @@ -1,59 +1,28 @@ package com.grindaga.crissaegrim.model import javafx.beans.property.SimpleIntegerProperty +import javafx.beans.property.SimpleStringProperty import tornadofx.* -class Stats( - HP: Int, - HPMax: Int, - Hearts: Int, - HeartsMax: Int, - MP: Int, - MPMax: Int, - STR: Int, - CON: Int, - INT: Int, - LCK: Int, - ATTBonus: Int -){ - val hpProperty = SimpleIntegerProperty() - var HP by hpProperty - val hpMaxProperty = SimpleIntegerProperty() - var HPMax by hpMaxProperty - val heartsProperty = SimpleIntegerProperty() - var Hearts by heartsProperty - val heartsMaxProperty = SimpleIntegerProperty() - var HeartsMax by heartsMaxProperty - val mpProperty = SimpleIntegerProperty() - var MP by mpProperty - val mpMaxProperty = SimpleIntegerProperty() - var MPMax by mpMaxProperty - val strProperty = SimpleIntegerProperty() - var STR by strProperty - val conProperty = SimpleIntegerProperty() - var CON by conProperty - val intProperty = SimpleIntegerProperty() - var INT by intProperty - val lckProperty = SimpleIntegerProperty() - var LCK by lckProperty - val attBonusProperty = SimpleIntegerProperty() - var ATTBonus by attBonusProperty -} +class Stat( + name: String, + value: Int, + override val address: Int, + override val length: Int = 0, + override val reverseBytes: Boolean = false, + override val type: String = "Numeric" +): Location { + val nameProperty = SimpleStringProperty(this, "name", name) + override var name by nameProperty + + val valueProperty = SimpleIntegerProperty(this, "value", value) + override var value by valueProperty -class StatsModel(stats: Stats? = null) : ItemViewModel(stats) { - val HP = bind(Stats::hpProperty) - val HPMax = bind(Stats::hpMaxProperty) - val Hearts = bind(Stats::heartsProperty) - val HeartsMax = bind(Stats::heartsMaxProperty) - val MP = bind(Stats::mpProperty) - val MPMax = bind(Stats::mpMaxProperty) - val STR = bind(Stats::strProperty) - val CON = bind(Stats::conProperty) - val INT = bind(Stats::intProperty) - val LCK = bind(Stats::lckProperty) - val ATTBonus = bind(Stats::attBonusProperty) + override fun getRange(): IntRange { + return address..(address + length) + } } class StatsScope : Scope() { - val stats = StatsModel() + val stats = mutableListOf().observable() } \ No newline at end of file diff --git a/src/main/kotlin/com/grindaga/crissaegrim/objects/Slot.kt b/src/main/kotlin/com/grindaga/crissaegrim/objects/Slot.kt index dd6ff07..02784b8 100644 --- a/src/main/kotlin/com/grindaga/crissaegrim/objects/Slot.kt +++ b/src/main/kotlin/com/grindaga/crissaegrim/objects/Slot.kt @@ -1,6 +1,7 @@ package com.grindaga.crissaegrim.objects import com.grindaga.crissaegrim.utils.Numeric +import com.grindaga.crissaegrim.model.Location data class Slot( val rootAddress: Int, diff --git a/src/main/kotlin/com/grindaga/crissaegrim/service/FileService.kt b/src/main/kotlin/com/grindaga/crissaegrim/service/FileService.kt index 7de6e3f..b10a6ab 100644 --- a/src/main/kotlin/com/grindaga/crissaegrim/service/FileService.kt +++ b/src/main/kotlin/com/grindaga/crissaegrim/service/FileService.kt @@ -1,5 +1,6 @@ package com.grindaga.crissaegrim.service +import com.grindaga.crissaegrim.controllers.EquipmentController import com.grindaga.crissaegrim.controllers.MessageController import com.grindaga.crissaegrim.controllers.RelicsController import com.grindaga.crissaegrim.controllers.StatsController @@ -21,6 +22,7 @@ object FileService: Component() { private val statsCtrl: StatsController by inject() private val relicsCtrl: RelicsController by inject() + private val equipmentCtrl: EquipmentController by inject() private val messageCtrl: MessageController by inject() private var fileLocation: String = "" @@ -37,6 +39,7 @@ object FileService: Component() { statsCtrl.loadFromSlot(slot) relicsCtrl.loadFromSlot(slot) + equipmentCtrl.loadFromSlot(slot) } catch (e: Exception) { println(e) @@ -51,6 +54,7 @@ object FileService: Component() { statsCtrl.writeToSlot(slot) relicsCtrl.writeToSlot(slot) + equipmentCtrl.writeToSlot(slot) /* val file: File = when (targetFile) { diff --git a/src/main/kotlin/com/grindaga/crissaegrim/views/MainView.kt b/src/main/kotlin/com/grindaga/crissaegrim/views/MainView.kt index f6683ee..b3a4787 100644 --- a/src/main/kotlin/com/grindaga/crissaegrim/views/MainView.kt +++ b/src/main/kotlin/com/grindaga/crissaegrim/views/MainView.kt @@ -5,7 +5,10 @@ import tornadofx.* class MainView : View("Crissaegrim") { override val root = borderpane { top(MenuBarView::class) - center(StatsView::class) + //center(StatsEditorView::class) + center(EquipmentEditorView::class) + //center(RoomView::class) + //center(StatsView::class) bottom(FooterView::class) } }