From f1f84beeda58c470b8a658206772fcdeaef39994 Mon Sep 17 00:00:00 2001 From: helixhorned Date: Fri, 5 Apr 2013 17:53:31 +0000 Subject: [PATCH] a.m32: Implement a Polymer "head light" emanating from your position in 3D mode. Toggled with Ctrl+Shift+[KP-]. Variable 'headlight_range' controls its range. For the implementation, a new event EVENT_PREDRAW3DSCREEN was added. git-svn-id: https://svn.eduke32.com/eduke32@3648 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/build/include/m32script.h | 1 + polymer/eduke32/build/src/build.c | 2 + polymer/eduke32/package/samples/a.m32 | 56 +++++++++++++++++++++++ polymer/eduke32/source/m32def.c | 1 + 4 files changed, 60 insertions(+) diff --git a/polymer/eduke32/build/include/m32script.h b/polymer/eduke32/build/include/m32script.h index 1ebf6eb0f..35f29d8f3 100644 --- a/polymer/eduke32/build/include/m32script.h +++ b/polymer/eduke32/build/include/m32script.h @@ -93,6 +93,7 @@ enum GameEvent_t { EVENT_PREKEYS3D, EVENT_LINKTAGS, EVENT_KEYPRESS, + EVENT_PREDRAW3DSCREEN, MAXEVENTS }; diff --git a/polymer/eduke32/build/src/build.c b/polymer/eduke32/build/src/build.c index da0e61aec..f6428ea38 100644 --- a/polymer/eduke32/build/src/build.c +++ b/polymer/eduke32/build/src/build.c @@ -471,6 +471,8 @@ void M32_ResetFakeRORTiles(void) void M32_DrawRoomsAndMasks(void) { + VM_OnEvent(EVENT_PREDRAW3DSCREEN, -1); + yax_preparedrawrooms(); drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum); yax_drawrooms(ExtAnalyzeSprites, cursectnum, 0, 0); diff --git a/polymer/eduke32/package/samples/a.m32 b/polymer/eduke32/package/samples/a.m32 index 7d4c7d5ae..e6c04e941 100644 --- a/polymer/eduke32/package/samples/a.m32 +++ b/polymer/eduke32/package/samples/a.m32 @@ -40,6 +40,10 @@ gamevar showrespawn_always 0 0 gamevar move_by_one 0 0 +// Polymer "head" light +gamevar headlight_enabled 0 0 +gamevar headlight_range 4000 0 + // see end of file for more user settings and examples ////////// END USER SETTINGS ////////// @@ -424,6 +428,24 @@ defstate fiddlewithlights } } } + else + { + // not aiming at sprite + + ifeitherctrl ifeithershift ifhitkey KEY_gMINUS + { + ife headlight_enabled 0 + { + set headlight_enabled 1 + quote "head light enabled" + } + else + { + set headlight_enabled 0 + quote "head light disabled" + } + } + } ends defstate do_move_by_one @@ -1119,6 +1141,40 @@ onevent EVENT_ANALYZESPRITES state tduplin endevent +defstate update_headlight + var li hrz + set li 0 + + ifvare headlight_enabled 0 + break + + ifvarn light[li].active 1 + break + + set light[li].x posx + set light[li].y posy + set light[li].z posz + set light[li].sector cursectnum + set hrz horiz + set light[li].horiz hrz + set light[li].angle ang + + set light[li].range headlight_range + set light[li].radius 256 + set light[li].faderadius 128 + + set light[li].r 255 + set light[li].g 255 + set light[li].b 255 + set light[li].priority 0 + + set light[li].tilenum 0 +ends + +onevent EVENT_PREDRAW3DSCREEN + state update_headlight +endevent + onevent EVENT_KEYS3D var l m diff --git a/polymer/eduke32/source/m32def.c b/polymer/eduke32/source/m32def.c index 5fe2a1f5d..997e8e052 100644 --- a/polymer/eduke32/source/m32def.c +++ b/polymer/eduke32/source/m32def.c @@ -3514,6 +3514,7 @@ static void C_AddDefaultDefinitions(void) C_AddDefinition("EVENT_PREKEYS3D", EVENT_PREKEYS3D, LABEL_EVENT); C_AddDefinition("EVENT_LINKTAGS", EVENT_LINKTAGS, LABEL_EVENT); C_AddDefinition("EVENT_KEYPRESS", EVENT_KEYPRESS, LABEL_EVENT); + C_AddDefinition("EVENT_PREDRAW3DSCREEN", EVENT_PREDRAW3DSCREEN, LABEL_EVENT); C_AddDefinition("CLIPMASK0", CLIPMASK0, LABEL_DEFINE); C_AddDefinition("CLIPMASK1", CLIPMASK1, LABEL_DEFINE);