Find exponential function that becomes constant at 1

samplelist={{0., 15}, {0.031746, 14}, {0.0634921, 13}, {0.0952381,    12}, {0.126984, 11}, {0.15873, 11}, {0.190476, 10}, {0.222222,    9}, {0.253968, 9}, {0.285714, 8}, {0.31746, 8}, {0.349206,    7}, {0.380952, 7}, {0.412698, 7}, {0.444444, 6}, {0.47619,    6}, {0.507937, 6}, {0.539683, 5}, {0.571429, 5}, {0.603175,    5}, {0.634921, 4}, {0.666667, 4}, {0.698413, 4}, {0.730159,    4}, {0.761905, 4}, {0.793651, 3}, {0.825397, 3}, {0.857143,    3}, {0.888889, 3}, {0.920635, 3}, {0.952381, 3}, {0.984127,    2}, {1.01587, 2}, {1.04762, 2}, {1.07937, 2}, {1.11111,    2}, {1.14286, 2}, {1.1746, 2}, {1.20635, 2}, {1.2381, 2}, {1.26984,    2}, {1.30159, 2}, {1.33333, 1}, {1.36508, 1}, {1.39683,    1}, {1.42857, 1}, {1.46032, 1}, {1.49206, 1}, {1.52381,    1}, {1.55556, 1}, {1.5873, 1}, {1.61905, 1}, {1.65079, 1}, {1.68254,    1}, {1.71429, 1}, {1.74603, 1}, {1.77778, 1}, {1.80952,    1}, {1.84127, 1}, {1.87302, 1}, {1.90476, 1}, {1.93651,    1}, {1.96825, 1}, {2., 1}}  Show[ListPlot[samplelist],   Plot[Exp[-t /(0.5)] samplelist[[1, 2]], {t, 0, 2}]] 

fig2

 

I need an exponentially decaying function that fits my data and becomes constant (equal to 1 here) ultimately.

fig1

What happens if a character’s declared action becomes impossible?

What happens if a character’s declared action becomes impossible before they can attempt it in the attack phase? Do the core rules support the idea that they get to pick a different action, or perform a similar action, or do they effectively lose the ability to act in that round?

For example, if a character wants to shoot someone but the target suddenly disappears from this plane of existence, is that character still forced to spend her round shooting at nothing, or can she now opt not to pull the trigger?

Since "shooting at the location where the target recently was" isn’t impossible, a better example might be if a character is disarmed before they can use a weapon. Can that character do nothing but follow through with their declared weapon-attack, albeit pantomimed?

Considering actions other than attacks, if someone declares that they’ll run across a room and through an open door, but the door is closed and bolted shut before their turn in the initiative order, are they then forced to run up to the door, or would they be allowed to remain in place since their intention is now impossible?

Notes

  • This is setting aside the rules for aborting an attack in favor of a defensive action.
  • It makes sense that changing an attack’s target during the attack phase would not be allowed, since that would give the attacker an unfair advantage in surprising a higher-initiative target who did not anticipate being attacked and thus had no defensive action prepared.

What happens if a kalashtar becomes possessed?

Kalashtar have Quori spirits inside of them. How would the spirit react to being possessed. If there are no game mechanics that could be added, could any flavor be added to spice up the campaign in the event of a possessed kalashtar? Eberron: Rising from the Last War says that there can be adverse effects if a kalashtar ends up being an evil alignment, would this apply to being possessed by an evil PC?

What happen if a Twilight Domain Cleric that shared his darkvision becomes unconscious or die?

The Eyes of Night feature from the Twilight Domain Cleric, introduced in Tasha’s Cauldron of Everything pg. 34, grants darkvision to the cleric:

You can see through the deepest gloom. You have darkvision out to a range of 300 feet.

It also allows the cleric to share this darkvision with willing creatures:

As an action, you can magically share the darkvision of this feature with willing creatures you can see within 10 feet of you, up to a number of creatures equal to your Wisdom modifier (minimum of one creature). The shared darkvision lasts for 1 hour. […]

But the description of the feature does not state what would happen if the cleric becomes unconcious or die, only state that it last for 1 hour. I can think of some interpretations for those cenarios:

  1. The cleric already used his action to share his darkvision, so he does not need to do anything and the sharing will last for the duration, regardless of what happen to the cleric.
  2. Since it is your (the cleric) darkvision, if the creatures goes unconscious that creature still have the darkvision and the feature, so it’s still shared. But if it died, a corpse does not have such a feature, so the sharing it’s cutted off.
  3. An unconcious creature cannot use it’s features, so, even though the cleric shared when he was conscious, once he becomes unconscious the sharing is canceled. Naturally, the same goes in the case if he dies.

Personally I think the second scenario it’s the more appropriate, but I’m not absolutely sure.

Is there any official rule that could help to determine what would happen in this cases?

If a paladin becomes Large, at what point does the paladin’s aura originate?

If you enlarge a paladin (so that they take up 2×2 squares on a grid), what point does their aura’s radius start at?

For Medium/Small creatures (who take up a 1×1 square on a grid), it radiates from one of the corners of the square. For Large creatures, is it still at one of the corners of the 2×2 square, at the intersection at the center of one of the sides of the creature’s space, or at the intersection at the center of the creature’s space?

Additional info:

  • According to the designers, the point of origin of a spherical area of effect is at the intersection of squares on a grid.
  • According to Mike Mearls, paladin auras work the same way.

If a PC becomes stunned on their turn, do they lose the rest of their actions without losing any stunned value?

Page 622 of the Core Rulebook defines the Stunned condition:

You’ve become senseless. You can’t act while stunned. Stunned usually includes a value, possibly over multiple turns, from being stunned. Each time you regain actions (such as at the start of your turn), reduce the number you regain by your stunned value, then reduce your stunned value by the number of actions you lost. …

I’ve created a creature that can stun a PC as a result of the PC attacking it with a melee weapon. This means that the PC could be stunned mid-turn.

Now, rules as written, the above paragraph reads like this:

  1. You can’t act when stunned.
  2. Stunned value "ticks down" each time you regain actions.
  3. Therefore, if you are stunned during your turn, "you can’t act," so you simply lose your remaining actions. Then, at the start of your turn when you regain actions, Stunned ticks down and you may be able to act again on that turn if Stunned reduced to zero.

So, if a PC takes their first action and become Stunned 1, they will actually lose a total of three actions: the remaining two actions on their current turn, then one action when they regain actions next turn.

Is this the correct interpretation? Or should Stunned start ticking down immediately, so that in the above example, the PC would lose their second action on that turn, go down to Stunned 0, and then be able to take their third action?

Does Ocular spell make every eligible damage spells have a critical chance since it becomes a ranged touch attack (ray)?

Ocular spell states:

(…)When you release an ocular spell, its effect changes to a ray with a range of up to 60 feet. If the spell previously would have affected multiple creatures, it now affects only the creature struck by the ray. You must succeed on a ranged touch attack to strike your target with an ocular spell, and the target is still permitted any saving throw allowed by the spell.(…)

Every spell that has a touch attack (melee/range) Do have a critical hit chance (20X2)

So If I was to release an Ocular Fireball (only affects 1 creature now and it still gets the Reflex Half saving throw though). It could indeed be a critical hit.

Correct?

Sidenote:

I know fireball might not be the best spell for this combination, it was just for the sake of the question.

Translating PHP function to SQL, sometimes the balance becomes 0

We have a very big PHP function that gets all the orders we have to renew, it takes between 2h and 9h to finish depending on the server and whether it’s running PHP 5 or 7.

None of the queries are in the slow query log except the first query which gets all the orders and takes 40s, after that, all the filtering is done through PHP and that’s why I’m trying to rewrite the whole thing in SQL

The main query of our function is this

(SELECT * FROM orders WHERE extended_duration=0 AND extend_access!=1 AND is_paid=1 AND duration!=0 AND is_renew=1 AND was_renewed=0 AND object_name IS NULL AND (service_id IS NOT NULL OR bundle_id IS NOT NULL OR pkg_id_fk IS NOT NULL) AND DATE_ADD(paid_on, INTERVAL duration HOUR)< NOW() AND DATE(DATE_ADD(paid_on, INTERVAL duration HOUR)) BETWEEN DATE(NOW() - INTERVAL 15 DAY) AND DATE(NOW()) GROUP BY username,service_id,bundle_id,object_name,pkg_id_fk) UNION  (SELECT * FROM orders WHERE extended_duration!=0 AND extend_access!=1 AND is_paid=1 AND duration!=0 AND is_renew=1 AND was_renewed=0 AND object_name IS NULL AND (service_id IS NOT NULL OR bundle_id IS NOT NULL OR pkg_id_fk IS NOT NULL) AND DATE_ADD(paid_on, INTERVAL extended_duration HOUR)< NOW() AND DATE(DATE_ADD(paid_on, INTERVAL extended_duration HOUR)) BETWEEN DATE(NOW() - INTERVAL 15 DAY) AND DATE(NOW())  GROUP BY username,service_id,bundle_id,object_name,pkg_id_fk)"); 

After that we start filtering, one of the things we do is check if the user signed up for a free trial then we have to renew his plan for another paid plan

if ($  order['renewal_price_id'] != 0){     $  order['price_id'] = $  order['renewal_price_id']; }  $  check_if_active_plan = $  this->db->prepare("SELECT * FROM prices WHERE id=:price_id LIMIT 1");  $  sub_plan = $  check_if_active_plan->fetch(PDO::FETCH_ASSOC); 

And also we check if he has a discount and update the balance accordingly, I have problems with translating this line to SQL

 if ($  sub_plan['discount_rate'] > 0 && $  sub_plan['discount_start'] <= date("Y-m-d") && $  sub_plan['discount_end'] >= date("Y-m-d")) {   $  orders[$  i]['balance'] = $  sub_plan['balance'] - ($  sub_plan['balance'] * $  sub_plan['discount_rate'] / 100);  } 

On the other hand, My SQL query takes between 20 and 40 seconds to finish on a big data set in MySQL 8, but I have two problems:

  • Whenever I try to update the balance for someone who has a free trial or a discount, it sets the balance to 0
  • My query should get either the same number of results as the query above or less due to the filtering, my query returns more results after all the filtering is done.

DBFidle, My Query

(   SELECT     ord.orderid,     ord.username,     ord.msisdn,     ord.order_type,     ord.bundle_id,     ord.service_id,     ord.object_name,     ord.app_id,     ord.is_paid,     ord.is_renew,     ord.is_test,     ord.extended_duration,     ord.created,     ord.paid_on,     ord.was_renewed,     ord.renew_orderid,     ord.renewed_at,     ord.generated_by,     ord.gift_to,     ord.renewal_price_id,     ord.bypass,     ord.bypass_reason,     ord.reset_access,     ord.extend_access,     ord.pkg_id_fk,     ord.is_revoked,     dv.device_type,     CASE       WHEN ord.renewal_price_id > 0 THEN ord.renewal_price_id       ELSE ord.price_id     END AS price_id,     CASE       WHEN ord.renewal_price_id > 0 THEN p.duration       ELSE ord.duration     END AS duration,     CASE       WHEN ord.renewal_price_id > 0 THEN p.disconnect_time       ELSE ord.disconnect_time     END AS disconnect_time,     CASE       WHEN p.discount_rate > 0       AND p.discount_start <= CURDATE()       AND p.discount_end >= CURDATE() THEN p.balance - (p.balance * p.discount_rate / 100)       ELSE p.balance     END AS balance   FROM     orders as ord     JOIN devices as dv on ord.username = dv.username     JOIN prices as p ON price_id = p.id     AND (       (         ord.bundle_id IS NOT NULL         AND ord.bundle_id = p.bundle_id       )       OR (         ord.service_id IS NOT NULL         AND ord.service_id = p.service_id       )     )   WHERE     ord.pkg_id_fk IS NULL     AND ord.extended_duration = 0     AND ord.extend_access = 0     AND ord.is_paid = 1     AND ord.duration != 0     AND ord.is_renew = 1     AND ord.was_renewed = 0     AND dv.is_verified = 1     AND dv.is_banned = 0     AND ord.object_name IS NULL     AND (       (p.is_approved IN (1, 4))       OR (         p.is_approved = 2         AND dv.device_type = 'Mobile'       )       OR (         p.is_approved = 3         AND dv.device_type = 'STB'       )     )     AND DATE_ADD(ord.paid_on, INTERVAL ord.duration HOUR) < NOW()     AND DATE(       DATE_ADD(ord.paid_on, INTERVAL ord.duration HOUR)     ) BETWEEN DATE(NOW() - INTERVAL 15 DAY)     AND DATE(NOW())   GROUP BY     ord.username,     ord.service_id,     ord.bundle_id   order by     ord.paid_on desc ) UNION(     SELECT       ord.orderid,       ord.username,       ord.msisdn,       ord.order_type,       ord.bundle_id,       ord.service_id,       ord.object_name,       ord.app_id,       ord.is_paid,       ord.is_renew,       ord.is_test,       ord.extended_duration,       ord.created,       ord.paid_on,       ord.was_renewed,       ord.renew_orderid,       ord.renewed_at,       ord.generated_by,       ord.gift_to,       ord.renewal_price_id,       ord.bypass,       ord.bypass_reason,       ord.reset_access,       ord.extend_access,       ord.pkg_id_fk,       ord.is_revoked,       dv.device_type,       CASE         WHEN ord.renewal_price_id > 0 THEN ord.renewal_price_id         ELSE ord.price_id       END AS price_id,       CASE         WHEN ord.renewal_price_id > 0 THEN p.duration         ELSE ord.duration       END AS duration,       CASE         WHEN ord.renewal_price_id > 0 THEN p.disconnect_time         ELSE ord.disconnect_time       END AS disconnect_time,       CASE         WHEN p.discount_rate > 0         AND p.discount_start <= CURDATE()         AND p.discount_end >= CURDATE() THEN p.balance - (p.balance * p.discount_rate / 100)         ELSE p.balance       END AS balance     FROM       orders as ord       JOIN devices as dv on ord.username = dv.username       JOIN prices as p ON price_id = p.id       AND (         (           ord.bundle_id IS NOT NULL           AND ord.bundle_id = p.bundle_id         )         OR (           ord.service_id IS NOT NULL           AND ord.service_id = p.service_id         )       )     WHERE       ord.pkg_id_fk IS NULL       AND ord.extended_duration != 0       AND ord.extend_access = 0       AND ord.is_paid = 1       AND ord.duration != 0       AND ord.is_renew = 1       AND ord.was_renewed = 0       AND dv.is_verified = 1       AND dv.is_banned = 0       AND ord.object_name IS NULL       AND (         (p.is_approved IN (1, 4))         OR (           p.is_approved = 2           AND dv.device_type = 'Mobile'         )         OR (           p.is_approved = 3           AND dv.device_type = 'STB'         )       )       AND DATE_ADD(ord.paid_on, INTERVAL ord.extended_duration HOUR) < NOW()       AND DATE(         DATE_ADD(ord.paid_on, INTERVAL ord.extended_duration HOUR)       ) BETWEEN DATE(NOW() - INTERVAL 15 DAY)       AND DATE(NOW())     GROUP BY       ord.username,       ord.service_id,       ord.bundle_id     order by       ord.paid_on desc   ) UNION   (     SELECT       ord.orderid,       ord.username,       ord.msisdn,       ord.order_type,       ord.bundle_id,       ord.service_id,       ord.object_name,       ord.app_id,       ord.is_paid,       ord.is_renew,       ord.is_test,       ord.extended_duration,       ord.created,       ord.paid_on,       ord.was_renewed,       ord.renew_orderid,       ord.renewed_at,       ord.generated_by,       ord.gift_to,       ord.renewal_price_id,       ord.bypass,       ord.bypass_reason,       ord.reset_access,       ord.extend_access,       ord.pkg_id_fk,       ord.is_revoked,       ord.price_id,       ord.duration,       ord.disconnect_time,       ord.balance,       dv.device_type     FROM       orders as ord       JOIN devices as dv on ord.username = dv.username     WHERE       ord.pkg_id_fk IS NOT NULL       AND ord.extended_duration = 0       AND ord.extend_access = 0       AND ord.is_paid = 1       AND ord.duration != 0       AND ord.is_renew = 1       AND ord.was_renewed = 0       AND ord.object_name IS NULL       AND dv.is_verified = 1       AND dv.is_banned = 0       AND DATE_ADD(ord.paid_on, INTERVAL ord.duration HOUR) < NOW()       AND DATE(         DATE_ADD(ord.paid_on, INTERVAL ord.duration HOUR)       ) BETWEEN DATE(NOW() - INTERVAL 15 DAY)       AND DATE(NOW())     GROUP BY       ord.username,       ord.pkg_id_fk     order by       ord.paid_on desc   ) UNION(     SELECT       ord.orderid,       ord.username,       ord.msisdn,       ord.order_type,       ord.bundle_id,       ord.service_id,       ord.object_name,       ord.app_id,       ord.is_paid,       ord.is_renew,       ord.is_test,       ord.extended_duration,       ord.created,       ord.paid_on,       ord.was_renewed,       ord.renew_orderid,       ord.renewed_at,       ord.generated_by,       ord.gift_to,       ord.renewal_price_id,       ord.bypass,       ord.bypass_reason,       ord.reset_access,       ord.extend_access,       ord.pkg_id_fk,       ord.is_revoked,       ord.price_id,       ord.duration,       ord.disconnect_time,       ord.balance,       dv.device_type     FROM       orders as ord       JOIN devices as dv on ord.username = dv.username     WHERE       ord.pkg_id_fk IS NOT NULL       AND ord.extended_duration != 0       AND ord.extend_access = 0       AND ord.is_paid = 1       AND ord.duration != 0       AND ord.is_renew = 1       AND ord.was_renewed = 0       AND dv.is_verified = 1       AND dv.is_banned = 0       AND ord.object_name IS NULL       AND DATE_ADD(ord.paid_on, INTERVAL ord.extended_duration HOUR) < NOW()       AND DATE(         DATE_ADD(ord.paid_on, INTERVAL ord.extended_duration HOUR)       ) BETWEEN DATE(NOW() - INTERVAL 15 DAY)       AND DATE(NOW())     GROUP BY       ord.username,       ord.pkg_id_fk     order by       ord.paid_on desc   ) 

show create tables orders, devices, prices

orders | CREATE TABLE `orders` (   `orderid` varchar(50) COLLATE utf8_unicode_ci NOT NULL,   `username` varchar(128) COLLATE utf8_unicode_ci NOT NULL,   `msisdn` varchar(150) COLLATE utf8_unicode_ci NOT NULL,   `order_type` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Subscription',   `bundle_id` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,   `service_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,   `object_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,   `app_id` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,   `balance` float NOT NULL,   `is_paid` int(11) NOT NULL DEFAULT '0',   `is_renew` tinyint(1) NOT NULL DEFAULT '1',   `is_test` tinyint(1) NOT NULL DEFAULT '0',   `duration` int(11) NOT NULL DEFAULT '0',   `extended_duration` int(11) NOT NULL DEFAULT '0',   `disconnect_time` int(11) NOT NULL DEFAULT '0',   `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,   `paid_on` timestamp NULL DEFAULT NULL,   `was_renewed` tinyint(1) NOT NULL DEFAULT '0',   `renew_orderid` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,   `renewed_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',   `generated_by` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,   `gift_to` varchar(125) COLLATE utf8_unicode_ci DEFAULT NULL,   `price_id` int(11) NOT NULL DEFAULT '0',   `renewal_price_id` int(11) NOT NULL DEFAULT '0',   `bypass` tinyint(1) NOT NULL DEFAULT '0',   `bypass_reason` text COLLATE utf8_unicode_ci,   `reset_access` tinyint(1) NOT NULL DEFAULT '0',   `extend_access` tinyint(1) NOT NULL DEFAULT '0',   `pkg_id_fk` int(11) DEFAULT NULL,   `is_revoked` tinyint(4) NOT NULL DEFAULT '0',   PRIMARY KEY (`orderid`),   KEY `service_id_index` (`service_id`),   KEY `index_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |   devices | CREATE TABLE `devices` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `username` varchar(100) COLLATE utf8_unicode_ci NOT NULL,   `device_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,   `imei` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,   `serial_number` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,   `mac_address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,   `msisdn` varchar(150) COLLATE utf8_unicode_ci NOT NULL,   `auth` varchar(255) COLLATE utf8_unicode_ci NOT NULL,   `old_auth` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,   `device_type` varchar(50) COLLATE utf8_unicode_ci NOT NULL,   `device_os` varchar(50) COLLATE utf8_unicode_ci NOT NULL,   `device_osversion` varchar(50) COLLATE utf8_unicode_ci NOT NULL,   `device_appversion` varchar(50) COLLATE utf8_unicode_ci NOT NULL,   `device_pushtoken` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,   `language` varchar(50) COLLATE utf8_unicode_ci DEFAULT 'en',   `verification_code` varchar(10) COLLATE utf8_unicode_ci NOT NULL,   `is_verified` tinyint(4) NOT NULL DEFAULT '0',   `is_notification` tinyint(1) NOT NULL DEFAULT '1',   `is_refresh` tinyint(1) NOT NULL DEFAULT '0',   `is_test` tinyint(1) NOT NULL DEFAULT '0',   `is_banned` tinyint(1) NOT NULL DEFAULT '0',   `is_external` tinyint(1) NOT NULL DEFAULT '0',   `lastlogin` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',   `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,   PRIMARY KEY (`id`),   KEY `wtb_devices_idx_id_is_verified` (`is_verified`) ) ENGINE=InnoDB AUTO_INCREMENT=414709 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci    prices | CREATE TABLE `prices` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `plan_model` tinyint(1) NOT NULL DEFAULT '0',   `service_id` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,   `bundle_id` int(11) DEFAULT NULL,   `balance` float NOT NULL,   `cost` float NOT NULL,   `costBundle` float NOT NULL,   `duration` int(11) NOT NULL,   `disconnect_time` int(11) NOT NULL DEFAULT '0',   `one_time` tinyint(1) NOT NULL DEFAULT '0',   `discount_rate` int(11) NOT NULL DEFAULT '0',   `discount_start` date DEFAULT NULL,   `discount_end` date DEFAULT NULL,   `is_approved` int(11) NOT NULL DEFAULT '0',   `is_renew` int(11) NOT NULL DEFAULT '1',   `double_play` varchar(50) COLLATE utf8_unicode_ci NOT NULL,   `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,   PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2653 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci  

If a dragon becomes a shadow dragon, would it still be subject to a previously cast True Polymorph’s reversal?

Story / example: A Harpy gets Truly Polymorphed into a wyrmling Brass dragon. Over eight centuries she eventually becomes ancient and powerful – albeit a bit weird with her harpy-like personality and alignment.

As an avid reader of StackExchange she becomes a bit paranoid. She is concerned: should a Magical Dispelling get past her three daily uses of Legendary Resistance she would, once again, be that stupid, nasty, dirty little girl with those grimy-grubby wings… that happens to sing quite well. As such, she plots.

She sends herself into some Shifting Planes, ending up in Fell Shadows. Assuming success, she becomes one Shadow Dragon creature / template / archetype / true dragon / thingy.

"Aha!" she shrieks with delight, "Now i am genuinely a dragon… a DRAGON FOREVER!! Take THAT, Exchangers of Stack!" The cold hard rain falls as lightning cascades in the distance ominously. Indeed, has this mere harpy of a girl outwitted us?


Question: Does a transformation into an entirely different creature (such as changing types &/or transforming bodies) mean that Dispel Magic cannot undo a ‘permanent’ True Polymorph spell? Or does this apparently-totally-‘new’-creature take this polymorphic-dispelability along with them?

Do the effects of a Potion of Speed or Potion of Heroism disappear if the character becomes unconscious?

Pretty much as the title states.

If a player is under the effect of a potion of speed

When you drink this potion, you gain the Effect of the haste spell for 1 minute (no Concentration required). The potion’s yellow fluid is streaked with black and swirls on its own.

or a Potion of Heroism

For 1 hour after drinking it, you gain 10 Temporary Hit Points that last for 1 hour. For the same Duration, you are under the Effect of the bless spell (no Concentration required). This blue potion bubbles and steams as if boiling.

Do those effects wear off if the play is reduced to 0 hit points and becomes unconscious before the 1 hour duration?