diff --git a/tests/MyGame/Example/Ability.lua b/tests/MyGame/Example/Ability.lua
index 7fb664a..870ff81 100644
--- a/tests/MyGame/Example/Ability.lua
+++ b/tests/MyGame/Example/Ability.lua
@@ -1,31 +1,43 @@
--- automatically generated by the FlatBuffers compiler, do not modify
+--[[ MyGame.Example.Ability
 
--- 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 Ability = {} -- the module
-local Ability_mt = {} -- the class metatable
+local Ability = {}
+local mt = {}
 
 function Ability.New()
-    local o = {}
-    setmetatable(o, {__index = Ability_mt})
-    return o
-end
-function Ability_mt:Init(buf, pos)
-    self.view = flatbuffers.view.New(buf, pos)
-end
-function Ability_mt:Id()
-    return self.view:Get(flatbuffers.N.Uint32, self.view.pos + 0)
-end
-function Ability_mt:Distance()
-    return self.view:Get(flatbuffers.N.Uint32, self.view.pos + 4)
-end
-function Ability.CreateAbility(builder, id, distance)
-    builder:Prep(4, 8)
-    builder:PrependUint32(distance)
-    builder:PrependUint32(id)
-    return builder:Offset()
+  local o = {}
+  setmetatable(o, {__index = mt})
+  return o
 end
 
-return Ability -- 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()
+  return self.view:Get(flatbuffers.N.Uint32, self.view.pos + 0)
+end
+
+function mt:Distance()
+  return self.view:Get(flatbuffers.N.Uint32, self.view.pos + 4)
+end
+
+function Ability.CreateAbility(builder, id, distance)
+  builder:Prep(4, 8)
+  builder:PrependUint32(distance)
+  builder:PrependUint32(id)
+  return builder:Offset()
+end
+
+return Ability
\ No newline at end of file
