From 193e2ecb650b1fce1305ef713baa5636d59e2027 Mon Sep 17 00:00:00 2001 From: mrbesen Date: Sun, 21 Jul 2019 10:32:16 +0200 Subject: [PATCH] initial --- README.md | 12 +++++++ control.lua | 83 ++++++++++++++++++++++++++++++++++++++++++++++++ info.json | 11 +++++++ install.sh | 2 ++ movementcap.ods | Bin 0 -> 22976 bytes 5 files changed, 108 insertions(+) create mode 100644 README.md create mode 100644 control.lua create mode 100644 info.json create mode 100644 install.sh create mode 100644 movementcap.ods diff --git a/README.md b/README.md new file mode 100644 index 0000000..06c0f84 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# Superhot - Factorio mod + +Time runs as fast as you run. + +This mod is inspired by the game [Superhot](http://superhot.jp) + +If you have problems you can reset the timing in you wold with: +``` +/c game.speed = 1 +``` + +Download the Mod [here](https://mods.factorio.com/mod/Superhot) diff --git a/control.lua b/control.lua new file mode 100644 index 0000000..71664c1 --- /dev/null +++ b/control.lua @@ -0,0 +1,83 @@ +--local movingActive = 673 -- this value is actually not random, but carefully calculated , src value: 0,1484375 +local miningActive = 100 + +function init() + if not global.Superhot then + global.Superhot = {} + end + if not global.Superhot.playermovement then + global.Superhot.playermovement = {} + end +end + +function getDist(mov) + return math.sqrt((mov[1] * mov[1]) + (mov[2] * mov[2])) +end + +-- caps the speed using a logarithmic function, is undefined for x <= 0! +function movementcap(x) + return (75.88 * math.log(x)) + 244 +end + +script.on_event({defines.events.on_tick}, + function (e) + init() -- init variables TODO: do somewhere else! + local activeMax = 0 + local lastplayer -- just for DEBUG + for index,player in pairs(game.connected_players) do --loop through all online players on the server + lastplayer = player + if player.valid and player.connected and player.character then + local active = 0 + -- is mining? + if player.mining_state.mining then + active = miningActive + end + + --is moving + local newpos = player.position + local oldpos = global.Superhot.playermovement[player.index] + local mov = {0,0} + if oldpos ~= nil then + mov = {oldpos.x - newpos.x, oldpos.y - newpos.y} + + local dist = getDist(mov) + if dist > 0 then + active = active + movementcap(dist) + end + end + + --update movement + global.Superhot.playermovement[player.index] = newpos + + --update max + if active > activeMax then + activeMax = active + end + end + end + + local goal = activeMax/100.0 + local diff = goal - game.speed + + -- make acceleration smoother + if diff > 0.2 or diff < -0.2 then + diff = diff / 2.0 + end + goal = game.speed + diff + + --clip to upper and lower bound + if goal < 0.1 then + goal = 0.1 + elseif goal > 10 then + goal = 10 + end + + --actually set it + game.speed = goal + end +) + +-- spped modifyer: game.speed=1 +-- freeze time: game.player.surface.freeze_daytime=true + +-- defines.events.on_pre_player_mined_item diff --git a/info.json b/info.json new file mode 100644 index 0000000..5f84e36 --- /dev/null +++ b/info.json @@ -0,0 +1,11 @@ +{ + "name": "Superhot", + "version": "0.1.0", + "title": "SuperHot", + "author": "MrBesen", + "contact": "https://git.mrbesen.de/mrbesen/superhot/issues", + "homepage": "https://git.mrbesen.de/mrbesen/superhot", + "factorio_version": "0.17", + "dependencies": ["base >= 0.17"], + "description": "Time runs as fast as you run." +} diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..d7b4f28 --- /dev/null +++ b/install.sh @@ -0,0 +1,2 @@ +#!/bin/bash +cd ../ && zip Superhot/Superhot_0.1.0.zip -r Superhot/*.lua Superhot/info.json && cp -f Superhot_0.1.0.zip ~/.factorio/mods/ && echo "Done." diff --git a/movementcap.ods b/movementcap.ods new file mode 100644 index 0000000000000000000000000000000000000000..6f6b67ddf193a0ef93e98327f60b84538b106df8 GIT binary patch literal 22976 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 literal 0 HcmV?d00001