diff --git a/tests/MyGame/Example/Stat.lua b/tests/MyGame/Example/Stat.lua
index 6999184..f621fd0 100644
--- a/tests/MyGame/Example/Stat.lua
+++ b/tests/MyGame/Example/Stat.lua
@@ -1,50 +1,71 @@
--- automatically generated by the FlatBuffers compiler, do not modify
+--[[ MyGame.Example.Stat
 
--- 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 Stat = {} -- the module
-local Stat_mt = {} -- the class metatable
+local Stat = {}
+local mt = {}
 
 function Stat.New()
-    local o = {}
-    setmetatable(o, {__index = Stat_mt})
-    return o
+  local o = {}
+  setmetatable(o, {__index = mt})
+  return o
 end
-function Stat.GetRootAsStat(buf, offset)
-    local n = flatbuffers.N.UOffsetT:Unpack(buf, offset)
-    local o = Stat.New()
-    o:Init(buf, n + offset)
-    return o
-end
-function Stat_mt:Init(buf, pos)
-    self.view = flatbuffers.view.New(buf, pos)
-end
-function Stat_mt:Id()
-    local o = self.view:Offset(4)
-    if o ~= 0 then
-        return self.view:String(o + self.view.pos)
-    end
-end
-function Stat_mt:Val()
-    local o = self.view:Offset(6)
-    if o ~= 0 then
-        return self.view:Get(flatbuffers.N.Int64, o + self.view.pos)
-    end
-    return 0
-end
-function Stat_mt:Count()
-    local o = self.view:Offset(8)
-    if o ~= 0 then
-        return self.view:Get(flatbuffers.N.Uint16, o + self.view.pos)
-    end
-    return 0
-end
-function Stat.Start(builder) builder:StartObject(3) end
-function Stat.AddId(builder, id) builder:PrependUOffsetTRelativeSlot(0, id, 0) end
-function Stat.AddVal(builder, val) builder:PrependInt64Slot(1, val, 0) end
-function Stat.AddCount(builder, count) builder:PrependUint16Slot(2, count, 0) end
-function Stat.End(builder) return builder:EndObject() end
 
-return Stat -- 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:String(self.view.pos + o)
+  end
+end
+
+function mt:Val()
+  local o = self.view:Offset(6)
+  if o ~= 0 then
+    return self.view:Get(flatbuffers.N.Int64, self.view.pos + o)
+  end
+  return 0
+end
+
+function mt:Count()
+  local o = self.view:Offset(8)
+  if o ~= 0 then
+    return self.view:Get(flatbuffers.N.Uint16, self.view.pos + o)
+  end
+  return 0
+end
+
+function Stat.Start(builder)
+  builder:StartObject(3)
+end
+
+function Stat.AddId(builder, id)
+  builder:PrependUOffsetTRelativeSlot(0, id, 0)
+end
+
+function Stat.AddVal(builder, val)
+  builder:PrependInt64Slot(1, val, 0)
+end
+
+function Stat.AddCount(builder, count)
+  builder:PrependUint16Slot(2, count, 0)
+end
+
+function Stat.End(builder)
+  return builder:EndObject()
+end
+
+return Stat
\ No newline at end of file
