Add missing item icons (placeholders). Add mounted parrot to Pirate Captain. Release Build 11649.

master
sigonasr2 5 months ago
parent d432966e3e
commit 5f63f23635
  1. 8
      Adventures in Lestoria/Animation.cpp
  2. 9
      Adventures in Lestoria/Goblin_Boar_Rider.cpp
  3. 11
      Adventures in Lestoria/Monster.cpp
  4. 2
      Adventures in Lestoria/Monster.h
  5. 10
      Adventures in Lestoria/Pirate_Captain.cpp
  6. 2
      Adventures in Lestoria/Version.h
  7. 9
      Adventures in Lestoria/assets/Campaigns/3_1.tmx
  8. 5
      Adventures in Lestoria/assets/config/MonsterStrategies.txt
  9. 8
      Adventures in Lestoria/assets/config/Monsters.txt
  10. 1
      Adventures in Lestoria/assets/config/gfx/gfx.txt
  11. 14
      Adventures in Lestoria/assets/config/items/ItemDatabase.txt
  12. BIN
      Adventures in Lestoria/assets/gamepack.pak
  13. BIN
      Adventures in Lestoria/assets/items/Bandana.png
  14. BIN
      Adventures in Lestoria/assets/items/Blue Gemstone.png
  15. BIN
      Adventures in Lestoria/assets/items/Empty Leather Pouch.png
  16. BIN
      Adventures in Lestoria/assets/items/Giant Claw.png
  17. BIN
      Adventures in Lestoria/assets/items/Large Shell.png
  18. BIN
      Adventures in Lestoria/assets/items/Rum Bottle.png
  19. BIN
      Adventures in Lestoria/assets/items/Shell.png
  20. BIN
      Adventures in Lestoria/assets/items/White Feather.png
  21. BIN
      Adventures in Lestoria/assets/items/Worm Skin.png
  22. BIN
      x64/Release/Adventures in Lestoria.exe

@ -433,6 +433,14 @@ void sig::Animation::InitializeAnimations(){
ANIMATION_DATA[std::format("GOBLIN_BOW_ATTACK_{}",animationIndex)]=mountShootAnimation;
}
Animate2D::FrameSequence parrot_sit_n,parrot_sit_e,parrot_sit_s,parrot_sit_w;
//Idle sequences for the sitting parrot.
for(int animationIndex=0;animationIndex<4;animationIndex++){
Animate2D::FrameSequence mountAnimation{0.6f};
mountAnimation.AddFrame(Animate2D::Frame{&GFX["monsters/commercial_assets/Parrot_foreground.png"],{{0,animationIndex*48},{48,48}}});
ANIMATION_DATA[std::format("PARROT_MOUNTED_{}",animationIndex)]=mountAnimation;
}
#pragma region Trapper Target Mark Debuff
AnimationData targetAnimData{.frameDuration{0.1f},.style{Animate2D::Style::Repeat}};
Animate2D::FrameSequence targetAnim(targetAnimData.frameDuration,targetAnimData.style);

@ -52,17 +52,16 @@ void Monster::STRATEGY::GOBLIN_BOAR_RIDER(Monster&m,float fElapsedTime,std::stri
if(!m.B(A::INITIALIZED_MOUNTED_MONSTER)){
m.B(A::INITIALIZED_MOUNTED_MONSTER)=true;
m.F(A::PERCEPTION_LEVEL)=ConfigFloat("Starting Perception Level");
m.internal_mounted_animState=Animate2D::AnimationState{};
m.mounted_animation=Animate2D::Animation<std::string>{};
for(bool firstAnimation=true;const std::string&animation:Config("Imposed Monster Animations").GetValues()){
m.mounted_animation.value().AddState(animation,ANIMATION_DATA.at(animation));
if(firstAnimation)m.mounted_animation.value().ChangeState(m.internal_mounted_animState.value(),animation);
if(firstAnimation)m.mounted_animation.value().ChangeState(m.internal_mounted_animState,animation);
firstAnimation=false;
}
m.mountedSprOffset=ConfigVec("Imposed Monster Offset");
m.deathData.push_back(DeathSpawnInfo{ConfigString("Spawned Monster"),1U});
m.deathData.emplace_back(ConfigString("Spawned Monster"),1U);
}
BOAR(m,fElapsedTime,"Boar");
@ -79,11 +78,11 @@ void Monster::STRATEGY::GOBLIN_BOAR_RIDER(Monster&m,float fElapsedTime,std::stri
m.F(A::ATTACK_COOLDOWN)=0.f;
m.F(A::PERCEPTION_LEVEL)=std::min(ConfigFloat("Maximum Perception Level"),m.F(A::PERCEPTION_LEVEL)+ConfigFloat("Perception Level Increase"));
m.mounted_animation.value().ChangeState(m.internal_mounted_animState.value(),std::format("GOBLIN_BOW_MOUNTED_{}",int(m.GetFacingDirection())));
m.mounted_animation.value().ChangeState(m.internal_mounted_animState,std::format("GOBLIN_BOW_MOUNTED_{}",int(m.GetFacingDirection())));
}
}else
if(m.F(A::ATTACK_COOLDOWN)>=ConfigFloat("Attack Reload Time")){
m.F(A::SHOOT_TIMER)=ConfigFloat("Attack Windup Time");
m.mounted_animation.value().ChangeState(m.internal_mounted_animState.value(),std::format("GOBLIN_BOW_ATTACK_{}",int(m.GetFacingDirection())));
m.mounted_animation.value().ChangeState(m.internal_mounted_animState,std::format("GOBLIN_BOW_ATTACK_{}",int(m.GetFacingDirection())));
}
}

@ -401,7 +401,7 @@ bool Monster::Update(float fElapsedTime){
}
}
animation.UpdateState(internal_animState,randomFrameOffset+fElapsedTime);
if(HasMountedMonster())mounted_animation.value().UpdateState(internal_mounted_animState.value(),fElapsedTime);
if(HasMountedMonster())mounted_animation.value().UpdateState(internal_mounted_animState,fElapsedTime);
randomFrameOffset=0;
attackedByPlayer=false;
return true;
@ -446,7 +446,7 @@ void Monster::UpdateFacingDirection(vf2d facingTargetPoint){
}
}
animation.ModifyDisplaySprite(internal_animState,std::format("{}_{}",animation.currentStateName.substr(0,animation.currentStateName.length()-2),int(facingDirection)));
if(HasMountedMonster())mounted_animation.value().ModifyDisplaySprite(internal_mounted_animState.value(),std::format("{}_{}",mounted_animation.value().currentStateName.substr(0,mounted_animation.value().currentStateName.length()-2),int(facingDirection)));
if(HasMountedMonster())mounted_animation.value().ModifyDisplaySprite(internal_mounted_animState,std::format("{}_{}",mounted_animation.value().currentStateName.substr(0,mounted_animation.value().currentStateName.length()-2),int(facingDirection)));
}else{
if(diff.x>0){
facingDirection=Direction::WEST;
@ -1316,13 +1316,12 @@ const bool Monster::HasFourWaySprites()const{
}
const bool Monster::HasMountedMonster()const{
if(internal_mounted_animState.has_value()^mounted_animation.has_value())ERR("WARNING! The internal mounted animation state and the mounted animation variables are not matching! They should both either be on or both be off! THIS SHOULD NOT BE HAPPENING!");
return internal_mounted_animState.has_value()&&mounted_animation.has_value();
return mounted_animation.has_value();
}
const std::optional<const Animate2D::Frame>Monster::GetMountedFrame()const{
if(!HasMountedMonster())return {};
else return mounted_animation.value().GetFrame(internal_mounted_animState.value());
else return mounted_animation.value().GetFrame(internal_mounted_animState);
}
DeathSpawnInfo::DeathSpawnInfo(const std::string_view monsterName,const uint8_t spawnAmt,const vf2d spawnOffset)
@ -1413,7 +1412,7 @@ const bool Monster::_DealTrueDamage(const uint32_t damageAmt,HurtFlag::HurtFlag
void Monster::Heal(const int healAmt,const bool displayDamageNumber){
hp=std::clamp(hp+healAmt,0,int(GetMaxHealth()));
if(displayDamageNumber)DAMAGENUMBER_LIST.emplace_back(std::make_shared<DamageNumber>(GetPos(),healAmt,false,DamageNumberType::HEALTH_GAIN);
if(displayDamageNumber)DAMAGENUMBER_LIST.emplace_back(std::make_shared<DamageNumber>(GetPos(),healAmt,false,DamageNumberType::HEALTH_GAIN));
}
const float Monster::GetModdedStatBonuses(std::string_view stat)const{

@ -255,7 +255,7 @@ private:
Animate2D::Animation<std::string>animation;
Animate2D::AnimationState internal_animState;
std::optional<Animate2D::Animation<std::string>>mounted_animation;
std::optional<Animate2D::AnimationState>internal_mounted_animState;
Animate2D::AnimationState internal_mounted_animState;
float randomFrameOffset=0.f;
float deathTimer=0.f;
float monsterHurtSoundCooldown=0.f;

@ -45,6 +45,7 @@ All rights reserved.
using A=Attribute;
INCLUDE_game
INCLUDE_ANIMATION_DATA
void Monster::STRATEGY::PIRATE_CAPTAIN(Monster&m,float fElapsedTime,std::string strategy){
enum PhaseName{
@ -58,6 +59,15 @@ void Monster::STRATEGY::PIRATE_CAPTAIN(Monster&m,float fElapsedTime,std::string
switch(m.phase){
case INIT:{
m.F(A::TARGET_TIMER)=ConfigFloat("Shooting Frequency");
m.mounted_animation=Animate2D::Animation<std::string>{};
for(bool firstAnimation=true;const std::string&animation:Config("Imposed Monster Animations").GetValues()){
m.mounted_animation.value().AddState(animation,ANIMATION_DATA.at(animation));
if(firstAnimation)m.mounted_animation.value().ChangeState(m.internal_mounted_animState,animation);
firstAnimation=false;
}
m.mountedSprOffset=ConfigVec("Imposed Monster Offset");
m.deathData.emplace_back(ConfigString("Spawned Monster"),1U);
m.phase=MOVE;
}break;
case MOVE:{

@ -39,7 +39,7 @@ All rights reserved.
#define VERSION_MAJOR 1
#define VERSION_MINOR 3
#define VERSION_PATCH 0
#define VERSION_BUILD 11638
#define VERSION_BUILD 11649
#define stringify(a) stringify_(a)
#define stringify_(a) #a

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.10" tiledversion="1.10.2" class="Map" orientation="orthogonal" renderorder="right-down" width="335" height="165" tilewidth="24" tileheight="24" infinite="0" nextlayerid="8" nextobjectid="15">
<map version="1.10" tiledversion="1.10.2" class="Map" orientation="orthogonal" renderorder="right-down" width="335" height="165" tilewidth="24" tileheight="24" infinite="0" nextlayerid="8" nextobjectid="16">
<properties>
<property name="Background Music" propertytype="BGM" value="mountain"/>
<property name="Level Type" type="int" propertytype="LevelType" value="0"/>
@ -865,12 +865,7 @@
<object id="8" name="Spawn Zone" type="SpawnGroup" x="180" y="1326" width="426" height="306">
<ellipse/>
</object>
<object id="13" template="../maps/Monsters/Pirate Buccaneer.tx" x="492" y="1458">
<properties>
<property name="spawner" type="object" value="8"/>
</properties>
</object>
<object id="14" template="../maps/Monsters/Goblin (Bow).tx" x="474" y="1530">
<object id="15" template="../maps/Monsters/Pirate Captain.tx" x="504" y="1500">
<properties>
<property name="spawner" type="object" value="8"/>
</properties>

@ -1091,6 +1091,11 @@ MonsterStrategy
}
Pirate Captain
{
Imposed Monster Offset = 0,0
Imposed Monster Animations = PARROT_MOUNTED_0,PARROT_MOUNTED_1,PARROT_MOUNTED_2,PARROT_MOUNTED_3,
Spawned Monster = Parrot
Shooting Frequency = 6s
Shoot Max Range = 400
Shooting Chance = 60%

@ -665,10 +665,6 @@ Monsters
# Setting this to true means every four rows indicates one animation, the ordering of the directions is: NORTH, EAST, SOUTH, WEST
4-Way Spritesheet = True
# For monsters that have a mounted portion, this will specify the animation to use.
Mounted Animation = GOBLIN_BOW_MOUNTED
Mounted Animation Offset = 0,-10
Animations
{
@ -1433,10 +1429,6 @@ Monsters
Dagger Left Offset = -8,-2
########
# For monsters that have a mounted portion, this will specify the animation to use.
Mounted Animation = PARROT_MOUNTED
Mounted Animation Offset = 0,-10
Animations
{

@ -93,6 +93,7 @@ Images
GFX_GoblinSwordSlash = goblin_sword_slash.png
GFX_GoblinArrow = goblin_arrow.png
GFX_GoblinBowForeground = monsters/commercial_assets/Goblin (Bow)_foreground.png
GFX_ParrotForeground = monsters/commercial_assets/Parrot_foreground.png
GFX_GoblinBomb = goblin_bomb.png
GFX_GoblinBombFuse = goblin_bomb_fuse.png
GFX_BombBoom = bomb_boom.png

@ -327,9 +327,9 @@ ItemDatabase
ItemCategory = Materials
SellValue = 22
}
Empty Leather Pouche
Empty Leather Pouch
{
Description = A Pouche to store coins in. This Pirate seems to be not to successful in his craft.
Description = A pouch to store coins in. This Pirate seems to be not too successful in his craft.
ItemCategory = Materials
SellValue = 26
}
@ -341,19 +341,19 @@ ItemDatabase
}
Giant Claw
{
Description = The Giant Claw of a crap that grown up to ist maximum potential.
Description = The giant claw of a crab that's grown to its maximum potential.
ItemCategory = Materials
SellValue = 38
}
Worm Skin
{
Description = The Skin feels kinda smooth. Maybe it could be used to craft clothing.
Description = The skin feels kinda smooth. Maybe it could be used to craft clothing.
ItemCategory = Materials
SellValue = 24
}
White Feather
{
Description = The Feather is mainly White. But ist tip is actually black.
Description = The feather is mainly White. But its tip is actually black.
ItemCategory = Materials
SellValue = 17
}
@ -365,13 +365,13 @@ ItemDatabase
}
Shell
{
Description = a beautiful Shell, found at a beach.
Description = A beautiful Shell, found at a beach.
ItemCategory = Materials
SellValue = 9
}
Large Shell
{
Description = a big beautiful Shell, found at a beach.
Description = A big beautiful shell, found at a beach.
ItemCategory = Materials
SellValue = 14
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Loading…
Cancel
Save