It's Cow Game! Version 2.04!
This commit is contained in:
commit
a9e1ed9ddd
3148 changed files with 95332 additions and 0 deletions
72
ItemGeneration/AshGenerator.gd
Normal file
72
ItemGeneration/AshGenerator.gd
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
extends RefCounted
|
||||
|
||||
class_name AshGenerator
|
||||
|
||||
static func generate_ash(item:Item):
|
||||
var tentativeItemOverride = check_for_overrides(item)
|
||||
if tentativeItemOverride != null:
|
||||
return tentativeItemOverride
|
||||
|
||||
var baseCheckedItem = ItemGenerationUtils.base_item_check(item)
|
||||
baseCheckedItem.itemModifications = item.itemModifications.duplicate(true)
|
||||
if Item.modifications.Knotted in baseCheckedItem.itemModifications:
|
||||
baseCheckedItem.itemModifications.erase(Item.modifications.Knotted)
|
||||
|
||||
return generate_standard_ash_item(baseCheckedItem)
|
||||
|
||||
static func check_for_overrides(item):
|
||||
var newItem = null
|
||||
|
||||
if item.get_name(false) == "Sugar":
|
||||
newItem = load("res://Items/Foods/Snack/Caramel.gd").new()
|
||||
if item.get_name(false) == "Ketchup":
|
||||
newItem = load("res://Items/Foods/Condiments/BBQSauce.gd").new()
|
||||
if item.get_name(false) == "Old Ketchup":
|
||||
newItem = load("res://Items/Foods/Condiments/OldBBQSauce.gd").new()
|
||||
if item.get_name(false) == "Corn":
|
||||
newItem = load("res://Items/Foods/Snack/Popcorn.gd").new()
|
||||
if item.get_name(false) == "Sand":
|
||||
newItem = load("res://Items/Glass/Glass.gd").new()
|
||||
if item.get_name(false) == "Worm on a String":
|
||||
newItem = item
|
||||
if item.get_name(false) == "Basket on a String":
|
||||
newItem = item
|
||||
|
||||
if newItem != null:
|
||||
newItem.itemModifications = item.itemModifications.duplicate(true)
|
||||
if Item.modifications.Knotted in newItem.itemModifications:
|
||||
newItem.itemModifications.erase(Item.modifications.Knotted)
|
||||
|
||||
return newItem
|
||||
|
||||
static func generate_standard_ash_item(item):
|
||||
var ashItem = Item.new()
|
||||
ashItem.itemName = item.get_name(false) + " Ash"
|
||||
ashItem.itemDescription = "The ashes of a " + item.get_name(false) + "."
|
||||
|
||||
ashItem.value = 1
|
||||
ashItem.weight = 0.01
|
||||
|
||||
ashItem.hardness = 2
|
||||
ashItem.edibility = item.edibility - 60
|
||||
if ashItem.edibility < 0:
|
||||
ashItem.edibility = 0
|
||||
|
||||
ashItem.basketPower = 1
|
||||
ashItem.basketabilityDifficulty = 99
|
||||
|
||||
ashItem.flammability = 2
|
||||
ashItem.itemTypes.append(Item.types.Ash)
|
||||
|
||||
ashItem.itemModifications = item.itemModifications.duplicate(true)
|
||||
|
||||
var itemSprite = item.get_sprite(false)
|
||||
var averageColor = SpriteGeneration.get_average_color(itemSprite.get_image())
|
||||
|
||||
var defaultAshSprite = load("res://Items/Ash/Ash.png")
|
||||
var ashImage = SpriteGeneration.color_multipy_image(defaultAshSprite.get_image(), averageColor)
|
||||
var ashSprite = ImageTexture.new()
|
||||
ashSprite = ImageTexture.create_from_image(ashImage)
|
||||
ashItem.itemSprite = ashSprite
|
||||
|
||||
return ashItem
|
||||
62
ItemGeneration/BasketGenerator.gd
Normal file
62
ItemGeneration/BasketGenerator.gd
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
extends RefCounted
|
||||
|
||||
class_name BasketGenerator
|
||||
|
||||
static func generate_basket(item:Item, justGetName:bool = false):
|
||||
var tentativeItemOverride = check_for_overrides(item)
|
||||
if tentativeItemOverride != null:
|
||||
return tentativeItemOverride
|
||||
|
||||
var baseCheckedItem = ItemGenerationUtils.base_item_check(item)
|
||||
baseCheckedItem.itemModifications = item.itemModifications.duplicate(true)
|
||||
if Item.modifications.Knotted in baseCheckedItem.itemModifications:
|
||||
baseCheckedItem.itemModifications.erase(Item.modifications.Knotted)
|
||||
|
||||
return generate_standard_basket_item(baseCheckedItem, justGetName)
|
||||
|
||||
static func check_for_overrides(item):
|
||||
var newItem = null
|
||||
|
||||
if item.get_name(false) == "Worm on a String":
|
||||
newItem = load("res://Items/Toys/WormOnAString/BasketOnAString.gd").new()
|
||||
if item.get_name(false) == "Basket on a String":
|
||||
newItem = load("res://Items/Toys/WormOnAString/WormOnAString.gd").new()
|
||||
|
||||
if newItem != null:
|
||||
newItem.itemModifications = item.itemModifications.duplicate(true)
|
||||
if Item.modifications.Knotted in newItem.itemModifications:
|
||||
newItem.itemModifications.erase(Item.modifications.Knotted)
|
||||
|
||||
return newItem
|
||||
|
||||
static func generate_standard_basket_item(item, returnName:bool = false):
|
||||
if returnName:
|
||||
return item.get_name(false) + " Basket"
|
||||
var basketItem = Item.new()
|
||||
basketItem.itemName = item.get_name(false) + " Basket"
|
||||
basketItem.itemDescription = "A basket made from a " + item.get_name(false) + "."
|
||||
|
||||
basketItem.value = item.value + 3
|
||||
basketItem.weight = item.weight
|
||||
|
||||
basketItem.hardness = item.hardness
|
||||
basketItem.edibility = item.edibility - 5
|
||||
|
||||
basketItem.basketPower = item.basketPower
|
||||
basketItem.basketabilityDifficulty = 99
|
||||
|
||||
basketItem.flammability = item.flammability
|
||||
basketItem.itemTypes.append(Item.types.Basket)
|
||||
|
||||
basketItem.itemModifications = item.itemModifications.duplicate(true)
|
||||
|
||||
var itemSprite = item.get_sprite(false)
|
||||
var averageColor = SpriteGeneration.get_average_color(itemSprite.get_image())
|
||||
|
||||
var defaultBasketSprite = load("res://Items/Basket/BaseItem/Basket.png")
|
||||
var basketImage = SpriteGeneration.color_multipy_image(defaultBasketSprite.get_image(), averageColor)
|
||||
var basketSprite = ImageTexture.new()
|
||||
basketSprite = ImageTexture.create_from_image(basketImage)
|
||||
basketItem.itemSprite = basketSprite
|
||||
|
||||
return basketItem
|
||||
40
ItemGeneration/BoneGenerator.gd
Normal file
40
ItemGeneration/BoneGenerator.gd
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
extends RefCounted
|
||||
|
||||
class_name BoneGenerator
|
||||
|
||||
const boneClasses = ["res://Items/Natural/Bones/CrystalBone.gd",
|
||||
"res://Items/Natural/Bones/DirtBone.gd",
|
||||
"res://Items/Natural/Bones/HauntedBone.gd",
|
||||
"res://Items/Natural/Bones/LicoriceBone.gd",
|
||||
"res://Items/Natural/Bones/ParallelogramBone.gd",
|
||||
"res://Items/Natural/Bones/PretzelBone.gd",
|
||||
"res://Items/Natural/Bones/RedbyBone.gd",
|
||||
"res://Items/Natural/Bones/RexBone.gd",
|
||||
"res://Items/Natural/Bones/RockBone.gd",
|
||||
"res://Items/Natural/Bones/SquareBone.gd",
|
||||
"res://Items/Natural/Bones/ZucchiniBone.gd"]
|
||||
|
||||
const boneOdds = [2, 20, 10, 10, 4, 10, 2, 1, 20, 10, 10]
|
||||
const boneXpRewards = [320, 4, 70, 24, 44, 9, 435, 1500, 6, 40, 38]
|
||||
|
||||
static func get_a_bone():
|
||||
var rng = RandomNumberGenerator.new()
|
||||
var rngResult = rng.randi_range(1, 99)
|
||||
|
||||
var chancesChecked = 0
|
||||
for boneIndex in range(boneOdds.size()):
|
||||
var currentBoneChance = boneOdds[boneIndex]
|
||||
chancesChecked += currentBoneChance
|
||||
if chancesChecked >= rngResult:
|
||||
var boneToGenerate = load(boneClasses[boneIndex]).new()
|
||||
return boneToGenerate
|
||||
|
||||
static func get_xp_reward_for_bone(bone):
|
||||
var bonePath = bone.get_script().resource_path
|
||||
for i in range(boneClasses.size()):
|
||||
var currentPath = boneClasses[i]
|
||||
if bonePath == currentPath:
|
||||
return boneXpRewards[i]
|
||||
|
||||
|
||||
|
||||
63
ItemGeneration/CandyGenerator.gd
Normal file
63
ItemGeneration/CandyGenerator.gd
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
extends RefCounted
|
||||
|
||||
class_name CandyGenerator
|
||||
|
||||
static func generate_candy(item:Item):
|
||||
var tentativeItemOverride = check_for_overrides(item)
|
||||
if tentativeItemOverride != null:
|
||||
return tentativeItemOverride
|
||||
|
||||
return generate_standard_candy_item(item)
|
||||
|
||||
static func check_for_overrides(item):
|
||||
var newItem = null
|
||||
|
||||
if newItem != null:
|
||||
newItem.itemModifications = item.itemModifications.duplicate(true)
|
||||
if Item.modifications.Knotted in newItem.itemModifications:
|
||||
newItem.itemModifications.erase(Item.modifications.Knotted)
|
||||
|
||||
return newItem
|
||||
|
||||
static func generate_standard_candy_item(item:Item):
|
||||
var candyItem = Item.new()
|
||||
|
||||
var itemNameWords = item.get_name(false).split(" ")
|
||||
var itemName = ""
|
||||
var itemWordIndex = 0
|
||||
while itemWordIndex < itemNameWords.size():
|
||||
var currentWord = itemNameWords[itemWordIndex]
|
||||
if !(itemWordIndex == (itemNameWords.size() - 1) and currentWord == "Juice"):
|
||||
if itemName != "":
|
||||
itemName += " "
|
||||
itemName += currentWord
|
||||
itemWordIndex += 1
|
||||
|
||||
candyItem.itemName = itemName + " Candy"
|
||||
candyItem.itemDescription = "Some " + item.get_name(false) + " solidified into a sugary candy."
|
||||
|
||||
candyItem.value = item.value + 5
|
||||
candyItem.weight = item.weight
|
||||
|
||||
candyItem.hardness = item.hardness + 50
|
||||
|
||||
candyItem.edibility = item.edibility + 20
|
||||
|
||||
candyItem.basketPower = 45
|
||||
candyItem.basketabilityDifficulty = 50
|
||||
|
||||
candyItem.flammability = item.flammability * 3
|
||||
candyItem.itemTypes.append(Item.types.Candy)
|
||||
|
||||
candyItem.itemModifications = []
|
||||
|
||||
var itemSprite = item.get_sprite(false)
|
||||
var averageColor = SpriteGeneration.get_average_color(itemSprite.get_image(), [Color.BLACK])
|
||||
|
||||
var defaultCandySprite = load("res://Items/Candy/Candy.png")
|
||||
var candyImage = SpriteGeneration.color_multipy_image(defaultCandySprite.get_image(), averageColor)
|
||||
var candySprite = ImageTexture.new()
|
||||
candySprite = ImageTexture.create_from_image(candyImage)
|
||||
candyItem.itemSprite = candySprite
|
||||
|
||||
return candyItem
|
||||
105
ItemGeneration/ItemDrying.gd
Normal file
105
ItemGeneration/ItemDrying.gd
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
extends RefCounted
|
||||
|
||||
class_name ItemDrying
|
||||
|
||||
const raisinScript = preload("res://Items/Foods/Fruits/Raisin.gd")
|
||||
|
||||
static func dry_inventory_items(inventory:Inventory, amount:int = 1):
|
||||
var amountLeftToDry = amount
|
||||
|
||||
amountLeftToDry = dry_wet_inventory_items(inventory, amountLeftToDry)
|
||||
if amountLeftToDry > 0:
|
||||
amountLeftToDry = dry_other_inventory_items(inventory, amountLeftToDry)
|
||||
|
||||
static func dry_wet_inventory_items(inventory:Inventory, amount:int):
|
||||
var amountLeftToDry = amount
|
||||
|
||||
var pairedInvCopy = inventory.get_item_quantity_pair_array()
|
||||
pairedInvCopy.shuffle()
|
||||
|
||||
var originalInventorySize = pairedInvCopy.size()
|
||||
var i = 0
|
||||
while i < originalInventorySize:
|
||||
var currentItem:Item = pairedInvCopy[i][0]
|
||||
|
||||
if Item.modifications.Wet in currentItem.itemModifications:
|
||||
var newItem = dry_item(currentItem)
|
||||
|
||||
var originalItemQuantity = pairedInvCopy[i][1]
|
||||
var amountDrying = originalItemQuantity
|
||||
if amountDrying > amountLeftToDry:
|
||||
amountDrying = amountLeftToDry
|
||||
|
||||
inventory.remove_item(currentItem, amountDrying)
|
||||
inventory.add_item(newItem, amountDrying)
|
||||
|
||||
amountLeftToDry -= amountDrying
|
||||
if amountLeftToDry <= 0:
|
||||
break
|
||||
|
||||
i += 1
|
||||
|
||||
return amountLeftToDry
|
||||
|
||||
static func dry_other_inventory_items(inventory:Inventory, amount:int):
|
||||
var amountLeftToDry = amount
|
||||
|
||||
var pairedInvCopy = inventory.get_item_quantity_pair_array()
|
||||
pairedInvCopy.shuffle()
|
||||
|
||||
var originalInventorySize = pairedInvCopy.size()
|
||||
var i = 0
|
||||
while i < originalInventorySize:
|
||||
var currentItem:Item = pairedInvCopy[i][0]
|
||||
var newItem = dry_item(currentItem)
|
||||
|
||||
if !newItem.equals(currentItem):
|
||||
var originalItemQuantity = pairedInvCopy[i][1]
|
||||
var amountDrying = originalItemQuantity
|
||||
if amountDrying > amountLeftToDry:
|
||||
amountDrying = amountLeftToDry
|
||||
|
||||
inventory.remove_item(currentItem, amountDrying)
|
||||
inventory.add_item(newItem, amountDrying)
|
||||
|
||||
amountLeftToDry -= amountDrying
|
||||
if amountLeftToDry <= 0:
|
||||
break
|
||||
|
||||
i += 1
|
||||
|
||||
return amountLeftToDry
|
||||
|
||||
static func dry_item(item:Item):
|
||||
var newItem:Item = item.duplicate()
|
||||
if Item.modifications.Wet in newItem.itemModifications:
|
||||
newItem.remove_modification(Item.modifications.Wet)
|
||||
elif newItem.get_name(false) == "Grape":
|
||||
newItem = raisinScript.new()
|
||||
|
||||
return newItem
|
||||
|
||||
static func sun_dry_item(item:Item):
|
||||
var newItem:Item = item.duplicate()
|
||||
if Item.modifications.Wet in newItem.itemModifications:
|
||||
newItem.remove_modification(Item.modifications.Wet)
|
||||
elif Item.types.Juice in newItem.itemTypes:
|
||||
newItem = concentrate_juice(newItem)
|
||||
elif newItem.get_name(false) == "Grape":
|
||||
newItem = raisinScript.new()
|
||||
|
||||
return newItem
|
||||
|
||||
static func concentrate_juice(item:Item):
|
||||
var newItem:Item = item.duplicate()
|
||||
if Item.modifications.Sugared in newItem.itemModifications:
|
||||
newItem = candy_item(newItem)
|
||||
else:
|
||||
newItem.set_modification(Item.modifications.Concentrated)
|
||||
|
||||
return newItem
|
||||
|
||||
static func candy_item(item:Item):
|
||||
var newCandy = CandyGenerator.generate_candy(item)
|
||||
return newCandy
|
||||
|
||||
26
ItemGeneration/ItemGenerationUtils.gd
Normal file
26
ItemGeneration/ItemGenerationUtils.gd
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
extends RefCounted
|
||||
|
||||
class_name ItemGenerationUtils
|
||||
|
||||
const ashScript = preload("res://Items/Ash/Ash.gd")
|
||||
const juiceScript = preload("res://Items/Juice/Juice.gd")
|
||||
const basketScript = preload("res://Items/Basket/BaseItem/Basket.gd")
|
||||
const puppetScript = preload("res://Items/Toys/Puppets/Puppet.gd")
|
||||
const candyScript = preload("res://Items/Candy/Candy.gd")
|
||||
|
||||
static func base_item_check(item):
|
||||
if Item.types.Reformable in item.itemTypes:
|
||||
return item
|
||||
|
||||
if Item.types.Ash in item.itemTypes:
|
||||
return ashScript.new()
|
||||
if Item.types.Juice in item.itemTypes:
|
||||
return juiceScript.new()
|
||||
if Item.types.Basket in item.itemTypes:
|
||||
return basketScript.new()
|
||||
if Item.types.Puppet in item.itemTypes:
|
||||
return puppetScript.new()
|
||||
if Item.types.Candy in item.itemTypes:
|
||||
return candyScript.new()
|
||||
|
||||
return item
|
||||
65
ItemGeneration/ItemSoaking.gd
Normal file
65
ItemGeneration/ItemSoaking.gd
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
extends RefCounted
|
||||
|
||||
class_name ItemSoaking
|
||||
|
||||
const grapeScript = preload("res://Items/Foods/Fruits/Grape.gd")
|
||||
const mudScript = preload("res://Items/Natural/Mud.gd")
|
||||
|
||||
const paperItemNames = ["Love Novel", "Love Tome", "Empty Sugar Packet", "Taxes"]
|
||||
const sugaryPaperItemNames = ["Sugar Packet", "Sugar Stick"]
|
||||
const paperMushScript = preload("res://Items/Paper/PaperMush.gd")
|
||||
|
||||
static func soak_inventory(inventory:Inventory):
|
||||
var totalWetted = 0
|
||||
var originalInventorySize = inventory.items.size()
|
||||
for i in range(originalInventorySize):
|
||||
var currentItemIndex = originalInventorySize - i - 1
|
||||
var currentItem:Item = inventory.items[currentItemIndex]
|
||||
|
||||
var newItem = wet_item(currentItem)
|
||||
if !newItem.equals(currentItem):
|
||||
totalWetted += inventory.quantities[currentItemIndex]
|
||||
inventory.items[currentItemIndex] = newItem
|
||||
for j in range(inventory.items.size()):
|
||||
if inventory.items[j].equals(newItem) and j != currentItemIndex:
|
||||
inventory.quantities[j] += inventory.quantities[currentItemIndex]
|
||||
|
||||
inventory.items.remove_at(currentItemIndex)
|
||||
inventory.quantities.remove_at(currentItemIndex)
|
||||
break
|
||||
|
||||
if totalWetted >= 100:
|
||||
AchievementManager.complete_achievement("Leaky Basket")
|
||||
|
||||
|
||||
static func wet_item(item:Item):
|
||||
var newItem:Item = item.duplicate()
|
||||
var itemName = item.get_name(false)
|
||||
|
||||
var copyModifications = false
|
||||
if Item.modifications.Concentrated in newItem.itemModifications:
|
||||
newItem.remove_modification(Item.modifications.Concentrated)
|
||||
elif itemName == "Raisin":
|
||||
newItem = grapeScript.new()
|
||||
copyModifications = true
|
||||
elif itemName == "Dirt":
|
||||
newItem = mudScript.new()
|
||||
copyModifications = true
|
||||
elif itemName in paperItemNames:
|
||||
newItem = paperMushScript.new()
|
||||
copyModifications = true
|
||||
elif itemName in sugaryPaperItemNames:
|
||||
newItem = paperMushScript.new()
|
||||
newItem.set_modification(Item.modifications.Sugared)
|
||||
copyModifications = true
|
||||
elif !Item.modifications.Wet in newItem.itemModifications:
|
||||
newItem.set_modification(Item.modifications.Wet)
|
||||
|
||||
if Item.modifications.Grubby in newItem.itemModifications:
|
||||
newItem.remove_modification(Item.modifications.Grubby)
|
||||
|
||||
if copyModifications:
|
||||
for modification in item.itemModifications:
|
||||
newItem.set_modification(modification)
|
||||
|
||||
return newItem
|
||||
87
ItemGeneration/JuiceGenerator.gd
Normal file
87
ItemGeneration/JuiceGenerator.gd
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
extends RefCounted
|
||||
|
||||
class_name JuiceGenerator
|
||||
|
||||
static func generate_juice(item:Item):
|
||||
var tentativeItemOverride = check_for_overrides(item)
|
||||
if tentativeItemOverride != null:
|
||||
return tentativeItemOverride
|
||||
|
||||
var checkedItem = ItemGenerationUtils.base_item_check(item)
|
||||
checkedItem.itemModifications = item.itemModifications.duplicate(true)
|
||||
|
||||
if Item.modifications.Knotted in checkedItem.itemModifications:
|
||||
checkedItem.itemModifications.erase(Item.modifications.Knotted)
|
||||
|
||||
return generate_standard_juice_item(checkedItem)
|
||||
|
||||
static func check_for_overrides(item):
|
||||
var newItem = null
|
||||
|
||||
if item.get_name(false) == "Bouncy Ball":
|
||||
newItem = load("res://Items/Artificial/Goo/BouncyGoo.gd").new()
|
||||
elif item.get_name(false) == "Mustard Seed":
|
||||
newItem = load("res://Items/Foods/Condiments/Mustard.gd").new()
|
||||
elif item.get_name(false) == "Maple Tea Bag":
|
||||
newItem = load("res://Items/Foods/Liquids/MapleTea.gd").new()
|
||||
elif item.get_name(false) == "Sticky Hand":
|
||||
newItem = load("res://Items/Artificial/Goo/StickyGoo.gd").new()
|
||||
elif item.itemName == "Sugar Packet":
|
||||
newItem = load("res://Items/Foods/Snack/Sugar.gd").new()
|
||||
elif item.get_name(false) == "Ketchup Packet":
|
||||
newItem = load("res://Items/Foods/Condiments/OldKetchup.gd").new()
|
||||
elif item.get_name(false) == "Relish Packet":
|
||||
newItem = load("res://Items/Foods/Condiments/FakeRelish.gd").new()
|
||||
elif item.get_name(false) == "Wustard Packet":
|
||||
newItem = load("res://Items/Foods/Condiments/Wustard.gd").new()
|
||||
elif item.get_name(false) == "Key Packet":
|
||||
newItem = load("res://Items/Artificial/Products/BrassKey.gd").new()
|
||||
elif item.get_name(false) == "Silica Gel Packet":
|
||||
newItem = load("res://Items/Artificial/Products/SilicaGel.gd").new()
|
||||
elif item.get_name(false) == "Tomato" and Item.modifications.Sugared in item.itemModifications:
|
||||
newItem = load("res://Items/Foods/Condiments/Ketchup.gd").new()
|
||||
return newItem
|
||||
elif item.get_name(false) == "Worm on a String":
|
||||
newItem = item
|
||||
elif item.get_name(false) == "Basket on a String":
|
||||
newItem = item
|
||||
|
||||
if newItem != null:
|
||||
newItem.itemModifications = item.itemModifications.duplicate(true)
|
||||
if Item.modifications.Knotted in newItem.itemModifications:
|
||||
newItem.itemModifications.erase(Item.modifications.Knotted)
|
||||
|
||||
return newItem
|
||||
|
||||
static func generate_standard_juice_item(item:Item):
|
||||
var juiceItem = Item.new()
|
||||
juiceItem.itemName = item.get_name(false) + " Juice"
|
||||
juiceItem.itemDescription = "The juice of a " + item.get_name(false) + "."
|
||||
|
||||
juiceItem.value = item.value
|
||||
juiceItem.weight = item.weight
|
||||
|
||||
juiceItem.hardness = (item.hardness - 20)/6
|
||||
if juiceItem.hardness < 0:
|
||||
juiceItem.hardness = 0
|
||||
|
||||
juiceItem.edibility = item.edibility
|
||||
|
||||
juiceItem.basketPower = 90
|
||||
juiceItem.basketabilityDifficulty = 99
|
||||
|
||||
juiceItem.flammability = (item.flammability)/6
|
||||
juiceItem.itemTypes.append(Item.types.Juice)
|
||||
|
||||
juiceItem.itemModifications = item.itemModifications.duplicate(true)
|
||||
|
||||
var itemSprite = item.get_sprite(false)
|
||||
var averageColor = SpriteGeneration.get_average_color(itemSprite.get_image())
|
||||
|
||||
var defaultJuiceSprite = load("res://Items/Juice/Juice.png")
|
||||
var juiceImage = SpriteGeneration.color_multipy_image(defaultJuiceSprite.get_image(), averageColor)
|
||||
var juiceSprite = ImageTexture.new()
|
||||
juiceSprite = ImageTexture.create_from_image(juiceImage)
|
||||
juiceItem.itemSprite = juiceSprite
|
||||
|
||||
return juiceItem
|
||||
28
ItemGeneration/MushroomGenerator.gd
Normal file
28
ItemGeneration/MushroomGenerator.gd
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
extends RefCounted
|
||||
|
||||
class_name MushroomGenerator
|
||||
|
||||
const mushroomClasses = ["res://Items/Fungi/AmethystDeceiver.gd",
|
||||
"res://Items/Fungi/BluePinkGill.gd",
|
||||
"res://Items/Fungi/HairyCurtainCrust.gd",
|
||||
"res://Items/Fungi/LionsMane.gd",
|
||||
"res://Items/Fungi/Mycenachlorophos.gd",
|
||||
"res://Items/Fungi/VeiledLady.gd",
|
||||
"res://Items/Fungi/WolfsMilkSlimeMould.gd"]
|
||||
|
||||
const mushroomOdds = [20, 20, 10, 30, 20, 5, 5]
|
||||
|
||||
static func get_a_mushroom():
|
||||
var rng = RandomNumberGenerator.new()
|
||||
var rngResult = rng.randi_range(1, 100)
|
||||
|
||||
var chancesChecked = 0
|
||||
for mushroomIndex in range(mushroomOdds.size()):
|
||||
var currentMushroomChance = mushroomOdds[mushroomIndex]
|
||||
chancesChecked += currentMushroomChance
|
||||
if chancesChecked >= rngResult:
|
||||
var mushroomToGenerate = load(mushroomClasses[mushroomIndex]).new()
|
||||
return mushroomToGenerate
|
||||
|
||||
|
||||
|
||||
93
ItemGeneration/SpriteGeneration.gd
Normal file
93
ItemGeneration/SpriteGeneration.gd
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
extends RefCounted
|
||||
|
||||
class_name SpriteGeneration
|
||||
|
||||
static func color_sprinkle_image(image:Image, color:Color, ignoreColors:Array[Color] = []):
|
||||
var imageWidth = image.get_width()
|
||||
var imageHeight = image.get_height()
|
||||
|
||||
var sprinkleOffsets = [5, 6, 3, 4, 6, 4, 5, 3, 2, 4, 4, 6, 3, 2, 4]
|
||||
var sprinkleOffsetIndex = 0
|
||||
var countToSprinkle = 3
|
||||
for x in range(imageWidth):
|
||||
for y in range(imageHeight):
|
||||
var currentColor = image.get_pixel(x, y)
|
||||
if currentColor.a > 0 and !(currentColor in ignoreColors):
|
||||
countToSprinkle -= 1
|
||||
if countToSprinkle <= 0:
|
||||
image.set_pixel(x, y, color)
|
||||
countToSprinkle = sprinkleOffsets[sprinkleOffsetIndex]
|
||||
|
||||
sprinkleOffsetIndex += 1
|
||||
if sprinkleOffsetIndex >= sprinkleOffsets.size():
|
||||
sprinkleOffsetIndex = 0
|
||||
|
||||
return image
|
||||
|
||||
static func color_multipy_image(image:Image, color:Color):
|
||||
var imageWidth = image.get_width()
|
||||
var imageHeight = image.get_height()
|
||||
|
||||
for x in range(imageWidth):
|
||||
for y in range(imageHeight):
|
||||
var currentColor = image.get_pixel(x, y)
|
||||
if currentColor.a > 0:
|
||||
image.set_pixel(x, y, currentColor * color)
|
||||
|
||||
return image
|
||||
|
||||
static func color_blend_image(image:Image, color:Color):
|
||||
var imageWidth = image.get_width()
|
||||
var imageHeight = image.get_height()
|
||||
|
||||
for x in range(imageWidth):
|
||||
for y in range(imageHeight):
|
||||
var currentColor = image.get_pixel(x, y)
|
||||
if currentColor.a > 0:
|
||||
image.set_pixel(x, y, currentColor.blend(color))
|
||||
|
||||
return image
|
||||
|
||||
static func add_lower_outline(image:Image, color:Color, pixelCount:int = 3):
|
||||
var imageWidth = image.get_width()
|
||||
var imageHeight = image.get_height()
|
||||
|
||||
var outlineLeft = 0
|
||||
for x in range(imageWidth):
|
||||
outlineLeft = 0
|
||||
for y in range(imageHeight):
|
||||
var currentColor = image.get_pixel(x, y)
|
||||
if currentColor.a == 0:
|
||||
if outlineLeft > 0:
|
||||
image.set_pixel(x, y, color)
|
||||
outlineLeft -= 1
|
||||
else:
|
||||
outlineLeft = pixelCount
|
||||
|
||||
return image
|
||||
|
||||
static func get_average_color(image:Image, ignoreColors:Array[Color] = []):
|
||||
var totalRed = 0
|
||||
var totalGreen = 0
|
||||
var totalBlue = 0
|
||||
|
||||
var imageWidth = image.get_width()
|
||||
var imageHeight = image.get_height()
|
||||
|
||||
var pixelsChecked = 0
|
||||
for x in range(imageWidth):
|
||||
for y in range(imageHeight):
|
||||
var currentColor = image.get_pixel(x, y)
|
||||
if currentColor.a > 0 and !(currentColor in ignoreColors):
|
||||
pixelsChecked += 1
|
||||
|
||||
totalRed += currentColor.r
|
||||
totalGreen += currentColor.g
|
||||
totalBlue += currentColor.b
|
||||
|
||||
if pixelsChecked > 0:
|
||||
totalRed = totalRed / pixelsChecked
|
||||
totalGreen = totalGreen / pixelsChecked
|
||||
totalBlue = totalBlue / pixelsChecked
|
||||
|
||||
return Color(totalRed, totalGreen, totalBlue)
|
||||
Loading…
Add table
Add a link
Reference in a new issue