extends NPC var meowDelay = 0 func _ready(): MessageManager.messageSent.connect(messageSpoken) dialogueResource = load("res://NPCs/Beach/Ambrose/Ambrose.dialogue") pronouns = "he/they" func _process(delta): if meowDelay > 0: meowDelay -= delta func messageSpoken(message:String): if meowDelay > 0: return if GameVariables.player.global_position.distance_to(global_position) > 900: return var responseMessages = ["you're a cute kitty", "your a cute kitty", "cute kitty", "meow"] message = message.to_lower().strip_edges() for responseMessage in responseMessages: if message.contains(responseMessage): meowDelay = 0.5 MessageManager.addMessage("meow :3", self, "Ambrose", Color.YELLOW) break func notes_check(): if !note_check_1(): return false if !note_check_2(): return false if !note_check_3(): return false return true func note_check_1(): if InventoryManager.get_item_count_by_name("Basket Plan 1", "keyItems") > 0: return true return false func note_check_2(): if InventoryManager.get_item_count_by_name("Basket Plan 2", "keyItems") > 0: return true return false func note_check_3(): if InventoryManager.get_item_count_by_name("Basket Plan 3", "keyItems") > 0: return true return false func rules_check(): if !basket_rule_check_1(): return false if !basket_rule_check_2(): return false if !basket_rule_check_3(): return false return true #Rule 1: Sort the baskets from highest to lowest edibility, left to right then top to bottom func basket_rule_check_1(): var baskets = get_basket_items() var highest = 500000 for basket in baskets: if basket == null: continue if basket.get_edibility() > highest: return false else: highest = basket.get_edibility() return true #Rule 2: The top row baskets must be edible and the bottom row must be inedible func basket_rule_check_2(): var baskets = get_basket_items() var index = 0 for basket in baskets: if basket == null: continue if index <= 2: if basket.get_edibility() < 50: return false else: if basket.get_edibility() >= 50: return false index += 1 return true #Rule 3: One collumn must be very red, one collumn very green, and one collumn very blue func basket_rule_check_3(): var baskets = get_basket_items() var colorsLeft = ["red", "green", "blue"] var collumnOneColor = get_main_color(baskets[0]) if collumnOneColor == "none": return false if get_main_color(baskets[3]) != collumnOneColor: return false colorsLeft.erase(collumnOneColor) var collumnTwoColor = get_main_color(baskets[1]) if collumnTwoColor == "none" or !(collumnTwoColor in colorsLeft): return false if get_main_color(baskets[4]) != collumnTwoColor: return false colorsLeft.erase(collumnTwoColor) var collumnThreeColor = get_main_color(baskets[2]) if collumnThreeColor == "none" or !(collumnThreeColor in colorsLeft): return false if get_main_color(baskets[5]) != collumnThreeColor: return false return true func get_main_color(basket:Item): if basket == null: return "none" var color:Color = basket.get_average_color() if color.r > color.g and color.r > color.b: return red_check(color) elif color.g > color.r and color.g > color.b: return green_check(color) elif color.b > color.r and color.b > color.g: return blue_check(color) else: return "none" func red_check(color:Color): var otherColor = color.g + color.b var red = color.r if color.g > 0.2: return "none" if red <= 0.156: return "none" if red <= 0.25: if otherColor <= 0.06: return "red" else: return "none" if red <= 0.39: if otherColor <= 0.12: return "red" else: return "none" if red <= 0.58: if color.g <= 0.20 and color.b <= 0.20: return "red" else: return "none" if otherColor <= 0.36: return "red" else: return "none" func green_check(color:Color): var otherColor = color.r + color.b var green = color.g if green <= 0.156: return "none" if otherColor < green + 0.2: return "green" else: return "none" func blue_check(color:Color): var red = color.r var blue = color.b if blue <= 0.156: return "none" if red <= float(blue/float(2.5)): return "blue" else: return "none" func get_basket_items(): var basketInvNames = ["BeachBasket1Basket", "BeachBasket2Basket", "BeachBasket3Basket", "BeachBasket4Basket", "BeachBasket5Basket", "BeachBasket6Basket"] var baskets = [] for basketInvName in basketInvNames: var basketHoldingInv = InventoryManager.get_inventory(basketInvName) if basketHoldingInv.items.size() > 0: baskets.append(basketHoldingInv.items[0]) else: baskets.append(null) return baskets