Add portal indicators to portal gun

This commit is contained in:
James Lambert 2023-11-17 22:35:35 -07:00
parent fba8e29cf7
commit b1e606ce3a
6 changed files with 61 additions and 6 deletions

View file

@ -0,0 +1 @@
-crop 64x32+141+277 -resize 32x16

View file

@ -6,11 +6,31 @@ materials:
b: 255
gSPGeometryMode:
set: [G_LIGHTING, G_SHADE, G_CULL_BACK]
clear: [G_ZBUFFER]
gDPSetCombineMode:
color: ["PRIMITIVE", "0", "SHADE", "0"]
gDPSetRenderMode: G_RM_OPA_SURF
gDPSetCycleType: G_CYC_1CYCLE
portal_gun_flare:
gDPSetTile:
filename: ../../portal_pak_modified/materials/sprites/grav_flare.png
fmt: G_IM_FMT_RGBA
siz: G_IM_SIZ_32b
s:
mirror: true
t:
mirror: true
tmem: 256
gDPSetRenderMode: G_RM_XLU_SURF
gDPSetCycleType: G_CYC_1CYCLE
gDPSetCombineMode:
color: ["TEXEL0", "0", "ENVIRONMENT", "0"]
alpha: ["0", "0", "0", "TEXEL0"]
gSPGeometryMode:
clear: [G_CULL_BACK, G_CULL_FRONT, G_TEXTURE_GEN, G_SHADE, G_LIGHTING]
portal_gun_metal:
gDPSetTile:
@ -23,6 +43,7 @@ materials:
gSPGeometryMode:
set: [G_LIGHTING, G_TEXTURE_GEN, G_SHADE, G_CULL_BACK]
clear: [G_ZBUFFER]
gDPSetCombineMode:
- color: ["PRIMITIVE", "0", "SHADE", "0"]
@ -58,7 +79,7 @@ materials:
gSPGeometryMode:
set: [G_LIGHTING, G_TEXTURE_GEN, G_SHADE]
clear: [G_CULL_BACK]
clear: [G_CULL_BACK, G_ZBUFFER]
gDPSetCombineMode:
color: ["PRIMITIVE", "0", "SHADE", "TEXEL0"]
@ -67,6 +88,23 @@ materials:
gDPSetRenderMode: G_RM_XLU_SURF
gDPSetCycleType: G_CYC_1CYCLE
portal_gun_shell:
gDPSetTile:
filename: ../../portal_pak_modified/materials/models/weapons/v_models/v_portalgun/v_portalgun.png
fmt: G_IM_FMT_RGBA
siz: G_IM_SIZ_16b
s:
wrap: false
t:
wrap: false
gSPGeometryMode:
set: [G_LIGHTING, G_SHADE, G_CULL_BACK]
clear: [G_TEXTURE_GEN, G_ZBUFFER]
gDPSetCombineMode:
color: ["SHADE", "0", "TEXEL0", "0"]
gDPSetRenderMode: G_RM_OPA_SURF
button_base:
gDPSetTile:
- null

View file

@ -18,9 +18,9 @@
#define PORTAL_GUN_MOI 0.00395833375f
struct Vector3 gPortalGunOffset = {0.120957, -0.113587, -0.20916};
struct Vector3 gPortalGunOffset = {0.100957, -0.093587, -0.20916};
struct Vector3 gPortalGunShootOffset = {0.120957, -0.113587, -0.08};
struct Vector3 gPortalGunForward = {0.1f, -0.1f, 1.0f};
struct Vector3 gPortalGunForward = {0.0f, -0.0f, 1.0f};
struct Vector3 gPortalGunShootForward = {0.3f, -0.25f, 1.0f};
struct Vector3 gPortalGunUp = {0.0f, 1.0f, 0.0f};
@ -116,7 +116,7 @@ void portalBallRender(struct PortalGunProjectile* projectile, struct RenderState
extern LookAt gLookAt;
void portalGunRenderReal(struct PortalGun* portalGun, struct RenderState* renderState, struct Camera* fromCamera, int portalGunVisible) {
void portalGunRenderReal(struct PortalGun* portalGun, struct RenderState* renderState, struct Camera* fromCamera, int portalGunVisible, int lastFiredIndex) {
struct MaterialState materialState;
materialStateInit(&materialState, DEFAULT_INDEX);
@ -146,11 +146,21 @@ void portalGunRenderReal(struct PortalGun* portalGun, struct RenderState* render
cameraModifyProjectionViewForPortalGun(fromCamera, renderState, PORTAL_GUN_NEAR_PLANE * SCENE_SCALE, (float)SCREEN_WD / (float)SCREEN_HT);
gSPLookAt(renderState->dl++, &gLookAt);
gDPPipeSync(renderState->dl++);
if (lastFiredIndex >= 0 && lastFiredIndex <= 1) {
struct Coloru8 color = gProjectileColor[lastFiredIndex];
gDPSetEnvColor(renderState->dl++, color.r, color.g, color.b, 255);
} else {
gDPSetEnvColor(renderState->dl++, 255, 255, 255, 255);
}
transformToMatrixL(&portalGun->rigidBody.transform, matrix, 512);
gSPMatrix(renderState->dl++, matrix, G_MTX_MODELVIEW | G_MTX_PUSH | G_MTX_MUL);
gSPDisplayList(renderState->dl++, portal_gun_v_portalgun_model_gfx);
gSPPopMatrix(renderState->dl++, G_MTX_MODELVIEW);
gSPDisplayList(renderState->dl++, static_default);
}
#define NO_HIT_DISTANCE 20.0f

View file

@ -39,7 +39,7 @@ struct PortalGun {
void portalGunInit(struct PortalGun* portalGun, struct Transform* at);
// void portalGunDummyRender(void* data, struct DynamicRenderDataList* renderList, struct RenderState* renderState);
void portalGunUpdate(struct PortalGun* portalGun, struct Player* player);
void portalGunRenderReal(struct PortalGun* portalGun, struct RenderState* renderState, struct Camera* fromCamera, int portalGunVisible);
void portalGunRenderReal(struct PortalGun* portalGun, struct RenderState* renderState, struct Camera* fromCamera, int portalGunVisible, int lastFiredIndex);
void portalGunFire(struct PortalGun* portalGun, int portalIndex, struct Ray* ray, struct Vector3* playerUp, int roomIndex);
void portalGunFireWorld(struct PortalGun* portalGun, int portalIndex, struct Vector3* from, struct Vector3* to, int roomIndex);

View file

@ -308,7 +308,13 @@ void sceneRender(struct Scene* scene, struct RenderState* renderState, struct Gr
// contactSolverDebugDraw(&gContactSolver, renderState);
portalGunRenderReal(&scene->portalGun, renderState, &scene->camera, scene->portalGun.portalGunVisible);
portalGunRenderReal(
&scene->portalGun,
renderState,
&scene->camera,
scene->portalGun.portalGunVisible,
scene->hud.lastPortalIndexShot
);
gDPPipeSync(renderState->dl++);
gDPSetRenderMode(renderState->dl++, G_RM_OPA_SURF, G_RM_OPA_SURF2);