r/DougDoug
Rest in peace Rosa
I just watched the video where we discovered that rosa died and i heared abt rosa story and how she raised a bunch of sea otters and now i am sad, and my love for sea otters has grown alot, love you rosa may you swim in the sea above us.
"Elmo understands its rough when when your parents get divorced. Elmo knows its even harder when you know its because of you."
Happy 250th birthday to America! Here’s Doug reading the Declaration of Independence after drinking hot sauce to celebrate this occasion!
Love when chat messages are being pulled forward even tho the chat is not visible
I ran 15000 simulations of DougDoug's timer. I don't really know why.
Fun facts:
- On average, the timer will hit 0 in about an hour, assuming the timer doesn't explode (the "Avg real (hit zero) stat). Doug's timer lasted for 2 hours 45 min, so he's (sorta) proven statistically* unlucky. Should have prayed to the bee gods more 🐝.
- There was an 8.3% chance his timer would have exceeded 24 hours. A believer can believe
- I tried this simulation with a low cap of 24 hours (in the above picture), but also with higher caps of 100 hours; most stats remain more or less the same (except for the average and standard deviation, of course, but that's going to get blown out by the capped timers either way)
If you have a basic Python setup (you can ask your favourite AI to help set this up for you as well), you can try this out as well. Just follow the instructions in the README.
https://github.com/ThatAmuzak/DougDougTimerSimulations.git
Be warned that this is horribly unoptimized code, and I'm not accepting any issues or PRs; this is a throwaway project. It takes around a minute or so on a half-decent laptop for 15k runs
Why did I do any of this?
---
* For those of you stats nerds about to yell p-values and effect sizes, yes, he's not actually proven in a kosher statistics manner. You could theoretically compute the empirical p-value test and a non-parametric z-score, but I don't have the patience for that. If any of this makes sense to you, the code is up there; you should be able to modify it to save and export the dataframe to R to run your tests
DougDoug/Failboat Miis
These are my own creation.
Pyjama Sam, Father, Bald at 2D platformers, Chatty Dee.
If you have any advice on how I could improve them, let me know.
DougDoug on his way to sacrifice another Sam to High Demon Elgim.
All these Miis are my own creation.
AI Invasion Config
Does anybody know what or if Doug had special notes or instructions for NovelAI for the AI Invasion series? I tried playing with it, but it always ends up way less creative and entertaining than the videos.
I made a script to simulate dougdoug's 10 minute timer in his latest video
After 250000 simulations, I found that the average time the 10 minute timer took to finish was 237,545,427,080,684.16 real-world seconds, which is equivalent to 7,527,514 years.
Some other statistics:
Median Time: 1,846.97 seconds
Shortest Run: 2.00 seconds
Longest Run: 106,691,973,808,757,744.00 real world seconds, which is 3,380,934,058 years (approximately a quarter of the age of the universe)
The reason why the average time is so much larger than the median is because of extreme "unlucky" cases where the timer or the time it takes for the timer to tick repeatedly doubles which is also why the longest run is so long
Anyways I am not sure if the script is actually correct but you can try it yourself below (disclaimer: I myself did not write the script I just prompted an ai):
import random
import time
import statistics
def run_simulation(max_wall_time, global_start_time):
timer_time = 10 * 60 # Starts at 10 minutes (600 seconds)
real_time = 0.0
tick_length = 1.0 # Tracks real-world seconds per timer second
steps = 0
while timer_time > 0:
# Safety kill-switch for the wall-clock (checks every 10k steps)
if steps % 10000 == 0:
if time.time() - global_start_time > max_wall_time:
return None
steps += 1
r = random.random()
if r < 0.05:
# 5% chance: add 1 second
timer_time += 1
real_time += tick_length
elif r < 0.06:
# 1% chance: add 1 minute
timer_time += 60
real_time += tick_length
elif r < 0.07:
# 1% chance: remove 1 minute
timer_time -= 60
real_time += tick_length
elif r < 0.12:
# 5% chance: freezes for 5 timer-seconds
real_time += 5.0 * tick_length
elif r < 0.13:
# 1% chance: doubles the amount of time left
timer_time *= 2
real_time += tick_length
elif r < 0.14:
# 1% chance: halves the amount of time left
timer_time //= 2
real_time += tick_length
elif r < 0.15:
# 1% chance: seconds and minutes swap (discarding hours)
m = (timer_time % 3600) // 60
s = timer_time % 60
timer_time = s * 60 + m
real_time += tick_length
elif r < 0.16:
# 1% chance: round to the nearest minute up or down
m = timer_time // 60
s = timer_time % 60
if s >= 30:
timer_time = (m + 1) * 60
else:
timer_time = m * 60
real_time += tick_length
elif r < 0.17:
# 1% chance: timer ticks twice as fast (tick length halves)
tick_length /= 2.0
timer_time -= 1
real_time += tick_length
elif r < 0.18:
# 1% chance: timer ticks twice as long (tick length doubles)
tick_length *= 2.0
timer_time -= 1
real_time += tick_length
else:
# 82% chance: timer decreases normally
timer_time -= 1
real_time += tick_length
if timer_time < 0:
timer_time = 0
return real_time
def main():
TARGET_SIMULATIONS = 250000
MAX_WALL_TIME = 10 * 60 # 10 minutes max real-time processing limit
global_start_time = time.time()
results = []
print(f"Starting simulation run... (Target: {TARGET_SIMULATIONS:,} simulations)")
print(f"Script will automatically terminate after 10 minutes.")
print("-" * 50)
for i in range(TARGET_SIMULATIONS):
if time.time() - global_start_time > MAX_WALL_TIME:
print("\n[!] 10-Minute Timeout Reached! Stopping early.")
break
sim_result = run_simulation(MAX_WALL_TIME, global_start_time)
if sim_result is None:
print("\n[!] 10-Minute Timeout Reached inside a simulation loop! Stopping early.")
break
results.append(sim_result)
if (i + 1) % 25000 == 0:
elapsed = time.time() - global_start_time
print(f"Completed {i + 1:,} / {TARGET_SIMULATIONS:,} simulations... (Elapsed: {elapsed:.2f}s)")
if len(results) > 0:
expected_value = statistics.mean(results)
median_value = statistics.median(results)
max_value = max(results)
min_value = min(results)
print("\n" + "=" * 50)
print("SIMULATION RESULTS")
print("=" * 50)
print(f"Total Simulations Run : {len(results):,}")
print(f"Expected Value (Mean) : {expected_value:,.2f} real-world seconds")
print(f"Median Time : {median_value:,.2f} seconds")
print(f"Shortest Run : {min_value:,.2f} seconds")
print(f"Longest Run : {max_value:,.2f} seconds")
else:
print("No simulations completed in time.")
if __name__ == "__main__":
main()import random
import time
import statistics
def run_simulation(max_wall_time, global_start_time):
timer_time = 10 * 60 # Starts at 10 minutes (600 seconds)
real_time = 0.0
tick_length = 1.0 # Tracks real-world seconds per timer second
steps = 0
while timer_time > 0:
# Safety kill-switch for the wall-clock (checks every 10k steps)
if steps % 10000 == 0:
if time.time() - global_start_time > max_wall_time:
return None
steps += 1
r = random.random()
if r < 0.05:
# 5% chance: add 1 second
timer_time += 1
real_time += tick_length
elif r < 0.06:
# 1% chance: add 1 minute
timer_time += 60
real_time += tick_length
elif r < 0.07:
# 1% chance: remove 1 minute
timer_time -= 60
real_time += tick_length
elif r < 0.12:
# 5% chance: freezes for 5 timer-seconds
real_time += 5.0 * tick_length
elif r < 0.13:
# 1% chance: doubles the amount of time left
timer_time *= 2
real_time += tick_length
elif r < 0.14:
# 1% chance: halves the amount of time left
timer_time //= 2
real_time += tick_length
elif r < 0.15:
# 1% chance: seconds and minutes swap (discarding hours)
m = (timer_time % 3600) // 60
s = timer_time % 60
timer_time = s * 60 + m
real_time += tick_length
elif r < 0.16:
# 1% chance: round to the nearest minute up or down
m = timer_time // 60
s = timer_time % 60
if s >= 30:
timer_time = (m + 1) * 60
else:
timer_time = m * 60
real_time += tick_length
elif r < 0.17:
# 1% chance: timer ticks twice as fast (tick length halves)
tick_length /= 2.0
timer_time -= 1
real_time += tick_length
elif r < 0.18:
# 1% chance: timer ticks twice as long (tick length doubles)
tick_length *= 2.0
timer_time -= 1
real_time += tick_length
else:
# 82% chance: timer decreases normally
timer_time -= 1
real_time += tick_length
if timer_time < 0:
timer_time = 0
return real_time
def main():
TARGET_SIMULATIONS = 250000
MAX_WALL_TIME = 10 * 60 # 10 minutes max real-time processing limit
global_start_time = time.time()
results = []
print(f"Starting simulation run... (Target: {TARGET_SIMULATIONS:,} simulations)")
print(f"Script will automatically terminate after 10 minutes.")
print("-" * 50)
for i in range(TARGET_SIMULATIONS):
if time.time() - global_start_time > MAX_WALL_TIME:
print("\n[!] 10-Minute Timeout Reached! Stopping early.")
break
sim_result = run_simulation(MAX_WALL_TIME, global_start_time)
if sim_result is None:
print("\n[!] 10-Minute Timeout Reached inside a simulation loop! Stopping early.")
break
results.append(sim_result)
if (i + 1) % 25000 == 0:
elapsed = time.time() - global_start_time
print(f"Completed {i + 1:,} / {TARGET_SIMULATIONS:,} simulations... (Elapsed: {elapsed:.2f}s)")
if len(results) > 0:
expected_value = statistics.mean(results)
median_value = statistics.median(results)
max_value = max(results)
min_value = min(results)
print("\n" + "=" * 50)
print("SIMULATION RESULTS")
print("=" * 50)
print(f"Total Simulations Run : {len(results):,}")
print(f"Expected Value (Mean) : {expected_value:,.2f} real-world seconds")
print(f"Median Time : {median_value:,.2f} seconds")
print(f"Shortest Run : {min_value:,.2f} seconds")
print(f"Longest Run : {max_value:,.2f} seconds")
else:
print("No simulations completed in time.")
if __name__ == "__main__":
main()
What do you think High Demon Elgrim looks like?
I have seen his picture on the Dougdoug wiki, but he just sort of looks like a generic dragon demon, so I was curious if you had any ideas for designs for the demon lord.
Personally I think he looks like Pyjama Sam, but slightly off, as his appearance is effected by what is sacrificed to him.
Are dougdoug's videos scripted
Not all but some of his videos do seem scripted a lot of things happen at suspiciously convenient times the most recent example of this is the "stream ends in 10 minutes but the timer goes backwards" vid. I'm not accusing him since I don't have evidence but this isn't the first time I had this feeling so I thought I'd ask
Obsidian Pillar origin
It's an overlay Doug put onscreen from the TOTK line video