CleverRaven / Cataclysm-DDA

Cataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.
http://cataclysmdda.org
Other
10.7k stars 4.2k forks source link

Aftershock Moxie have slow movement speed #76189

Open Agnistel opened 2 months ago

Agnistel commented 2 months ago

Describe the bug

I noticed this bug a long time ago. Even though the description of Moxie says that they are faster than the player, in reality they move much slower.

Attach save file

N/A

Steps to reproduce

  1. Enable Aftershock mod
  2. Spawn MoxPhore Scavenger
  3. It's slow like a zombie

Expected behavior

Their speed matches the description.

Screenshots

No response

Versions and configuration

Last experimental and previous versions

Additional context

No response

Maleclypse commented 2 months ago
{
    "id": "mon_moxie_scavenger",
    "type": "MONSTER",
    "name": { "str": "MoxPhore Scavenger" },
    "description": "A human stands here, towering around 2 meters high.  Its flesh is frozen solid, colored black and blue from frostbite.  It constantly scratches at its flesh with its claw-like hands, surveying the land with frozen and foggy eyes.",
    "default_faction": "moxie",
    "bodytype": "human",
    "species": [ "MOXIE" ],
    "diff": 5,
    "volume": "62500 ml",
    "weight": "81500 g",
    "hp": 100,
    "speed": 115,
    "material": [ "flesh" ],
    "symbol": "A",
    "color": "red",
    "aggression": 100,
    "morale": 100,
    "melee_skill": 6,
    "melee_dice": 2,
    "melee_dice_sides": 4,
    "melee_damage": [ { "damage_type": "cut", "amount": 4 } ],
    "dodge": 4,
    "vision_day": 25,
    "regenerates": 10,
    "harvest": "frost_human",
    "death_drops": "default_moxie_human_death_drops",
    "special_attacks": [
      { "type": "bite", "cooldown": 5 },
      { "id": "scratch", "damage_max_instance": [ { "damage_type": "cut", "amount": 12 } ] }
    ],
    "flags": [
      "SEES",
      "HEARS",
      "GOODHEARING",
      "SWIMS",
      "WARM",
      "BASHES",
      "GROUP_BASH",
      "POISON",
      "NO_BREATHE",
      "REVIVES",
      "PUSH_MON",
      "FILTHY"
    ],
    "armor": { "bash": 3, "cut": 5, "bullet": 5 }
  },

Certainly looks like it moves faster

Agnistel commented 2 months ago
{
    "id": "mon_moxie_scavenger",
    "type": "MONSTER",
    "name": { "str": "MoxPhore Scavenger" },
    "description": "A human stands here, towering around 2 meters high.  Its flesh is frozen solid, colored black and blue from frostbite.  It constantly scratches at its flesh with its claw-like hands, surveying the land with frozen and foggy eyes.",
    "default_faction": "moxie",
    "bodytype": "human",
    "species": [ "MOXIE" ],
    "diff": 5,
    "volume": "62500 ml",
    "weight": "81500 g",
    "hp": 100,
    "speed": 115,
    "material": [ "flesh" ],
    "symbol": "A",
    "color": "red",
    "aggression": 100,
    "morale": 100,
    "melee_skill": 6,
    "melee_dice": 2,
    "melee_dice_sides": 4,
    "melee_damage": [ { "damage_type": "cut", "amount": 4 } ],
    "dodge": 4,
    "vision_day": 25,
    "regenerates": 10,
    "harvest": "frost_human",
    "death_drops": "default_moxie_human_death_drops",
    "special_attacks": [
      { "type": "bite", "cooldown": 5 },
      { "id": "scratch", "damage_max_instance": [ { "damage_type": "cut", "amount": 12 } ] }
    ],
    "flags": [
      "SEES",
      "HEARS",
      "GOODHEARING",
      "SWIMS",
      "WARM",
      "BASHES",
      "GROUP_BASH",
      "POISON",
      "NO_BREATHE",
      "REVIVES",
      "PUSH_MON",
      "FILTHY"
    ],
    "armor": { "bash": 3, "cut": 5, "bullet": 5 }
  },

Certainly looks like it moves faster

Problem with flag "SWIMS" , if you remove it their ingame speed become normal

jpfalk1 commented 3 weeks ago

Should SWIMS flag dictate slower overland speed?

May be an error in src/monmove.cpp Compare SWIMS section to CAN_SUBMERGE SWIMS check doesn't appear to have the final movecost/=2 like the default calculation or CAN_SUBMERGE

} else if( swims() ) {
    if( here.has_flag( ter_furn_flag::TFLAG_SWIMMABLE, f ) ) {
        movecost += 25;
    } else {
        movecost += 50 * here.move_cost( f );
    }
    if( here.has_flag( ter_furn_flag::TFLAG_SWIMMABLE, t ) ) {
        movecost += 25;
    } else {
        movecost += 50 * here.move_cost( t );
    }
} else if( can_submerge() ) {
    // No-breathe monsters have to walk underwater slowly
    if( here.has_flag( ter_furn_flag::TFLAG_SWIMMABLE, f ) ) {
        movecost += 250;
    } else {
        movecost += 50 * here.move_cost( f );
    }
    if( here.has_flag( ter_furn_flag::TFLAG_SWIMMABLE, t ) ) {
        movecost += 250;
    } else {
        movecost += 50 * here.move_cost( t );
    }
    movecost /= 2;

Can anyone else confirm my code interpretation?