Modder application — Companion Pets 0.1.8 (AI-assisted Lua gameplay mod)

luigiprroo

Member
Dec 8, 2024
2
0
230
Hello! I would like to apply for Modder status and submit Companion Pets for staff review.

Companion Pets is a Lua gameplay companion mod for SM64CoopDX, not a pet skin pack. It uses WiddlePets as a separately installed dependency. The current version is 0.1.8, still labelled as a review candidate rather than an approved stable release.

It adds owner-specific pet health (8/8), physical knockback, following and safe platform navigation, coin healing, supported-enemy interactions, natural punch/dive pickup and carrying, fainting and revival for 20 coins or one life, and optional safe Mario rescue for one life. It has an English menu opened with Y + L or /companion.

Authorship disclosure: the gameplay design, direction and manual gameplay feedback are mine. The implementation, engine-source investigation, automated fixtures and documentation were developed with OpenAI Codex assistance. I am not presenting the code as exclusively hand-written Lua or claiming that every test was performed manually. Please assess this AI-assisted project under your qualification criteria.

Testing was performed against SM64CoopDX 1.5.1 and WiddlePets API 1.2. There are 87 local Python/Lupa checks (79 in the clean source archive), plus scripted tests in the real executable for health, interactions, knockback, platform movement, rescue/camera handling and two-client replication. Broader manual review and compatibility with every map, enemy and pet pack are not claimed.

Multiplayer limits are explicit: independent pet state and visible movement/carrying were tested with two clients, but paid interactions, pet coin pickup and pet attacks remain single-player only pending safe arbitration.

Credits: SM64CoopDX by the coop-deluxe team and contributors; WiddlePets by wibblus and contributors (GitHub - wibblus/widdle-pets: a buddy/pet mod for sm64coopdx! with API for other mods to add their own pets!). Companion Pets calls the public API; the package does not include WiddlePets scripts, models, textures or sounds. Its original integration has an included MIT LICENSE, which does not relicense dependencies. No permission to redistribute WiddlePets assets is claimed.

A clean install ZIP, full source ZIP and English test report are prepared for review. Below is an unmodified source component from the candidate. It is an integration module, not a standalone mod: main.lua initializes it with config.lua and safety.lua, calls start() only after an accepted nonlethal owner-local hit, and runs either its step() or the normal movement controller in a tick. targets.lua supplies the bounded target exclusion. The impulse changes native velocity and uses native object movement; it does not animate positions or teleport.

Thank you for reviewing it. If a different review channel is required for the full package, or if the AI-assisted authorship does not meet your requirements, please let me know.

LUA:
-- Owner-only impulse state. The native object mover remains the only integrator.
local Q=require("targets")
local K={age=0,active=false,caution=0,hits=0}
function K.init(c,s) K.c=c;K.safe=s end
function K.reset() K.active=false;K.caution=0;K.object=nil;K.source=nil end
function K.start(o,source,m)
    local x,z=source and source.oPosX or m.pos.x,source and source.oPosZ or m.pos.z
    local dx,dz=o.oPosX-x,o.oPosZ-z
    K.yaw=dx*dx+dz*dz>1 and atan2s(dz,dx) or o.oMoveAngleYaw+0x8000
    K.source={x=x,y=o.oPosY,z=z};K.object=o;K.age=0;K.active=true
    if source then Q.defer(source) end
    K.speed=K.c.knockbackSpeed;K.floor=o.oFloorHeight;K.hits=K.hits+1
    o.oCPJumpPhase=0;o.oCPJumpWaiting=0;o.oCPJumpCooldown=K.c.jumpRetry
    o.oMoveAngleYaw=K.yaw;o.oForwardVel=K.speed;o.oVelY=K.c.knockbackVertical
    o.oMoveFlags=(o.oMoveFlags & ~OBJ_MOVE_ON_GROUND)|OBJ_MOVE_LEFT_GROUND
end
function K.step(o)
    if K.caution>0 then K.caution=K.caution-1 end
    if not K.active then return false end
    if K.object~=o then K.reset();return false end
    K.age=K.age+1
    cur_obj_update_floor_and_resolve_wall_collisions(90)
    local x=o.oPosX+sins(K.yaw)*(K.speed+35)
    local z=o.oPosZ+coss(K.yaw)*(K.speed+35)
    local h,f=find_floor(x,o.oPosY+80,z)
    -- Stop horizontal recoil at an unverified edge; vertical physics continues.
    if K.safe.danger(f) or f.normal.y<0.65 or K.floor-h>K.c.descendMaxDrop then K.speed=0 end
    o.oGravity=-1.5;o.oMoveAngleYaw=K.yaw;o.oFaceAngleYaw=K.yaw
    o.oForwardVel=K.speed
    cur_obj_move_standard(78)
    K.speed=math.min(K.speed,o.oForwardVel)*K.c.knockbackDamping
    if K.age>=K.c.knockbackRecovery and (o.oMoveFlags & OBJ_MOVE_ON_GROUND)~=0
        or K.age>=K.c.knockbackTimeout then
        K.active=false;K.caution=K.c.knockbackCaution
    end
    return true
end
function K.retreat(o)
    if K.caution<=0 or not K.source then return nil end
    local dx,dz=o.oPosX-K.source.x,o.oPosZ-K.source.z
    local d=math.sqrt(dx*dx+dz*dz)
    if d>=K.c.knockbackRetreatRange then return nil end
    local yaw=d>1 and atan2s(dz,dx) or K.yaw
    return {x=o.oPosX+sins(yaw)*160,y=o.oPosY,z=o.oPosZ+coss(yaw)*160}
end
return K
 
Hello! I would like to apply for Modder status and submit Companion Pets for staff review.

Companion Pets is a Lua gameplay companion mod for SM64CoopDX, not a pet skin pack. It uses WiddlePets as a separately installed dependency. The current version is 0.1.8, still labelled as a review candidate rather than an approved stable release.

It adds owner-specific pet health (8/8), physical knockback, following and safe platform navigation, coin healing, supported-enemy interactions, natural punch/dive pickup and carrying, fainting and revival for 20 coins or one life, and optional safe Mario rescue for one life. It has an English menu opened with Y + L or /companion.

Authorship disclosure: the gameplay design, direction and manual gameplay feedback are mine. The implementation, engine-source investigation, automated fixtures and documentation were developed with OpenAI Codex assistance. I am not presenting the code as exclusively hand-written Lua or claiming that every test was performed manually. Please assess this AI-assisted project under your qualification criteria.

Testing was performed against SM64CoopDX 1.5.1 and WiddlePets API 1.2. There are 87 local Python/Lupa checks (79 in the clean source archive), plus scripted tests in the real executable for health, interactions, knockback, platform movement, rescue/camera handling and two-client replication. Broader manual review and compatibility with every map, enemy and pet pack are not claimed.

Multiplayer limits are explicit: independent pet state and visible movement/carrying were tested with two clients, but paid interactions, pet coin pickup and pet attacks remain single-player only pending safe arbitration.

Credits: SM64CoopDX by the coop-deluxe team and contributors; WiddlePets by wibblus and contributors (GitHub - wibblus/widdle-pets: a buddy/pet mod for sm64coopdx! with API for other mods to add their own pets!). Companion Pets calls the public API; the package does not include WiddlePets scripts, models, textures or sounds. Its original integration has an included MIT LICENSE, which does not relicense dependencies. No permission to redistribute WiddlePets assets is claimed.

A clean install ZIP, full source ZIP and English test report are prepared for review. Below is an unmodified source component from the candidate. It is an integration module, not a standalone mod: main.lua initializes it with config.lua and safety.lua, calls start() only after an accepted nonlethal owner-local hit, and runs either its step() or the normal movement controller in a tick. targets.lua supplies the bounded target exclusion. The impulse changes native velocity and uses native object movement; it does not animate positions or teleport.

Thank you for reviewing it. If a different review channel is required for the full package, or if the AI-assisted authorship does not meet your requirements, please let me know.

LUA:
-- Owner-only impulse state. The native object mover remains the only integrator.
local Q=require("targets")
local K={age=0,active=false,caution=0,hits=0}
function K.init(c,s) K.c=c;K.safe=s end
function K.reset() K.active=false;K.caution=0;K.object=nil;K.source=nil end
function K.start(o,source,m)
    local x,z=source and source.oPosX or m.pos.x,source and source.oPosZ or m.pos.z
    local dx,dz=o.oPosX-x,o.oPosZ-z
    K.yaw=dx*dx+dz*dz>1 and atan2s(dz,dx) or o.oMoveAngleYaw+0x8000
    K.source={x=x,y=o.oPosY,z=z};K.object=o;K.age=0;K.active=true
    if source then Q.defer(source) end
    K.speed=K.c.knockbackSpeed;K.floor=o.oFloorHeight;K.hits=K.hits+1
    o.oCPJumpPhase=0;o.oCPJumpWaiting=0;o.oCPJumpCooldown=K.c.jumpRetry
    o.oMoveAngleYaw=K.yaw;o.oForwardVel=K.speed;o.oVelY=K.c.knockbackVertical
    o.oMoveFlags=(o.oMoveFlags & ~OBJ_MOVE_ON_GROUND)|OBJ_MOVE_LEFT_GROUND
end
function K.step(o)
    if K.caution>0 then K.caution=K.caution-1 end
    if not K.active then return false end
    if K.object~=o then K.reset();return false end
    K.age=K.age+1
    cur_obj_update_floor_and_resolve_wall_collisions(90)
    local x=o.oPosX+sins(K.yaw)*(K.speed+35)
    local z=o.oPosZ+coss(K.yaw)*(K.speed+35)
    local h,f=find_floor(x,o.oPosY+80,z)
    -- Stop horizontal recoil at an unverified edge; vertical physics continues.
    if K.safe.danger(f) or f.normal.y<0.65 or K.floor-h>K.c.descendMaxDrop then K.speed=0 end
    o.oGravity=-1.5;o.oMoveAngleYaw=K.yaw;o.oFaceAngleYaw=K.yaw
    o.oForwardVel=K.speed
    cur_obj_move_standard(78)
    K.speed=math.min(K.speed,o.oForwardVel)*K.c.knockbackDamping
    if K.age>=K.c.knockbackRecovery and (o.oMoveFlags & OBJ_MOVE_ON_GROUND)~=0
        or K.age>=K.c.knockbackTimeout then
        K.active=false;K.caution=K.c.knockbackCaution
    end
    return true
end
function K.retreat(o)
    if K.caution<=0 or not K.source then return nil end
    local dx,dz=o.oPosX-K.source.x,o.oPosZ-K.source.z
    local d=math.sqrt(dx*dx+dz*dz)
    if d>=K.c.knockbackRetreatRange then return nil end
    local yaw=d>1 and atan2s(dz,dx) or K.yaw
    return {x=o.oPosX+sins(yaw)*160,y=o.oPosY,z=o.oPosZ+coss(yaw)*160}
end
return K
vibe coded mods arent allowed here
 
vibe coded mods arent allowed here
Thanks for letting me know.


I understand the concern about AI-generated code. I’ve been transparent about using Codex to help develop Companion Pets, while I handled the gameplay design, testing, feedback, and feature decisions.


Could you point me to the specific community rule regarding AI-assisted mods?


I’d like to hear from the moderation team whether this project is eligible for review before proceeding further.
 

Users who are viewing this thread