The problem is that you are actually using the same object, not creating a new one.
Quick solution would be to clone your template bullet object
Add this function on the top:
--clone table
function clone(t)
local r={}
for k,v in pairs(t) do r[k]=v end
return r
end
Then, in your function, instead of doing:
local obj = {} obj = bullet
do
local obj = clone(bullet)