diff --git a/tests/MyGame/Example/Referrable.lua b/tests/MyGame/Example/Referrable.lua
index 9b0f5a1..3bd6b0a 100644
--- a/tests/MyGame/Example/Referrable.lua
+++ b/tests/MyGame/Example/Referrable.lua
@@ -1,35 +1,48 @@
--- automatically generated by the FlatBuffers compiler, do not modify
+--[[ MyGame.Example.Referrable
 
--- namespace: Example
+  Automatically generated by the FlatBuffers compiler, do not modify.
+  Or modify. I'm a message, not a cop.
+
+  flatc version: 2.0.6
+
+  Declared by  : //monster_test.fbs
+  Rooting type : MyGame.Example.Monster (//monster_test.fbs)
+
+--]]
 
 local flatbuffers = require('flatbuffers')
 
-local Referrable = {} -- the module
-local Referrable_mt = {} -- the class metatable
+local Referrable = {}
+local mt = {}
 
 function Referrable.New()
-    local o = {}
-    setmetatable(o, {__index = Referrable_mt})
-    return o
+  local o = {}
+  setmetatable(o, {__index = mt})
+  return o
 end
-function Referrable.GetRootAsReferrable(buf, offset)
-    local n = flatbuffers.N.UOffsetT:Unpack(buf, offset)
-    local o = Referrable.New()
-    o:Init(buf, n + offset)
-    return o
-end
-function Referrable_mt:Init(buf, pos)
-    self.view = flatbuffers.view.New(buf, pos)
-end
-function Referrable_mt:Id()
-    local o = self.view:Offset(4)
-    if o ~= 0 then
-        return self.view:Get(flatbuffers.N.Uint64, o + self.view.pos)
-    end
-    return 0
-end
-function Referrable.Start(builder) builder:StartObject(1) end
-function Referrable.AddId(builder, id) builder:PrependUint64Slot(0, id, 0) end
-function Referrable.End(builder) return builder:EndObject() end
 
-return Referrable -- return the module
\ No newline at end of file
+function mt:Init(buf, pos)
+  self.view = flatbuffers.view.New(buf, pos)
+end
+
+function mt:Id()
+  local o = self.view:Offset(4)
+  if o ~= 0 then
+    return self.view:Get(flatbuffers.N.Uint64, self.view.pos + o)
+  end
+  return 0
+end
+
+function Referrable.Start(builder)
+  builder:StartObject(1)
+end
+
+function Referrable.AddId(builder, id)
+  builder:PrependUint64Slot(0, id, 0)
+end
+
+function Referrable.End(builder)
+  return builder:EndObject()
+end
+
+return Referrable
\ No newline at end of file
