Does the reach increase of the Eldritch Claw tattoo stack with Fangs of the Fire Snake?

The Eldritch Claw tattoo released in Tasha’s Cauldron of Everything includes the Eldritch Maul ability which grants the following benefit:

For the duration, each of your melee attacks with a weapon or an unarmed strike can reach a target up to 15 feet away from you, as inky tendrils launch toward the target.

The Fangs of the Fire Snake elemental discipline also grants the following benefit:

Your reach with your unarmed strikes increases by 10 feet for that action, as well as the rest of the turn.

After activating Eldritch Maul and using Fangs of the Fire Snake what is the reach of my unarmed strikes? Would it be 25 feet or would it be 15 ft?

Smooth out movement of the snake in a 2d Snake game

I am working on a 2-D snake game in C++ with the SFML library. I would like to smooth out the movement of my snake as it looks extremely choppy currently.

How the Snake moves

The snake is made up of a list of parts. If I want to move the snake, I simply remove one part from the back (.pop_back()) and then add a new part in the front accrding to the velocity. This works perfectly. The speed of the snake must be the same as the distance between the parts. So if the distance is 15, the will be 15. But a speed of 15 is extremely high, so I need to only update the snake every few frames or use sf::Sleep(). Since the snake moves such a high distance every frame, the movement doesn’t look smooth at all. And since the speed must be equal to the distance between the parts, reducing the speed doesn’t work too. How can I come about tackling this?

Has anyone had to DM the Giant Coral Snake from 5e SaltMarsh dealing stun damage to undead?

Last night I was DMing my group. They were fighting some undead and the Wizard polymorphed the ranger’s animal companion into the Giant Coral Snake from Ghosts of Saltmarsh. Upon a hit by the coral snake, the target must make a DC 12 CON save or be stunned until it’s next turn. Furthermore, on a failed save the target begins to hallucinate and is affected by short term madness. This lasts for 10 minutes. Ok, so that’s pretty clear. However, since the coral snake was attacking an undead creature I ruled the stun feature, as well as the hallucination, wouldn’t take affect due Undead creatures being immune to poison (or, in this case venom from a coral snake). The stat block didn’t call it poison damage but….well, it had to have been right? My players seemed to accept this line of reasoning but I am curious, has anyone else encountered this?

Staff of the Python: Can the owner communicate with the snake?

My character just got a Staff of the Python. He has been using his familiar (owl) and a friendly pseudodragon as a little army. I’m thinking of using the snake as an ally as well–but there’s no description of how much the snake can communicate with the player, if it can at all. Does anyone have any idea of guidelines for this?

From the item description:

You can use an action to speak this staff’s command word and throw the staff on the ground within 10 feet of you. The staff becomes a giant constrictor snake under your control and acts on its own initiative count. By using a bonus action to speak the command word again, you return the staff to its normal form in a space formerly occupied by the snake.

On your turn, you can mentally command the snake if it is within 60 feet of you and you aren’t incapacitated. You decide what action the snake takes and where it moves during its next turn, or you can issue it a general command, such as to attack your enemies or guard a location.

If the snake is reduced to 0 hit points, it dies and reverts to its staff form. The staff then shatters and is destroyed. If the snake reverts to staff form before losing all its hit points, it regains all of them.

It doesn’t really mention any communication, other than issuing general commands. Can it keep watch overnight, if I tell it to wake me up if it sees any enemies? Can I have it scout ahead, as long as it’s within 60 feet?

How does the Way of the Four Elements monk’s Fangs of the Fire Snake elemental discipline work?

I’m confused by the wording of the Way of the Four Elements monk’s Fangs of the Fire Snake elemental discipline.

Specifically, how long does its bonus to the reach of unarmed strikes last, and how many times is the extra fire damage applied?

Here is an example scenario, with how I think it works:

  • A level 8 monk gets 2 attacks on his turn during the attack action, and a bonus action for Flurry of Blows, giving 2 additional unarmed strikes and a total of 4 unarmed strikes on his turn for 1 ki.

  • If he spends 1 ki for Fangs of the Fire Snake, the unarmed damage changes from bludgeoning to fire damage, and the reach is increased to a total of 15 ft.

  • When the monk’s turn ends, Fangs of the Fire Snake ends, so it is not possible to make an opportunity attack with this discipline.

  • If I hit with an attack I can expend another ki to add 1d10 of fire damage. This extra damage only applies to that singular hit, the next attacks don’t have the extra fire damage, and I can’t expend more ki to add another 1d10 on those attacks.

Is my interpretation of how the discipline works correct?

Is there a rules-consistent way to rule a character trying to grab a snake?

Bad-guy sorceror just cast Summon Monster I and now a Snake has appeared next to a player. The snake is right next to the king, so she wants to make a go at grabbing the snake and cutting off it’s head.

Is there a rules-based way for me work out the roll and DC? I was thinking it’s not a Grapple check, as she’s not really wrestling against a small snake, so maybe it’s an opposed DEX check?

Post your track / music with bio to The Purple Snake era Hiphop Blog for $25

I will post your song, video, mixtape or album on my hip hop lifestyle blog. is a lifestyle website dedicated to hip hop, concerts and cannabis cultures based in Denver, CO. The website features a mix of underground, independent, and mainstream music content. Purchase to gain exposure to over thirty thousands of fans looking for new music. The site has 39K+ viewer per month.

by: demlikes
Created: —
Category: Article Writing
Viewed: 197

Does the yuan-ti action option Polymorph into Snake require concentration? What is its duration?

In Volo’s Guide to Monsters, the Yuan-Ti “Unusual Abilities” section (p. 98) lists a number of action options that might be given to high-ranking yuan-ti, one of which is:

Polymorph into Snake (Abomination or Malison Only; Recharge 6). The yuan-ti targets a creature it can see within 60 feet of it. The target must succeed on a Wisdom saving throw or be transformed into a Tiny poisonous snake, as if affected by the polymorph spell. The save DC is the same as that of the yuan-ti’s Innate Spellcasting ability.

It’s not stated that you cast polymorph; it says that the target is under the effect of the spell. So how I should interpret this? Does it require the yuan-ti to maintain concentration? What is its duration?

Console snake game implementation C

I just ended “beta version” of snake game and want to review it. I think there are some bugs and I hope you help me find them. Also, I called this “beta” because I don’t understand how to implement something like timer for async i/o (snake have to move every n seconds). I tried to use select() on linux and threads (via pthreads) on windows, but it didn’t work correctly (I also asked a question about this problem on StackOverflow). Hope you help me with it too.


#include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <time.h> #include <stddef.h> #include <stdbool.h> #include <stdint.h>  #ifdef WIN32     #include <conio.h>   // getch     #include <windows.h> // SetConsoleCursorPosition #endif  #ifdef __linux__     #include <termio.h>   // for getch imitation     #define  CSI "3["     static struct termios old, new; #endif   /** Types **/ #define nullptr ((void *) 0)  typedef enum cell_state_t {     CS_EMPTY,     CS_EAT,     CS_SHEAD,     CS_STAIL } cell_state_t;  typedef enum game_state_t {     GS_ACTIVE,     GS_PAUSED,     GS_VICTORY,     GS_DEFEAT } game_state_t;  typedef enum direction_t {     D_N,     D_S,     D_W,     D_E } direction_t;  typedef enum key_map_t {     KM_N,     KM_UP     = 'w',     KM_DOWN   = 's',     KM_LEFT   = 'a',     KM_RIGHT  = 'd',     KM_PAUSE  = 'p',     KM_EXIT   = 'z' } key_map_t;  enum {     F_ROWS   = 10,     F_COLS   = 10,     F_TOTAL  = F_ROWS * F_COLS };  typedef struct point_t {     int16_t x, y; }  point_t;  typedef struct Snake {     point_t p;     direction_t dir;     size_t tail_size;     point_t tail[F_TOTAL - 1]; } Snake;   /** Globals **/ static cell_state_t field[F_ROWS][F_COLS]; static Snake snake; static game_state_t game_state; static uint32_t score;   /** Functions **/ #ifdef WIN32 void clear_screen(void) {     system("cls"); }  void restore_cursor_pos(void) {     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), (COORD) {0, 0}); } #endif  #ifdef __linux__ void clear_screen(void) {     system("clear"); }  void restore_cursor_pos(void) {     printf(CSI"1;1H"); }  /* these functions were taken from * */ void initTermios(bool echo) {   tcgetattr(0, &old); /* grab old terminal i/o settings */   new = old;   new.c_lflag &= ~ICANON; /* disable buffered i/o */   if (echo) {       new.c_lflag |= ECHO; /* set echo mode */   } else {       new.c_lflag &= ~ECHO; /* set no echo mode */   }   tcsetattr(0, TCSANOW, &new); /* use these new terminal i/o settings now */ }  /* Restore old terminal i/o settings */ void resetTermios(void) {   tcsetattr(0, TCSANOW, &old); }  int32_t getch(void) {     int32_t ch;     initTermios(0);     ch = getchar();     resetTermios();     return ch; } #endif  direction_t get_opposit_dir(direction_t d) {     switch (d1) {     case D_N: return D_S;     case D_S: return D_N;     case D_W: return D_E;     case D_E: return D_W;     } }  key_map_t get_key_from_user(void) {     int32_t c;     c = tolower(getch());     switch (c) {     case 'w':  return KM_UP;     case 's':  return KM_DOWN;     case 'a':  return KM_LEFT;     case 'd':  return KM_RIGHT;     case 'p':  return KM_PAUSE;     case 'z':  return KM_EXIT;     default:   return KM_N;     } }  void place_eat(void) {     uint16_t x, y;     do {         x = rand() % F_COLS;         y = rand() % F_ROWS;     } while (field[y][x] != CS_EMPTY);      field[y][x] = CS_EAT; }  void move_snake(direction_t dir, bool ate) {     point_t buf1, buf2;      buf1 = snake.p;     if (get_opposit_dir(snake.dir) != dir)         snake.dir = dir;      field[snake.p.y][snake.p.x] = CS_EMPTY;     switch (snake.dir) {     case D_N:         snake.p.y = (snake.p.y - 1 + F_ROWS) % F_ROWS;         break;      case D_S:         snake.p.y = (snake.p.y + 1) % F_ROWS;         break;      case D_W:         snake.p.x = (snake.p.x - 1 + F_COLS) % F_COLS;         break;      case D_E:         snake.p.x = (snake.p.x + 1) % F_COLS;         break;     }      for (size_t i = 0; i < snake.tail_size; ++i) {         field[snake.tail[i].y][snake.tail[i].x] = CS_EMPTY;          buf2 = snake.tail[i];         snake.tail[i] = buf1;         buf1 = buf2;          field[snake.tail[i].y][snake.tail[i].x] = CS_STAIL;     }      if (ate) {         snake.tail[snake.tail_size] = buf1;         field[buf1.y][buf1.x] = CS_STAIL;         ++snake.tail_size;     } }  void draw_screen(void) {     restore_cursor_pos();     for (size_t i = 0; i < F_ROWS; ++i) {         for (size_t j = 0; j < F_COLS; ++j) {             switch (field[i][j]) {             case CS_EMPTY:                 putchar(' ');                 break;              case CS_SHEAD:                 putchar('o');                 break;              case CS_STAIL:                 putchar('*');                 break;              case CS_EAT:                 putchar('e');                 break;             }             putchar(' ');         }          if (i == 2)             printf("\tScore: %d", score);         else if (i == 3)             printf("\tTo pause press 'p', to exit press 'z'");         putchar('\n');     } }  void init_game(void) {     srand(time(nullptr));     clear_screen();      for (size_t i = 0; i < F_ROWS; ++i)         for (size_t j = 0; j < F_COLS; ++j)             field[i][j] = CS_EMPTY;      snake.p = (point_t) {4, 4};     snake.dir = D_N;     snake.tail_size = 0;     field[snake.p.y][snake.p.x] = CS_SHEAD;      place_eat();      game_state = GS_ACTIVE;     score = 0; }  void main_loop(void) {     direction_t nd   = D_N;     key_map_t   k   = KM_N;     bool        ate = false;      draw_screen();     while ((k = get_key_from_user()) != KM_EXIT &&            (game_state == GS_ACTIVE || game_state == GS_PAUSED)) {          if (k == KM_PAUSE)             game_state = (game_state == GS_PAUSED) ? GS_ACTIVE : GS_PAUSED;          if (game_state == GS_PAUSED)             continue;          switch (k) {         case KM_UP:             nd = D_N;             break;          case KM_DOWN:             nd = D_S;             break;          case KM_LEFT:             nd = D_W;             break;          case KM_RIGHT:             nd = D_E;             break;          default:             nd = snake.dir;         }          move_snake(nd, ate);         ate = false;         if (field[snake.p.y][snake.p.x] == CS_EAT) {             ate = true;             score += 100;             place_eat();         }          if (field[snake.p.y][snake.p.x] == CS_STAIL)             game_state = GS_DEFEAT;          field[snake.p.y][snake.p.x] = CS_SHEAD;         draw_screen();          if (snake.tail_size == F_TOTAL - 1) {             game_state = GS_VICTORY;             break;         }     }  }  void end_game(void) {      if (game_state == GS_VICTORY)         printf("\n\nVICTORY!\n");     else         printf("\n\nDEFEAT!\n"); }  int main() {     init_game();     main_loop();     end_game();     return 0; }