Homebrew: Path of the Titan Barbarian

I feel there is design space in 5e for player characters that use "great" weapons in more interesting ways, and one such way would be to allow exceptionally strong characters to dual-wield such weapons. To facilitate this goal, I’ve designed a homebrew "Path of the Titan" Barbarian subclass to support this playstyle:

Path of the Titan

Some Barbarians hone their body so they might one day embody the spirit of the titans themselves. This manifests as a brutal fighting style that employs especially large weapons, wielded frenetically and dangerously.

Restriction: Ability Score Minimums

Barbarians come in many shapes and sizes, races and genders, each as valid as the next; but Barbarians seeking to follow the Path of the Titan must necessarily be a model of physical strength and endurance. Any Barbarian that chooses this path must have a combined Strength and Constitution score of at least 31. If your combined scores are below this threshold, you cannot benefit from any of the Path Features provided by this path.

If either or both of your racial Ability Score Increases have been applied to stats other than Strength or Constitution, you may instead apply one or both of them to Strength or Constitution.

Titanic Grip

Starting at level 3, you gain the ability to ignore the Two-Handed property on any weapon, and while you’re raging, you may use Two-Weapon Fighting without either weapon needing to be Light.

Additionally, if your character’s size is smaller than Medium, the Heavy Property on your weapons no longer confers Disadvantage to your Attack Rolls.

Titanic Physique

Starting at level 3, you gain proficiency in the Athletics skill. If you already have proficiency in Athletics, you may instead gain proficiency in any other skill of your choice.

While you are raging, you double your proficiency bonus for any Ability Check that uses your Athletics Proficiency.

Cleaving Blow

Starting at level 6, whenever you are raging, you may use your Action to make a cleaving blow, dealing damage to creatures in a cone in front of you. The size of this cone is equal to 5′ plus the average reach of the melee weapons you are wielding. Each creature in this cone must make a Dexterity Saving Throw. The DC for this saving throw is 8 + your Proficiency Modifier + your Strength Modifier. Each creature in this cone takes damage equal to the combined weapon dice of the melee weapons you are wielding; or half this damage instead if they succeed on their saving throw.

Whenever you gain an additional die from the Brutal Critical feature, you may also add an additional weapon die to the damage of this feature.

Titanic Stature

Starting at level 10, you have advantage on Constitution Saving Throws, and whenever a creature, spell, or other effect moves you without using your movement, you may use your reaction to cut the distance in half.

Additionally, when you determine your Carrying Capacity or your Lifting/Pushing/Pulling capacity, you may treat your character’s size as though it were Huge.

Titanic Rage

Starting at level 14, you can unleash the fury of your Titanic Power in a single cataclysmic act. You may use your action to strike the ground with your fists, duplicating the effects of the spell Earthquake, which last for the full duration of 1 minute. The DC for any saving throws produced by these effects is equal to 8 + your Proficiency Modifier + your Strength Modifier.

Once you use your Titanic Rage, you may not do so again until the end of a Long Rest.

There are, however, several concerns I’d like to receive feedback on for this subclass:

  1. The intention is to support a character that is able to dual-wield melee weapons that normally have the two-handed property; for example, greatswords, greataxes, halberds, or glaives. Does this homebrew support this playstyle fully, or are there rules conflicts I’m not aware of that this subclass would need to directly address?
  2. Are all the features provided by this subclass of an appropriate power level, especially as compared to other Barbarian Paths? I’m particularly interested in the Cleaving Blow feature, which I feel as-written is potentially a very powerful feature.
  3. As a DM, would you allow this subclass at your table? Or, as a Player, would you be comfortable if another player used this subclass for their character?

3D Arrow path along a surface

I have the following two surfaces, created by the following functions

En1[\[Delta]_,g1_,g2_,k_]:=1/2(-I g1+I g2-Sqrt[-(g1+g2-2k+I \[Delta])(g1+g2+2k+I\[Delta])]) En2[\[Delta]_,g1_,g2_,k_]:=1/2(-I g1+I g2+Sqrt[-(g1+g2-2k+I \[Delta])(g1+g2+2k+I\[Delta])])  g1 = 2;  g2 = -3;  \[Delta]max = 2;  kmax = 1;   a = Plot3D[{Re[En1[\[Delta],g1,g2,k]],Re[En2[\[Delta], g1, g2,k]]},{\[Delta],-\[Delta]max,\[Delta]max}, {k, 0, kmax},AxesLabel->{"\[Delta]", "g"}, PlotStyle->Opacity[0.7],BoxRatios -> {1, 1, 1}];  start = Graphics3D[{Black,Ellipsoid[{-1,0.8,Re[En1[-1,g1,g2,0.8]]},{0.1,0.025,0.075}]}];  end = Graphics3D[{Black,Ellipsoid[{-1,0.8,Re[En2[-1,g1,g2,0.8]]},{0.1,0.025,0.075}]}];   test1=Show[a, start, end, PlotRange -> All] 

enter image description here

Now I would like to make a 3D arrow path by going, along the surface, from one black point to the other one, encircling the origin $ (\delta,k)=(0,0.5)$ .

It seems Mathematica do not have a way to create a path, so I constructed it through a ParametricPlot.

test2 = ParametricPlot3D[{-Cos[t],0.5+kmax Sin[t],Re[En1[-\[Delta]max Cos[t], g1, g2, 0.5 + kmax Sin[t]]]},{t,0,2\[Pi]}];   Show[test1, test2] 

enter image description here

However it seems that this it is not encircling nor being created on the surface. Any thoughts?

A* algorithm: need help fixing path that come in contact with obstacle

I am using A* as a pathfinding technique for my AI; it works fine until it gets close to an obstacle (in my case rocks). Right now it just continues the loop if it finds a neighbor thats a rock. It should not actually do this. It should check it.

Allowed Moves: FORWARD,LEFT,RIGHT (LEFT & RIGHT at diagonals) turns are basically two phases: FORWARD, turn face then FORWARD (counts as one move with no additional cost)

The AI should know to turn left or right on the rock in the direction of the goal while also taking other rocks into account.

The line that checks for rocks is: if(at == 1 || at == 2) continue;

I guess you could use the neighborlist to check the sides of the ship.

However it shouldn’t always check it. Only when it comes in contact with a rock

Scenario 1: (ship should turn left (one move) once then continue on path) enter image description here

Scenario 2: (ship should either turn left or right twice (two moves) to unblock itself) enter image description here

Scenario 3: (ship should turn left or right depending on which path is shorter: doing two lefts will hit rock twice but distance is shorter than if it went right by 1 tile)

enter image description here

In each of these scenarios the face of the ship is the only thing that changes; unless its a forward move into the rock then there is no change. If right/left were used in any other situation (regular tiles) it would change position also.

public class AStarSearch {          private ServerContext context;     private List<AStarNode> openList;     private List<AStarNode> closedList;          private double ORTHOGONAL_COST = 1.0;     private double DIAGONAL_COST = ORTHOGONAL_COST * Math.sqrt(2.0);          public AStarSearch(ServerContext context) {         this.context = context;     }      private Comparator<AStarNode> nodeSorter = new Comparator<AStarNode>() {          @Override         public int compare(AStarNode n0, AStarNode n1) {             if(n1.fCost < n0.fCost) return 1;             if(n1.fCost > n0.fCost) return -1;             return 0;         }              };      public List<AStarNode> findPath(Player bot, Position goal){         openList = new ArrayList<AStarNode>();         closedList = new ArrayList<AStarNode>();         List<AStarNode> neighbors = new ArrayList<AStarNode>();         AStarNode current = new AStarNode(bot, bot.getFace(), MoveType.NONE, null, 0, bot.distance(goal));         openList.add(current);          while(openList.size() > 0) {             Collections.sort(openList, nodeSorter);             current = openList.get(0);             if(current.position.equals(goal)) {                 List<AStarNode> path = new ArrayList<AStarNode>();                 while(current.parent != null) {                     path.add(current);                     current = current.parent;                 }                 openList.clear();                 closedList.clear();                 Collections.reverse(path);                 return path;             }             openList.remove(current);             closedList.add(current);                          int x = current.position.getX();             int y = current.position.getY();             switch (current.face) {                 case NORTH:                     neighbors.add(new AStarNode(new Position(x, y), VesselFace.NORTH, MoveType.NONE,current,0,0));                     neighbors.add(new AStarNode(new Position(x, y+1), VesselFace.NORTH, MoveType.FORWARD,current,0,0));                     neighbors.add(new AStarNode(new Position(x-1, y+1), VesselFace.WEST, MoveType.LEFT,current,0,0));                     neighbors.add(new AStarNode(new Position(x+1, y+1), VesselFace.EAST, MoveType.RIGHT,current,0,0));                     break;                 case EAST:                     neighbors.add(new AStarNode(new Position(x, y), VesselFace.EAST, MoveType.NONE,current,0,0));                     neighbors.add(new AStarNode(new Position(x+1, y), VesselFace.EAST, MoveType.FORWARD,current,0,0));                     neighbors.add(new AStarNode(new Position(x+1, y+1), VesselFace.NORTH, MoveType.LEFT,current,0,0));                     neighbors.add(new AStarNode(new Position(x+1, y-1), VesselFace.SOUTH, MoveType.RIGHT,current,0,0));                     break;                 case SOUTH:                     neighbors.add(new AStarNode(new Position(x, y), VesselFace.SOUTH, MoveType.NONE,current,0,0));                     neighbors.add(new AStarNode(new Position(x, y-1), VesselFace.SOUTH, MoveType.FORWARD,current,0,0));                     neighbors.add(new AStarNode(new Position(x-1, y-1), VesselFace.WEST, MoveType.RIGHT,current,0,0));                     neighbors.add(new AStarNode(new Position(x+1, y-1), VesselFace.EAST, MoveType.LEFT,current,0,0));                     break;                 case WEST:                     neighbors.add(new AStarNode(new Position(x, y), VesselFace.WEST, MoveType.NONE,current,0,0));                     neighbors.add(new AStarNode(new Position(x-1, y), VesselFace.WEST, MoveType.FORWARD,current,0,0));                     neighbors.add(new AStarNode(new Position(x-1, y+1), VesselFace.NORTH, MoveType.RIGHT,current,0,0));                     neighbors.add(new AStarNode(new Position(x-1, y-1), VesselFace.SOUTH, MoveType.LEFT,current,0,0));                     break;             }             for(AStarNode neighborNode : neighbors) {                 // Compute the cost to get *to* the action tile.                 double costToReach = current.position.distance(neighborNode.position);                  int at = context.getMap().getTile(neighborNode.position.getX(), neighborNode.position.getY());                 if(at == 1 || at == 2) continue; // this is the line where it checks if tile is rock or not                  double gCost = current.gCost + costToReach;                 double hCost = heuristicDistance(neighborNode.position,goal);                 AStarNode node = new AStarNode(neighborNode.position, neighborNode.face,neighborNode.move, current, gCost, hCost);                 if(positionInList(closedList, neighborNode.position) && gCost >= node.gCost) continue;                 if(!positionInList(openList, neighborNode.position) || gCost < node.gCost) openList.add(node);             }         }         closedList.clear();         return null;     }          private double getActionCost(Position node, int currentTile) {         if(currentTile > 3 && currentTile < 11) {             return 0.2;         }else {             return 1;            }     }      private double heuristicDistance(Position current, Position goal) {         int xDifference = Math.abs(goal.getX() - current.getX());         int yDifference = Math.abs(goal.getY() - current.getY());          int diagonal = Math.min(xDifference, yDifference);         int orthogonal = xDifference + yDifference - 2 * diagonal;          return orthogonal * ORTHOGONAL_COST + diagonal * DIAGONAL_COST;     }          private boolean positionInList(List<AStarNode> list, Position position) {         for(AStarNode n : list) {             if(n.position.equals(position)) return true;         }         return false;     }  } 


public class AStarNode {      public Position position;     public VesselFace face;     public MoveType move;     public AStarNode parent;     public double fCost, gCost, hCost;          public AStarNode(Position position, VesselFace face, MoveType move, AStarNode parent, double gCost, double hCost) {         this.position = position;         this.face = face;         this.move = move;         this.parent = parent;         this.gCost = gCost;         this.hCost = hCost;         this.fCost = this.gCost + this.hCost;     }    }   

There will be no additional cost of running into a rock as long as its a shorter route. Also, if a ship tries to turn left or right from its current position; but there is a rock at that tile it will move up one tile and changes its direction.

The overall question/goal: How do I fix my current code to account for these situations; please provide an implementation or instructions.

Problem with URL path when I applied SEO friendly URL

I was working on PHP project and making SEO friendly URL Like,

OLD : http://example.com/list_product?q=men-top-wear

New : http://example.com/list_product/men-top-wear

Here is my .htaccess file:

RewriteEngine on Options -MultiViews  RewriteCond %{ENV:REDIRECT_STATUS} ^$   RewriteCond %{QUERY_STRING} ^q=(.*)$   RewriteRule ^list_product$   /list_product/%1? [R=301,L]   RewriteRule ^list_product/(.*)$   list_product.php?q=$  1 [L]   RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*?)/?$   /$  1.php [NC,L] 

It’s working well but my link path has been changed to: http://example.com/list_product/images/logo.png

But I need this to be: http://example.com/images/logo.png

It adds list_product, but it’s not working. Does anyone know why this is happening?

How do Path of War stances work out of combat?

In Dreamscarred Press’s Path of War (a 3rd Party supplement to Pathfinder), it’s unclear to me what can(‘t) be done out of combat, especially with regard to stances.

Lines like this (from System & Use) imply one might be in a stance all day long:

A stance remains in effect indefinitely and is never expended. The benefit of your chosen stance continues until you change to another stance you know as a swift action.

Though this implies there could be some limit, or at least that they’re intended for combat more than out of combat:

A stance is a type of fighting method that you maintain from round to round. So long as you stay in a stance, you gain some benefit from it. A martial disciple who performs a kata and assumes a specific posture as he prepares to fight is using a stance.

Lets take as an example this stance from the Shattered Mirror discipline (which was just released in the Harbinger PDF but isn’t yet on the PFSRD).

Silvered Mirror Stance (Su): When you assume this stance, choose a single non-personal range power, psi-like ability, spell, or spell-like ability affecting you. While you maintain this stance, allies within 30 feet of you also gain the benefits of the chosen effect for as long as it is affecting you

This would be an amazing way to share buffs out of combat, e.g. casting Overland Flight or Stoneskin on the Harbinger and getting it for free on any ally within 30′. What are the limits to this?

Can a Magus use spellstrike with Path of war’s maneuvers?

I would really like to know or will maneuvers conflict with the use of spellstrike?

Pathfinder and path of war. My friends and I are planning a pathfinder game. I had intended to play a Magus and one of my friends wanted to play a Warden from Path of war. The gm ok’ed him using it and he started to talk about the maneuvers the three classes of path of war get and that there were feats to allow the original classes from path finder to use them. martial training feats. While lets say a fighter can use them with no problem, just get a few of the matrial training feats and you are good to go. I was thinking into investing some of my feats to use the maneuvers and take advantage of stances.

Path of War Defense conundrum?

Path of War has Strike, Boost, Counter, and Stance.

Strike – usually an attack and extra damage and some effects

Boost – extra damage usually

Counter – repost, dodge, reaction

Stance – at will mods to certain aspects of combat

So my friend and I got in to a bit of a debate. Some Strikes and Boost can catch a target Flat-Footed. But if said target has a Counter,…can they counter the Strike/Boost while Flat-Footed? Specially if they don’t have Uncanny Dodge?

Range Touch Attacks, and Path of War Maneuvers?

Using Adamant Entertainment’s Warlock class School Ability – Arcane Bolt, a ranged touch attack.

Arcane Bolt (Su): You can make a ranged touch attack that does 1d6 points of damage, +1d6 for every two warlock levels. The warlock may choose whether the damage is acid, cold, electricity, or fire. The range on an Arcane Bolt is 100ft. + 10ft./level.

Can it be used with interchangeably between melee and ranged attack maneuvers with the Path of War rules or is it strictly a ranged attack? If ranged only do I still need Point-Blank Shot and Precise Shot and Defensive Shot/Casting vs AOOs?