diff --git a/tests/MyGame/Example/Test.lua b/tests/MyGame/Example/Test.lua
index 154067b..63b566c 100644
--- a/tests/MyGame/Example/Test.lua
+++ b/tests/MyGame/Example/Test.lua
@@ -1,32 +1,44 @@
--- automatically generated by the FlatBuffers compiler, do not modify
+--[[ MyGame.Example.Test
 
--- 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 Test = {} -- the module
-local Test_mt = {} -- the class metatable
+local Test = {}
+local mt = {}
 
 function Test.New()
-    local o = {}
-    setmetatable(o, {__index = Test_mt})
-    return o
-end
-function Test_mt:Init(buf, pos)
-    self.view = flatbuffers.view.New(buf, pos)
-end
-function Test_mt:A()
-    return self.view:Get(flatbuffers.N.Int16, self.view.pos + 0)
-end
-function Test_mt:B()
-    return self.view:Get(flatbuffers.N.Int8, self.view.pos + 2)
-end
-function Test.CreateTest(builder, a, b)
-    builder:Prep(2, 4)
-    builder:Pad(1)
-    builder:PrependInt8(b)
-    builder:PrependInt16(a)
-    return builder:Offset()
+  local o = {}
+  setmetatable(o, {__index = mt})
+  return o
 end
 
-return Test -- return the module
\ No newline at end of file
+function mt:Init(buf, pos)
+  self.view = flatbuffers.view.New(buf, pos)
+end
+
+function mt:A()
+  return self.view:Get(flatbuffers.N.Int16, self.view.pos + 0)
+end
+
+function mt:B()
+  return self.view:Get(flatbuffers.N.Int8, self.view.pos + 2)
+end
+
+function Test.CreateTest(builder, a, b)
+  builder:Prep(2, 4)
+  builder:Pad(1)
+  builder:PrependInt8(b)
+  builder:PrependInt16(a)
+  return builder:Offset()
+end
+
+return Test
\ No newline at end of file
