From a0335fa0702e0b854cff9699e18a22c4625d91b0 Mon Sep 17 00:00:00 2001 From: UndeadMaelys Date: Tue, 5 Jan 2021 18:16:17 +0100 Subject: [PATCH] - ADDED TO_DO - ADDED COLLECTIBLE_YALE_HORNS - now Sive's 2nd starter item. - REORDERED CODE SO ITS PRETTY :D - STARTING CODING FOUNDATION TO FAMILIARS - STARTING CODING ARIEL'S SUCCUBUS CHARM --- content/entities2.xml | 64 ++- content/items.xml | 40 +- content/players.xml | 2 +- main.lua | 493 ++++++++++++------ resources/gfx/003.096_succubus.anm2 | 35 ++ resources/gfx/familiars/baby_yari.png | Bin 0 -> 1790 bytes .../familiar_shooters_02_demonbaby.png | Bin 0 -> 1859 bytes resources/gfx/familiars/motheroftwo_yari.anm2 | 201 +++++++ .../gfx/items/collectibles/drake_mark.png | Bin 392 -> 0 bytes .../gfx/items/collectibles/mommy_of_two.png | Bin 824 -> 824 bytes .../gfx/items/collectibles/succubus_charm.png | Bin 0 -> 720 bytes .../gfx/items/collectibles/yale_horns.png | Bin 0 -> 345 bytes 12 files changed, 645 insertions(+), 190 deletions(-) create mode 100644 resources/gfx/003.096_succubus.anm2 create mode 100644 resources/gfx/familiars/baby_yari.png create mode 100644 resources/gfx/familiars/familiar_shooters_02_demonbaby.png create mode 100644 resources/gfx/familiars/motheroftwo_yari.anm2 delete mode 100644 resources/gfx/items/collectibles/drake_mark.png create mode 100644 resources/gfx/items/collectibles/succubus_charm.png create mode 100644 resources/gfx/items/collectibles/yale_horns.png diff --git a/content/entities2.xml b/content/entities2.xml index cb60c68..0a4dd13 100644 --- a/content/entities2.xml +++ b/content/entities2.xml @@ -11,22 +11,50 @@ - Put the `collisionDamage` value to "0" if you want the entity to be harmless when directly hitting the player. --> - - - + + + + + + + + + + diff --git a/content/items.xml b/content/items.xml index 8a42481..2b81332 100644 --- a/content/items.xml +++ b/content/items.xml @@ -53,46 +53,50 @@ --> + + - - - + + + + + - - - diff --git a/content/players.xml b/content/players.xml index 9f3af83..7f092a6 100644 --- a/content/players.xml +++ b/content/players.xml @@ -11,7 +11,7 @@ skin="players/01_Ariel_Skin.png" black="4" pink="2" keys="1" - + canAttack="false" nameimage="name/01_Ariel.png" portrait="portrait/01_Ariel.png" bigportrait="bigportrait/01_Ariel.png" diff --git a/main.lua b/main.lua index a6e65fc..626ba54 100644 --- a/main.lua +++ b/main.lua @@ -1,164 +1,351 @@ - local Lore = RegisterMod( "thecreativelore", 1 ); - --[[ USEFUL FUNCTIONS ]]-- +local Lore = RegisterMod( "thecreativelore", 1 ); +local game = Game() +local Room = Room - local Room = Room +-- TO_DO[ +-- +-- ITEMS[ +-- +-- * Add items in pools +-- +-- [Yale Horns]: +-- * Make tear inherit common tear properties smh +-- * Make sure tear properly scales with player.ShotSpeed +-- +-- [Mommy of Two]: +-- * Baby Ariel and Baby Yari behaviour +-- * Baby Ariel whole sprite, finish Yari's one too. +-- * Code in Best Friends Forever Interaction!! +-- +-- [Drake Soul]: +-- * Make effect happen; < 3 hp -> DMG MULT = 1.25, RANGE += 20 +-- * Decide if go with costume as Noe suggested (horns again?) or better +-- do a phrase like Whore of Babylon. +-- * I like the second better. +-- +-- [Bronze Wings]: +-- * Get the costume off Nerielle and make it this item instead. +-- * Make that when u get the item, player can fly. +-- * This is really that simple. +-- +-- [Scaly Egg]: +-- * Make Lil Drake functional +-- * SPRITE Lil Drake +-- * Code in Mommy of Two synergy. +-- * Code in Best Friends Forever Interaction!! +-- +-- [Bronze Scale]: +-- * Code in the fire resistance +-- * Costume spriting +-- +-- [Zappy Breath]: +-- * Get Actives Working on this +-- * Fire Tech X shot somehow +-- +-- [Dragon Mark]: +-- * Sprite this somehow!!?? +-- * Think of a better costume. Anything than horns honestly, thats for Nerielle. +-- * Give tears burning effect +-- * +1 DMG +-- * Soul heart :D +-- +-- [Succubus Charm] +-- * Make it more fun and engaging +-- * Make the poison overtime work/check if its the charmed anim over it +-- * Remove charm if ToPoison +-- +-- [TRANSFORMATION: True Dragon] +-- * Get this Working +-- * Add effects +-- ] +-- +-- PLAYERS[ +-- [Ariel]: +-- * Get Ariel a fun mechanic +-- * Get costume properly layered +-- * Fix Ariel Shooting anim -- broken +-- +-- [Nerielle]: +-- * Fix Nerielle Shooting anim -- broken. +-- * Get Nerielle her items. +-- +-- [Yari] +-- * Give mom kisses +-- ] +-- ] - local function FindClosestEnemy( position, distance, validator ) - local closestDistance = distance or 9999 - local closestEnemy = nil - local enemies = Isaac.FindInRadius( position, closestDistance, EntityPartition.ENEMY ) - for k,enemy in ipairs(enemies) do - if enemy:IsActiveEnemy() == true and enemy:IsVulnerableEnemy() == true and enemy:HasEntityFlags( EntityFlag.FLAG_FRIENDLY ) == false then - local distance = (position - enemy.Position):Length() - if distance < closestDistance then - if validator == nil or validator(enemy) == true then - closestEnemy = enemy - closestDistance = distance - end - end - end + + +--[[ USEFUL FUNCTIONS ]]-- +local function SpawnFollower(Type, player) + return Isaac.Spawn(EntityType.ENTITY_FAMILIAR, Type, 0, player.Position, Vector(0,0), player):ToFamiliar() +end + +local function RealignFamiliars() + local Caboose = nil + for _, entity in pairs(Isaac.GetRoomEntities()) do + if entity.Type == EntityType.ENTITY_FAMILIAR and entity.Child == nil then + Caboose = entity + else + if Caboose.FrameCount < entity.FrameCount then + Caboose.Parent = entity + entity.Child = Caboose + else + Caboose.Child = entity + entity.Parent = Caboose end - return closestEnemy + end end +end - --[[ ITEMS ]]-- - ITEM_BRONZE_SCALE = Isaac.GetItemIdByName("Bronze Scale Collar") - ITEM_SCALY_EGG = Isaac.GetItemIdByName("Scaly Egg") - ITEM_ZAPPY_BREATH = Isaac.GetItemIdByName("Zappy Breath!") - ITEM_DRAGON_MARK = Isaac.GetItemIdByName("Dragon Mark") - --[[ CHARACTERS ]]-- - -- 01_Ariel - local ARIEL_NAME = "01_Ariel"; - local ARIEL_TYPE = Isaac.GetPlayerTypeByName(ARIEL_NAME); - local ARIEL_STATS = { - MoveSpeedNaturalBonus = 0.10, - MoveSpeedNaturalMultiplier = 0.9, - DamageNaturalMultiplier = 0.70, - ShotSpeedNaturalMultiplier = 0.8, - MaxFireDelayNaturalMultiplier = 1.0, - MaxFireDelayNaturalExponent = 0.9, - TearHeightBonus = 12, - }; - local ARIEL_HEAD = Isaac.GetCostumeIdByPath("gfx/characters/players/01_Ariel_Head.anm2") - - - -- 02_Nerielle - local NERIELLE_NAME = "02_Nerielle"; - local NERIELLE_TYPE = Isaac.GetPlayerTypeByName(NERIELLE_NAME); - local NERIELLE_STATS = { - MoveSpeedNaturalBonus = 0.10, - MoveSpeedNaturalMultiplier = 0.9, - DamageNaturalMultiplier = 0.70, - ShotSpeedNaturalMultiplier = 0.8, - MaxFireDelayNaturalMultiplier = 1.0, - MaxFireDelayNaturalExponent = 0.9, - TearHeightBonus = 12, - }; - local NERIELLE_HEAD = Isaac.GetCostumeIdByPath("gfx/characters/players/02_Nerielle_Head.anm2") - - -- 03_Sive - local SIVE_NAME = "03_Sive"; - local SIVE_TYPE = Isaac.GetPlayerTypeByName(SIVE_NAME); - local SIVE_STATS = { - MoveSpeedNaturalBonus = 0.10, - MoveSpeedNaturalMultiplier = 0.9, - DamageNaturalMultiplier = 0.70, - ShotSpeedNaturalMultiplier = 0.8, - MaxFireDelayNaturalMultiplier = 1.0, - MaxFireDelayNaturalExponent = 0.9, - TearHeightBonus = 12, - }; - local SIVE_HEAD = Isaac.GetCostumeIdByPath("gfx/characters/players/03_Sive_Head.anm2") - - function Lore:PostPlayerInit( player ) - if player:GetPlayerType() == ARIEL_TYPE then - player:AddNullCostume( ARIEL_HEAD ); - end - if player:GetPlayerType() == NERIELLE_TYPE then - player:AddNullCostume( NERIELLE_HEAD ); - end - if player:GetPlayerType() == SIVE_TYPE then - player:AddNullCostume( SIVE_HEAD ); - end - end - Lore:AddCallback( ModCallbacks.MC_POST_PLAYER_INIT, Lore.PostPlayerInit ); - - function Lore:PlayerUpdate( player ) - -- Collectibles! - -- if player:HasCollectible() - - -- Characters! - if player:GetPlayerType() == ARIEL_TYPE then - ToCharm = FindClosestEnemy(player.Position, 100) - if ToCharm ~= nil - then ToCharm:AddCharmed(30) - end - --[[ If only one enemy left, bump up the damage! - if Room:GetAliveEnemiesCount() == 1 then - player:AnimateHappy() - end]] - end - if player:GetPlayerType() == NERIELLE_TYPE then - - end - end - Lore:AddCallback( ModCallbacks.MC_POST_PLAYER_UPDATE, Lore.PlayerUpdate ); - - --[[ Stats ]] - function Lore:EvaluateCache( player, cacheFlag ) - local player = Isaac.GetPlayer(0) -- get the player entity - if player:GetPlayerType() == ARIEL_TYPE then - --[[ if cacheFlag == CacheFlag.CACHE_SPEED then - player.MoveSpeed = player.Mññº - moveSpeed * ARIEL_STATS.MoveSpeedNaturalMultiplier + ARIEL_STATS.MoveSpeedNaturalBonus; - elseif cacheFlag == CacheFlag.CACHE_SHOTSPEED then - player.ShotSpeed = player.ShotSpeed * ARIEL_STATS.ShotSpeedNaturalMultiplier; - elseif cacheFlag == CacheFlag.CACHE_DAMAGE then - player.Damage = player.Damage * ARIEL_STATS.DamageNaturalMultiplier; - elseif cacheFlag == CacheFlag.CACHE_FIREDELAY then - player.MaxFireDelay = math.floor( math.max( 1, player.MaxFireDelay * ARIEL_STATS.MaxFireDelayNaturalMultiplier ) ^ ARIEL_STATS.MaxFireDelayNaturalExponent ); - elseif cacheFlag == CacheFlag.CACHE_RANGE then - player.TearHeight = player.TearHeight + ARIEL_STATS.TearHeightBonus; - elseif cacheFlag == CacheFlag.CACHE_TEARCOLOR then - --player.TearColor = GAPPI_COLOR; - --Player.LaserColor = GAPPI_COLOR; - end]] - if cacheFlag == CacheFlag.CACHE_FLYING then - player.CanFly = 1 - end - end - if player:GetPlayerType() == NERIELLE_TYPE then - --[[ if cacheFlag == CacheFlag.CACHE_SPEED then - player.MoveSpeed = player.Mññº - moveSpeed * ARIEL_STATS.MoveSpeedNaturalMultiplier + ARIEL_STATS.MoveSpeedNaturalBonus; - elseif cacheFlag == CacheFlag.CACHE_SHOTSPEED then - player.ShotSpeed = player.ShotSpeed * ARIEL_STATS.ShotSpeedNaturalMultiplier; - elseif cacheFlag == CacheFlag.CACHE_DAMAGE then - player.Damage = player.Damage * ARIEL_STATS.DamageNaturalMultiplier; - elseif cacheFlag == CacheFlag.CACHE_FIREDELAY then - player.MaxFireDelay = math.floor( math.max( 1, player.MaxFireDelay * ARIEL_STATS.MaxFireDelayNaturalMultiplier ) ^ ARIEL_STATS.MaxFireDelayNaturalExponent ); - elseif cacheFlag == CacheFlag.CACHE_RANGE then - player.TearHeight = player.TearHeight + ARIEL_STATS.TearHeightBonus; - elseif cacheFlag == CacheFlag.CACHE_TEARCOLOR then - --player.TearColor = GAPPI_COLOR; - --Player.LaserColor = GAPPI_COLOR; - end]] - if cacheFlag == CacheFlag.CACHE_FLYING then - player.CanFly = 1 - end +local function FindClosestEnemy( position, distance, validator ) + local closestDistance = distance or 9999 + local closestEnemy = nil + local enemies = Isaac.FindInRadius( position, closestDistance, EntityPartition.ENEMY ) + for k,enemy in ipairs(enemies) do + if enemy:IsActiveEnemy() == true and enemy:IsVulnerableEnemy() == true and enemy:HasEntityFlags( EntityFlag.FLAG_FRIENDLY ) == false then + local distance = (position - enemy.Position):Length() + if distance < closestDistance then + if validator == nil or validator(enemy) == true then + closestEnemy = enemy + closestDistance = distance end end - Lore:AddCallback( ModCallbacks.MC_EVALUATE_CACHE, Lore.EvaluateCache ); + end + end + return closestEnemy +end - Lore:AddCallback(ModCallbacks.MC_POST_FIRE_TEAR, function(_, tear) +--[[ DECLARING ITEMS ]]-- - local player = Isaac.GetPlayer(0) -- get the player entity +-- Passive Yale Horns +CollectibleType.COLLECTIBLE_YALE_HORNS = Isaac.GetItemIdByName("Yale Horns") - if player:GetPlayerType() == ARIEL_TYPE then - tear.TearFlags = tear.TearFlags | TearFlags.TEAR_CHARM -- add slowing effect to the tear - end +-- Passive Drake Soul +CollectibleType.COLLECTIBLE_DRAKE_SOUL = Isaac.GetItemIdByName("Drake Soul") - if player:GetPlayerType() == NERIELLE_TYPE then - tear.TearFlags = tear.TearFlags | TearFlags.TEAR_BURN -- add slowing effect to the tear - end - end) +-- Passive Bronze Scale Collar +CollectibleType.COLLECTIBLE_BRONZE_SCALE = Isaac.GetItemIdByName("Bronze Scale Collar") + +-- Passive Dragon Mark +CollectibleType.COLLECTIBLE_DRAGON_MARK = Isaac.GetItemIdByName("Dragon Mark") + +-- Familiar Mommy of Two +CollectibleType.COLLECTIBLE_MOMMY_OF_TWO = Isaac.GetItemIdByName("Mommy of Two") +FamiliarVariant.BABY_ARIEL = Isaac.GetEntityVariantByName("Baby Ariel") +FamiliarVariant.BABY_YARI = Isaac.GetEntityVariantByName("Baby Yari") + +-- Familiar Scaly Egg +CollectibleType.COLLECTIBLE_SCALY_EGG = Isaac.GetItemIdByName("Scaly Egg") +FamiliarVariant.LIL_DRAKE = Isaac.GetEntityVariantByName("Lil Drake") +FamiliarVariant.BABY_NERIELLE = Isaac.GetEntityVariantByName("Baby Nerielle") + +-- Active Zappy Breath +CollectibleType.COLLECTIBLE_ZAPPY_BREATH = Isaac.GetItemIdByName("Zappy Breath!") + +-- Active Succubus Charm +CollectibleType.COLLECTIBLE_SUCCUBUS_CHARM = Isaac.GetItemIdByName("Succubus Charm") + +-- [[ DECLARING CHARACTERS ]] -- +-- 01_Ariel +local ARIEL_NAME = "01_Ariel"; +local ARIEL_TYPE = Isaac.GetPlayerTypeByName(ARIEL_NAME); +local ARIEL_STATS = { + MoveSpeedNaturalBonus = 0.10, + MoveSpeedNaturalMultiplier = 0.9, + DamageNaturalMultiplier = 0.70, + ShotSpeedNaturalMultiplier = 0.8, + MaxFireDelayNaturalMultiplier = 1.0, + MaxFireDelayNaturalExponent = 0.9, + TearHeightBonus = 12, +}; +local ARIEL_HEAD = Isaac.GetCostumeIdByPath("gfx/characters/players/01_Ariel_Head.anm2") + +-- 02_Nerielle +local NERIELLE_NAME = "02_Nerielle"; +local NERIELLE_TYPE = Isaac.GetPlayerTypeByName(NERIELLE_NAME); +local NERIELLE_STATS = { + MoveSpeedNaturalBonus = 0.10, + MoveSpeedNaturalMultiplier = 0.9, + DamageNaturalMultiplier = 0.70, + ShotSpeedNaturalMultiplier = 0.8, + MaxFireDelayNaturalMultiplier = 1.0, + MaxFireDelayNaturalExponent = 0.9, + TearHeightBonus = 12, +}; +local NERIELLE_HEAD = Isaac.GetCostumeIdByPath("gfx/characters/players/02_Nerielle_Head.anm2") + +-- 03_Sive +local SIVE_NAME = "03_Sive"; +local SIVE_TYPE = Isaac.GetPlayerTypeByName(SIVE_NAME); +local SIVE_STATS = { + MoveSpeedNaturalBonus = 0.10, + MoveSpeedNaturalMultiplier = 0.9, + DamageNaturalMultiplier = 0.70, + ShotSpeedNaturalMultiplier = 0.8, + MaxFireDelayNaturalMultiplier = 1.0, + MaxFireDelayNaturalExponent = 0.9, + TearHeightBonus = 12, +}; +local SIVE_HEAD = Isaac.GetCostumeIdByPath("gfx/characters/players/03_Sive_Head.anm2") + +-- ON PLAYER INIT!! -- GIVE EM STUFF +function Lore:PostPlayerInit( player ) + if player:GetPlayerType() == ARIEL_TYPE then + player:AddNullCostume( ARIEL_HEAD ); + player:AddCollectible( CollectibleType.COLLECTIBLE_SUCCUBUS_CHARM, 0, 0); + end + if player:GetPlayerType() == NERIELLE_TYPE then + player:AddNullCostume( NERIELLE_HEAD ); + end + if player:GetPlayerType() == SIVE_TYPE then + player:AddNullCostume( SIVE_HEAD ); + player.SpriteScale = Vector(1.5,1.5); + player:AddCollectible( CollectibleType.COLLECTIBLE_MOMMY_OF_TWO, 0, 0); + player:AddCollectible( CollectibleType.COLLECTIBLE_YALE_HORNS, 0, 0); + end +end +Lore:AddCallback( ModCallbacks.MC_POST_PLAYER_INIT, Lore.PostPlayerInit ); + +-- STUFF FOR ENTITIES + -- BABY ARIEL! + function Lore:GetBabyAriel(Ariel) + -- mommy:be_kissed() + end + Lore:AddCallback(ModCallbacks.MC_FAMILIAR_INIT, Lore.GetBabyAriel, FamiliarVariant.BABY_ARIEL) + -- do ur thing baby succubus gal + function Lore:UpdateBabyAriel(Ariel) + end + Lore:AddCallback(ModCallbacks.MC_FAMILIAR_UPDATE, Lore.UpdateBabyAriel, FamiliarVariant.BABY_ARIEL) + + -- BABY YARI + function Lore:GetBabyYari(Yari) + -- ariel:copy() + -- mommy:be_kissed() + end + Lore:AddCallback(ModCallbacks.MC_FAMILIAR_INIT,Lore.GetBabyYari, FamiliarVariant.BABY_YARI) + + function Lore:UpdateBabyYari(Yari) + -- local player = Isaac.GetPlayer(0) + -- local data = Yari:GetData() + -- local sprite = Yari:GetSprite() + -- local FireDir = player:GetFireDirection() + -- local MoveDir = player:GetMovementDirection() + + --if FireDir == Direction.NO_DIRECTION or data.Cooldown > 0 then + --Yari:FollowParents() + end + Lore:AddCallback(ModCallbacks.MC_FAMILIAR_UPDATE, Lore.UpdateBabyYari, FamiliarVariant.BABY_YARI) + + -- LIL DRAKE + function Lore:GetLilDrake(Drake) + -- Drake:doDrakeStuff() + end + Lore:AddCallback(ModCallbacks.MC_FAMILIAR_INIT,Lore.GetLilDrake, FamiliarVariant.LIL_DRAKE) + +-- STUFF FOR ITEMS + + -- Active + function Lore:ActivateSuccubusCharm(_Type, RNG) + local player = Isaac.GetPlayer(0) + enemies = Isaac.FindInRadius(player.Position, 125, EntityPartition.ENEMY ) + for k,enemy in ipairs(enemies) do + if enemy:HasEntityFlags( EntityFlag.FLAG_CHARM ) == true then + print("This entity is charmed! Let's poison them!") + enemy:AddPoison(player, 120, 1) + enemy:AddEntityFlags(EntityFlag.FLAG_POISON) + else + print("This entity isn't charmed! Let's charm them!") + enemy:AddCharmed(120) + enemy:AddEntityFlags(EntityFlag.FLAG_CHARM) + end + end + end + Lore:AddCallback(ModCallbacks.MC_USE_ITEM, Lore.ActivateSuccubusCharm, CollectibleType.COLLECTIBLE_SUCCUBUS_CHARM) + +-- STUFF FOR PLAYERS +function Lore:PlayerUpdate( player ) + if player:GetPlayerType() == ARIEL_TYPE then + end + if player:GetPlayerType() == NERIELLE_TYPE then + end +end +Lore:AddCallback( ModCallbacks.MC_POST_PLAYER_UPDATE, Lore.PlayerUpdate ); + +function Lore:onCache( player, cacheFlag) + if cacheFlag == CacheFlag.CACHE_FAMILIARS then + + local BabyArielCount = 0 + local BabyYariCount = 0 + local BabyLilDrakeCount = 0 + + for _, entity in pairs(Isaac.GetRoomEntities()) do + if EntityType == EntityType.ENTITY_FAMILIAR then + if entity.Variant == FamliarVariant.BABY_ARIEL then + BabyArielCount = BabyArielCount + 1 + end + if entity.Variant == FamliarVariant.BABY_YARI then + BabyYariCount = BabyYariCount + 1 + end + if entity.Variant == FamliarVariant.LIL_DRAKE then + LilDrakeCount = LilDrakeCount + 1 + end + end + end + while player:GetCollectibleNum(CollectibleType.COLLECTIBLE_MOMMY_OF_TWO) > BabyArielCount do + SpawnFollower(FamiliarVariant.BABY_ARIEL, player) + BabyArielCount = BabyArielCount + 1 + end + while player:GetCollectibleNum(CollectibleType.COLLECTIBLE_MOMMY_OF_TWO) > BabyYariCount do + SpawnFollower(FamiliarVariant.BABY_YARI, player) + BabyYariCount = BabyYariCount + 1 + end + while player:GetCollectibleNum(CollectibleType.COLLECTIBLE_SCALY_EGG) > BabyLilDrakeCount do + SpawnFollower(FamiliarVariant.LIL_DRAKE, player) + BabyLilDrakeCount = BabyLilDrakeCount + 1 + end + RealignFamiliars() + end +end +Lore:AddCallback(ModCallbacks.MC_EVALUATE_CACHE, Lore.onCache) + +function Lore:EvaluateCache( player, cacheFlag ) + local player = Isaac.GetPlayer(0) -- get the player entity + if player:GetPlayerType() == ARIEL_TYPE then + if cacheFlag == CacheFlag.CACHE_FLYING then + player.CanFly = 1 + end + end + if player:GetPlayerType() == NERIELLE_TYPE then + if cacheFlag == CacheFlag.CACHE_FLYING then + player.CanFly = 1 + end + end +end +Lore:AddCallback(ModCallbacks.MC_EVALUATE_CACHE, Lore.EvaluateCache ); + +Lore:AddCallback(ModCallbacks.MC_POST_FIRE_TEAR, function(_, tear) + local player = Isaac.GetPlayer(0) -- get the player entity + if player:HasCollectible(CollectibleType.COLLECTIBLE_YALE_HORNS) == true then + if yaleTearCount == nil then + yaleTearCount = 0 + end + yaleTearCount = yaleTearCount + 1 + if yaleTearCount == 3 then + yaleTearCount = 0; + local lookout = player:GetAimDirection() + local at = math.random(-180,179) + local finalTear = lookout:Rotated(at):Resized(player.ShotSpeed*10) + local tearCopy = tear.Variant + Isaac.Spawn(EntityType.ENTITY_TEAR, tearCopy, 0, player.Position, finalTear, player):ToTear() + end + end + + if player:GetPlayerType() == ARIEL_TYPE then + tear.TearFlags = tear.TearFlags | TearFlags.TEAR_CHARM -- add slowing effect to the tear + end + + if player:GetPlayerType() == NERIELLE_TYPE then + tear.TearFlags = tear.TearFlags | TearFlags.TEAR_BURN -- add slowing effect to the tear + end +end) diff --git a/resources/gfx/003.096_succubus.anm2 b/resources/gfx/003.096_succubus.anm2 new file mode 100644 index 0000000..00fa4a6 --- /dev/null +++ b/resources/gfx/003.096_succubus.anm2 @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/gfx/familiars/baby_yari.png b/resources/gfx/familiars/baby_yari.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4678b5bfc74010600a57b63d57140f81388756 GIT binary patch literal 1790 zcmVUzyzl(jv4M=# z0I9oI(>xx}c=Kgi1}UR4Js|{YfV`4Y&^<5;el>p_;`%#zr~z^ah`4(-Ee~ns7eW~M zXp16srK8O9j{`31@V4+pS_UCRcufew1OLXzKLiASPTwzrlrnOWJ$}#2pyrRe@?zqP z>VHvmVSv{eaETsgS!Wd%M^-Bea>=cG%`Z^L#K z-~C+3EC9er1b+W5xcD>Ilr2Cs`vAsglT#-`uEogYw_Vt;Qh;tdMv*}s|NLkbZ}#^9 z01I=`Jf|1H4=by=#{5`YK#qo=`NVDwoHO5JFh1uj5u z_V=(b7qvrWSeOgaX;$EBx}FpOX~9v1I1%FZ_&w#ZHG)=2oQTBLbKJ9}S&%0nQ2==G zEzAYMc6tFke;IVL=P#q5DV=5ux(-;c*TX9dRR~bh==a^`KUi*bBhT(kPB{<2GDRrM z=uh@t`JYw>Zrfvq(F}kBivs>iN~|>{b~gleHw1qC`M*fI8i;urHv!@d`n~WF6o1C2 z;_RK+dZdLBLVRrv~AHK*47dEB#T2qG4 zfYF-?m)x10Li2F{xSY5*G?|zV4-GE(C}$39kKj@7xuDaqnOS-#&PN=HUsNhbOqlM2Ier zCk?FtsJs6vgMJUojV_iO-AG{YO*#`1$TAh@0>lMJy>}r%oy*{7bRs}g&y|M{ZJ5)- z?cY0CiOu6eggTefNB{@@URYP2@h8&^fHvKLVA_2pWw;-p=Ard?UeW}JcYglawgAyC z^yYR{1P1*cj$17pw_1_4Ki`D1{u;0X5mNn65&;VS&F$!SZQupS4O#)9_vn0cjn?4D ztrmb_?N94}dPe!_GhnYHa6!?{Kx_#RCr$+7=v>M$-Dc;nT7*nQz*X=U5g`8>FrCCr zz#$-NfTTd?@LkzKzlXOhjpxtX5x8xd1#kh{VY804ro`j>BLPzL+X{kCyDc}jfvqP| z5ul)SG4ko`&wmwff(w+3a)kb0cEd8L{<|Xd9lh9tKs@+8W~6oyDP`n!%I=2HZZN57 zSvsKZbY9$np2xqu#`k~z6cwQRzlJ;F9Mdw8eUqcWCjPrR1xRc?3I6`Q^cn#0%~9aH zlj%3J?W+CLZ1dkH-*p1S^ZJv3$)vspq~NDY4c3|ZH7L*x^LE;8Y1#=W@Y0S6?`{aJ zJzK{P0DvFDSx@YowjlrM90Y*yGx_hDh@ac*v1wWAJ_$7dUA2E2^xOP(uR1nRT3PLI z8!$cxK$SY^-<*Ew^5!9C1QxpU;AwWVbUxEJ5hMS*tRA}7Pv9j{g$R|^{wlQep`ai1 zd#R`WD6iiGNGDYQuA~$bLWB*_xeV4|K=jxt-+iULHaCJu1Ui?a^{;CGkBfZ4p9S)N zcSD4J9yF#)-F+@ogwz21RNCJMzZph*06_Fu<<=A2*o0CyU}om$tvA5OPDh&9cVW9K z`?XqaWaByrxP4j*a1lz|2N({Anae@GtMj1@&H@1b{rEA` z5rF9K@7FUkPHTHy?2~QR_PGE6c0?$T01)F+|7rF=eE1MP^8%nJ)4v4(f(qu1pr#cs z(sc?w*UaR@gH=SO_lb?#dqR!u7foDUI6s?ni+Fk2(S+bkH_Qjcsw4D$K&yM gJRXn7Qqa{lD*ylh07*qoM6N<$f>JtOs{jB1 literal 0 HcmV?d00001 diff --git a/resources/gfx/familiars/familiar_shooters_02_demonbaby.png b/resources/gfx/familiars/familiar_shooters_02_demonbaby.png new file mode 100644 index 0000000000000000000000000000000000000000..6504d149bfdbe2645d94fd07262c5bf31fa936c1 GIT binary patch literal 1859 zcmV-J2fX-+P)RNr4hqU|) zA+*Y9iXwFtN16E_2W-^gY2lr;1VRY^m=JaEb1O&fNzb}H6GIWqVe$DfsrjI)E zqEi;N{6&e&zfL)emfu8KOxK6QEU5xO)Bw4?7Bnac0smJ`V?ueW79idCOb8*%=W zW<|@@V`pEm* z?RMsj)&Tk9ndjVx2b-8*3OgWo{)<;Pp#}r_+BZoMqVoIoSM9{k^v^HB`xcvC(&>8L z$Z&mdZ~!34v+kD`ni)kgJ3FgwztawvePhLY?U}RZLg@zm9)O_yM3H(>ZRe$EVE8nX zS~1k&?%(mQqa2^^(K(HXLqM1ifHDOrs{n{UC;fBP2~3FqK@LGq2n3Euwr$wwc2&n$ z8T5Nb?H3iGV=0CE3J_1GB>;Ey`6cgPAUIc@GRm2K=H#6lq+w+&e?R#D) zyL~TwPS0t!5Z3|g^}2s#p$Y*?;*-_CFxTjY?wvV%&bk9835{tH$};+seOu*E%LBLV z&_inmK#oNYe=H>yn-Uu<0vjs=Uwrdl=(*~Md8t}}($@YH%G7eu?}et~rqFRhE<|OB zP+1faAQuQsCv_(v=l&hf;i%(NgK$S6=Q9ZxAOP5DOk%Fl^&5JzDgApu5FE5kb9etF zLkpp`ZyEePw}rh{3y*Ft2YETkhr^*ut{6abcON^AVEwz(m<*f&-Y85?XmSK1aUnt4ENLxAGA`0Ga__qLuqDaH1sodtY+4-psV|`T)!L$kec3<6U;ApGl{!5 z0KUzDoYKa~$L)98ZMnJ*+`S<&{a&;QKKj|n2ieC_*Uy7mep~ouM=x?C5O;ou9;qEf zN*Vf`vaup!15E0(EFCazcV5(np6lN}#Am;K85W?+-}w=7j&2^ve%x|^e~!{AzpY(> zgeOA4A6Fj&06uu;mEFqpo7uM2{%N-PyQ%DP0>sn0oq)-teg-7xr%LtKnel5-pzEjY zwA)g*6OiMjZ4=&D5m>yrj7IgQV0Ff=~rCZJVcDZB5pr;n%yj&PxnhiQ2s8fhpzD* zcu7TW+u>tX=uqzb^Xlwv{%zX3W&-Wm)DZ#(7DS4wL#5JV!- zISSUls{Nl|=5zimQ294jgkR2`#$>6{=Q2e|b-*{J{hjmcp%nuF!rLnE-oQu@N)5oA zpPn|}0Ixe8KM0p(--hj~?AL0wz(%`0VxN`*T!hl%0K?%hb3Ul-s(n9iW7htMhll<% z7Xye#TL3OxxBvk7`}ONkM*zan-}ld-w_4ldVxMf=w$B9sFe5^F1b`Tq`cJd}>eVa% zo)dt0GW{(8;8ieh1oc_*ERDB)72BOZ&RPA>aWVNQ;^awGUH?_vKW%8w094e!v?_be zRi*thZPUz)qs~IIiVzcY^t;Y{{z%;Wh$C;WQqU)002ovPDHLkV1mS_b>#p6 literal 0 HcmV?d00001 diff --git a/resources/gfx/familiars/motheroftwo_yari.anm2 b/resources/gfx/familiars/motheroftwo_yari.anm2 new file mode 100644 index 0000000..408ed21 --- /dev/null +++ b/resources/gfx/familiars/motheroftwo_yari.anm2 @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/gfx/items/collectibles/drake_mark.png b/resources/gfx/items/collectibles/drake_mark.png deleted file mode 100644 index 67e6cf404d4372b0f91d96bb457a40e199150b35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmV;30eAk1P)}21Dexb^jD^WC#Lzz-ul@UJ4|@Yc5Ehz5QkZuhF}Xu3fiy zb`F8h4voCngb;bnhxZwI1H5^jNl}byLIj5~OSs%7EME1-wsjd(DuMNpGReIVO^C=n z#w?u?mI)W+5gucDXM|Q;NZ$1QDv*wY>w#37oYa#Es{{=@)&Zb2B_g)$>#WVIxwFc7-6lkxg=gtn$wa~y0g*&24HO{_ mR1@aEM)f}*AYu>BAHow%=ym3py{KdW00000G=J$}Hj&aFTj)?M6iS8`TIrxmp_WcUCP7eiDFz1-Tq3Qsi-Y1& z=u)U4bjsioQbh!ppy>}Z1OthcM3b1761r%*J%{JHIrrTAUeinpe(>Ps-gD0Pou7O2 zfdBa0a1L;7Yy4@&r&V;wKrfc=tAIg-+=ly{RZxdqC={!Z0e@4m1ol^VkcuUciX{xe zg<{nR%mtoFKzcimLa~Z_cOr_sr@vS2_w@H_A_~PS(%bpKEQ3UJ@*gLFv$dCTyL!5i zeES~zt2;QT)C?ys=CY4Vb-a3ebj-f>P;2j#e!Iz|8R>qAwp|YIzPr z^W(-)`jHQZBStKv0yK2H>#OIH7TbmH801^S5{!hk( zZZ7s|d)F3!`1+AJ!18Y>h0w#Di8xpCvX|r}XmhboourMZWB3C;6$k=3Qx6-ii;&}3 zMF8e)Dq9g)0YBtQ%`yfZ)A~^j8&OAP&;1E4ReykHf%lHUGp`?c-wroc%+cW@+HQgE z!l@tCtb`JUpLUy5TVTtcu33qO>#CvScyhb>F8$6tgj@vRWkv*Y9ysyBx_LLWEr17D zSZ|VXLb=aDC&+pg+hA)01!)&_x3naHi?9Vb?Z%XL#y4R*BIMWYKa1bS23BGuhXC^c P015yANkvXXu0mjfusV3O delta 785 zcmV+s1Md8|2Dk>0G=IrpHj&aFTj&rh1WJb%TIrxmp_WWSCP7eiDHaD2TvA$T76*$% zp-Z8H&?$pUNEH!Wf~G&v5G*8C5=~=TO6a2L_8gw)=G=2{Ueinpe(>Ps-gD3Qou7O1 zfdBa0Z~<^_Yy4^DOsnXSj$SN2R1W0vm?!F$i-`&@vi6|5+$ZX|(qx2II;6F|QXLC2}c6N6n z_4YmXSGI9@P&E#5L0`Yuu(_Mn_D=z)S@|TKW=hksBzDR<0KoM4Bn}U%*eT~QJwB=I zLo=fWvCS6=l7BXu05YJIr#`*I)X5P5;LXJ@bzr1_NM+#gpo)oj#8&_(x7j(|c=^sV zjPwry04CxQ)Lj?ln~$|9Nel^TCPI>?R)OjJrU0!8$tk5i=xEsj08E`6VfN({OvEDy z&5RmN*^GQ}IBNJZGC)nYQ_kVq=bSPMUhdKkU3vZ7>VHhaMjRST0BB?(z|#*vkq>8H z84j~!x7GW8CW?GEq0%ae_e$OaB-FYs3+ftD?E&D|mu~=oy6a_EcB|Iv_9*oOmX4X4ETW#Q|jxk zi=g9JMF8eBm8Ceh060x$iEP)vAeo$g-P9nd& zM*WRT*oM7&u~0BfsHKCBQ+J4E=a4oMB)8(aLq3~`_n2RgKYl(?c6KcGT6c5DN!=3F z8h~uqIQiu@QnNAKtu0gwc9yT7!)~{8{DOeu%5l+oh2W!WdP|IW^(0DFx~9;oXKz?v zU#IKEtwOKQmI@hdivn1x^vjU0AvyIP04XH{;BIX}c=wr!qrXVJm9X3G0JPn`$;ZqG z{TzVe%JJpp0+C3B#>Pg{=`{BT?}4j8KGHKvaw}d!UUn(00T|wB$LsbWrDVKrk1k~9 zd=r8oAj>j!b#(}WfWzTna&nS}h6X)$_4Z{HS5E)xk)BZiyn;tq-_Y$Ha>jDZaEG+yw#19bQF(KBrb8Z9ie$jrB z4*=Y*@xPA0Y$9T=*a4Ko-a6|PUKNXvD-aPP!0bRNGj%)`r8NNZv4;qOhdKc8Z+vEV*-f!H3WJWP=vErumoy{1bRIi zGvKh*dL)J^(2FJPgoX=4TLbzu9N#gtl1nGJhqhrEwBb;JciL|Tr%yDaf;~L|Tv9-x ro9)RPkOd!M>Ny^fm<_(L@D;cN3)+=ZDpcS000000NkvXXu0mjfh)j#` literal 0 HcmV?d00001