What are you working on currently? (2017)

There are ways to make rope-like objects using a chain of neutral pivots.

1 Like

Im reviving an old showcase of mine. Im putting a lot of detail into it.

23 Likes

Made some progress with my Lua simplifier, it now looks ahead to see if variables are constant :grin:

It takes about 4 seconds to simplify my games 120,000 lines of code, and I usually only do it before publishing.

I no longer need to worry about hardcoding constants for performance, because this does everything automatically :smiley:

10 Likes

Do you have real-world (real-roblox?) data on how big of a performance gain this instantiates?

There are too many benefits to count, ranging from readability to performance to memory usage.

  • It makes my code more difficult to configure if someone manages to steal a copy
  • I can implement ifdefs, and remove debug-only code before publishing
  • Simplified Lua results in less bytecode/debug data, and thus faster load times
  • I can focus on writing readable code, instead of micro-optimizing every single one of my 1000 modulescripts

The magnitude of these benefits depend entirely on the Lua code being simplified.

Here’s a simple performance example:
Lua makes zero assumptions about your scripts environment. “math.pi” literally gets the “math” global, then the “pi” index. Hardcoding math.pi can be 10x more efficient:


local tick = tick
local t0, t1 = 0, 0

do
	local v = 0
	
	t0 = tick()
	for i = 1, 1000000 do
		v = v + math.pi
	end
	t1 = tick()
	print("Performance1", (t1 - t0)*1000, "ms")
end


do
	local v = 0
	
	t0 = tick()
	for i = 1, 1000000 do
		v = v + 3.1415926535897932384626433832795
	end
	t1 = tick()
	print("Performance2", (t1 - t0)*1000, "ms")
end

Just a few math.pi’s is insignificant, but when my game is over 100,000 lines of code, optimizing is worth it. My simplifier can make assumptions about a script’s environment, where lua can’t.

Here’s a simple memory usage example:



local collectgarbage = collectgarbage
local function GetMemoryUsage()
	local kilobytes = collectgarbage("count")
	local bytes = kilobytes * 1024
	return bytes
end

local dataCount = 65536

do
	local data = {}
	for i = 1, dataCount do
		data[i] = false
	end
	
	local someConstant = 123
	
	local usage0, usage1 = 0, 0
	
	usage0 = GetMemoryUsage()
	for i = 1, dataCount do
		data[i] = function()
			return someConstant
		end
	end
	usage1 = GetMemoryUsage()
	
	print("Memory1", (usage1 - usage0)/dataCount, "bytes")
end

do
	local data = {}
	for i = 1, dataCount do
		data[i] = false
	end
	
	local usage0, usage1 = 0, 0
	
	usage0 = GetMemoryUsage()
	for i = 1, dataCount do
		data[i] = function()
			return 123
		end
	end
	usage1 = GetMemoryUsage()
	
	print("Memory2", (usage1 - usage0)/dataCount, "bytes")
end

The hardcoded version results in 4 less bytes per closure (20 instead of 24). This is insignificant for a few functions, but these benefits definitely add up for large games.

Is this an attempt to redo Stravant’s Minify & Beautify Plugin?
If you need a potential tester/user, I do plan to use something for my plane system when I do sell it.

It’s an attempt to make my game more efficient and easy to develop long-term. It’s configurable and can make assumptions about all of the global utility stuff I put in _G, not just lua’s libraries. I also try to keep errors meaningful by not messing with line numbers or variable names too much. I might even add a way to describe variables using comments.
I’m too lazy to implement stuff I don’t use, so this:

print{}

results in: “Unexpected statement token {, line 1”

I’ve been working on this for a long time, so I think I’ll keep it to myself for now. If you want to see what it does to one of your scripts, feel free to send it to me.

3 Likes

fwiw, anything past 15 decimals doesn’t increase accuracy

I know, I just pasted it from the windows calculator.
Although that’s technically false in the case of: 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049 :stuck_out_tongue:

Actually something that really bothers me is that none of lua’s tostring functions always return an equivalent string:

local v = 2.99999999999999
print(v, v == 3)
> 3 false

That’s insane. Will you release this in any shape or form?

Just flying around a nebula with @Santa_Root

3 Likes

Probably will once I’m satisfied with it :stuck_out_tongue: .

Why the hell do you have 120,000 lines of code

See for yourself

2 Likes

That doesn’t answer my question :stuck_out_tongue:

More screenshots from Holiday’s World!

Wheel of Fortune! (Coming Soon)

@Locard’s House!

You can try it out today, here! 🌎Holiday's World - Roblox

12 Likes

Two can play at the vehicle building game!

8 Likes

Checked the game out, is it influenced by Maplestory?

The game is influenced by many games such as MapleStory, MeepCity, Legend of Zelda, Poptropica, Wizard 101, and many other games. It’s putting a lot of my childhood games and favorite games into a fun-packed adventure!

I’ve been working on a Tapu Lele model today! :smile:
yes, this is all CSG
image.jpg

10 Likes