<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.eduke32.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=CONAN</id>
	<title>EDukeWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.eduke32.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=CONAN"/>
	<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/wiki/Special:Contributions/CONAN"/>
	<updated>2026-05-23T22:29:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.47.0-alpha</generator>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=5924</id>
		<title>Showview</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=5924"/>
		<updated>2007-02-16T17:47:26Z</updated>

		<summary type="html">&lt;p&gt;CONAN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;showview &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;angle&amp;gt; &amp;lt;horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Displays on-screen the view from in-game coordinates (&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;z&amp;gt;), looking at angle &amp;lt;angle&amp;gt; and with z-angle &amp;lt;horiz&amp;gt;, between screen coordinates (&amp;lt;scrn_x1&amp;gt;,&amp;lt;scrn_y1&amp;gt;) and (&amp;lt;scrn_x2&amp;gt;,&amp;lt;scrn_y2&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sector&amp;gt; is the sector that contains the in-game coordinates.&lt;br /&gt;
&lt;br /&gt;
The on-screen coordinates can be in any shape; they do not have to be in the same x-y ratio as the screen resolution. However, different ratios can result in warping or graphical glitches in the view. The on-screen coordinates are in 320x200 scale.&lt;br /&gt;
&lt;br /&gt;
Keep in mind when using this command that the game will have to completely redraw everything from the specified perspective, which can produce a sizeable framerate hit.&lt;br /&gt;
&lt;br /&gt;
This example will embed a small version of the player&#039;s view near the top left corner of the screen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getplayer[THISACTOR].posx x&lt;br /&gt;
getplayer[THISACTOR].posy y&lt;br /&gt;
getplayer[THISACTOR].posz z&lt;br /&gt;
getplayer[THISACTOR].angle ang&lt;br /&gt;
getplayer[THISACTOR].horiz horiz&lt;br /&gt;
getplayer[THISACTOR].horizoff temp&lt;br /&gt;
addvarvar horiz temp&lt;br /&gt;
updatesectorz x y z sect&lt;br /&gt;
showview x y z ang horiz sect 16 8 56 39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This lengthy example will create a &amp;quot;gun camera&amp;quot; that shows a closeup view of wherever the player is currently aiming. In addition to showview and basic EDuke commands, it also uses [[updatesectorz]], [[myos]], and [[hitscan]], as well as the [[event]] [[EVENT_DISPLAYREST]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gamevar sv_scrnx1 0 0&lt;br /&gt;
gamevar sv_scrny1 0 0&lt;br /&gt;
gamevar sv_scrnx2 0 0&lt;br /&gt;
gamevar sv_scrny2 0 0&lt;br /&gt;
gamevar sv_sect 0 0&lt;br /&gt;
gamevar sv_temp1 0 0&lt;br /&gt;
gamevar sv_temp2 0 0&lt;br /&gt;
gamevar sv_x 0 0&lt;br /&gt;
gamevar sv_y 0 0&lt;br /&gt;
gamevar sv_z 0 0&lt;br /&gt;
gamevar sv_hitx 0 0&lt;br /&gt;
gamevar sv_hity 0 0&lt;br /&gt;
gamevar sv_hitz 0 0&lt;br /&gt;
gamevar sv_cos 0 0&lt;br /&gt;
gamevar sv_sin 0 0&lt;br /&gt;
gamevar sv_ang 0 0&lt;br /&gt;
gamevar sv_horiz 0 0&lt;br /&gt;
state sv_playerview&lt;br /&gt;
  getplayer[THISACTOR].posx sv_x&lt;br /&gt;
  getplayer[THISACTOR].posy sv_y&lt;br /&gt;
  getplayer[THISACTOR].posz sv_z&lt;br /&gt;
  subvar sv_z 512&lt;br /&gt;
  getplayer[THISACTOR].cursectnum sv_sect&lt;br /&gt;
ends&lt;br /&gt;
onevent EVENT_DISPLAYREST {&lt;br /&gt;
//get coords&lt;br /&gt;
  setvar sv_scrnx1 23&lt;br /&gt;
  setvar sv_scrny1 16&lt;br /&gt;
  setvarvar sv_scrnx2 sv_scrnx1 addvar sv_scrnx2 50&lt;br /&gt;
  setvarvar sv_scrny2 sv_scrny1 addvar sv_scrny2 47 // 31 for correct ratio&lt;br /&gt;
//display frame&lt;br /&gt;
  setvarvar sv_temp1 sv_scrnx1 subvar sv_temp1 7&lt;br /&gt;
  setvarvar sv_temp2 sv_scrny1 subvar sv_temp2 8&lt;br /&gt;
  myos sv_temp1 sv_temp2 SCREENBREAK6 0 16&lt;br /&gt;
//do the hitscan&lt;br /&gt;
  getplayer[THISACTOR].ang sv_ang&lt;br /&gt;
  getplayer[THISACTOR].horiz sv_horiz&lt;br /&gt;
  getplayer[THISACTOR].posx sv_hitx&lt;br /&gt;
  getplayer[THISACTOR].posy sv_hity&lt;br /&gt;
  getplayer[THISACTOR].posz sv_hitz&lt;br /&gt;
  getplayer[THISACTOR].cursectnum sv_temp2&lt;br /&gt;
  subvar sv_hitz 512&lt;br /&gt;
  cos sv_cos sv_ang&lt;br /&gt;
  sin sv_sin sv_ang&lt;br /&gt;
  setvar sv_temp1 100&lt;br /&gt;
  subvarvar sv_temp1 sv_horiz&lt;br /&gt;
  getplayer[THISACTOR].horizoff sv_horiz&lt;br /&gt;
  subvarvar sv_temp1 sv_horiz&lt;br /&gt;
  shiftvarl sv_temp1 11&lt;br /&gt;
  hitscan sv_hitx sv_hity sv_hitz sv_temp2 sv_cos sv_sin sv_temp1 sv_temp2 sv_temp1 sv_temp1 sv_hitx sv_hity sv_hitz CLIPMASK1&lt;br /&gt;
&lt;br /&gt;
  getplayer[THISACTOR].horiz sv_temp1&lt;br /&gt;
  getplayer[THISACTOR].horizoff sv_horiz&lt;br /&gt;
  addvarvar sv_horiz sv_temp1&lt;br /&gt;
&lt;br /&gt;
//get distance between player and hitscan location&lt;br /&gt;
  getplayer[THISACTOR].posx sv_x&lt;br /&gt;
  getplayer[THISACTOR].posy sv_y&lt;br /&gt;
  getplayer[THISACTOR].posz sv_z&lt;br /&gt;
  subvarvar sv_x sv_hitx&lt;br /&gt;
  mulvarvar sv_x sv_x&lt;br /&gt;
  subvarvar sv_y sv_hity&lt;br /&gt;
  mulvarvar sv_y sv_y&lt;br /&gt;
  addvarvar sv_x sv_y&lt;br /&gt;
  sqrt sv_x sv_x&lt;br /&gt;
&lt;br /&gt;
  ifvarl sv_x 768 state sv_playerview //if dist &amp;lt; 768, just show the player&#039;s view&lt;br /&gt;
  else { //otherwise, move camera 768 units back from hitscan location on x-y plane and adjust z accordingly&lt;br /&gt;
	subvarvar sv_z sv_hitz&lt;br /&gt;
	mulvar sv_z 768&lt;br /&gt;
	ifvare sv_x 0 setvar sv_x 1&lt;br /&gt;
	divvarvar sv_z sv_x&lt;br /&gt;
	addvarvar sv_z sv_hitz&lt;br /&gt;
	setvarvar sv_x sv_hitx&lt;br /&gt;
	setvarvar sv_y sv_hity&lt;br /&gt;
	mulvar sv_cos -768&lt;br /&gt;
	mulvar sv_sin -768&lt;br /&gt;
	divvar sv_cos 16384&lt;br /&gt;
	divvar sv_sin 16384&lt;br /&gt;
	addvarvar sv_x sv_cos&lt;br /&gt;
	addvarvar sv_y sv_sin&lt;br /&gt;
	subvar sv_z 512&lt;br /&gt;
//if the calculated position isn&#039;t in a sector (this does happen) then just show the player&#039;s view&lt;br /&gt;
	updatesectorz sv_x sv_y sv_z sv_sect&lt;br /&gt;
	ifvare sv_sect -1 state sv_playerview&lt;br /&gt;
//make sure the camera can still see the hitscan location&lt;br /&gt;
	cansee sv_x sv_y sv_z sv_sect sv_hitx sv_hity sv_hitz sv_temp2 sv_temp1&lt;br /&gt;
	ifvare sv_temp1 0 state sv_playerview&lt;br /&gt;
  }&lt;br /&gt;
//check again to make sure we&#039;re in a sector&lt;br /&gt;
  ifvarn sv_sect -1 {&lt;br /&gt;
	//x y z ang horiz sect scrn_x scrn_y scrn_x2 scrn_y2&lt;br /&gt;
	showview sv_x sv_y sv_z sv_ang sv_horiz sv_sect sv_scrnx1 sv_scrny1 sv_scrnx2 sv_scrny2&lt;br /&gt;
  }&lt;br /&gt;
//display crosshair&lt;br /&gt;
  addvarvar sv_scrnx1 sv_scrnx2 divvar sv_scrnx1 2&lt;br /&gt;
  addvarvar sv_scrny1 sv_scrny2 divvar sv_scrny1 2&lt;br /&gt;
  myos sv_scrnx1 sv_scrny1 CROSSHAIR 0 0&lt;br /&gt;
}&lt;br /&gt;
endevent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Screen drawing commands]]&lt;/div&gt;</summary>
		<author><name>CONAN</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=5923</id>
		<title>Showview</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=5923"/>
		<updated>2007-02-16T10:05:45Z</updated>

		<summary type="html">&lt;p&gt;CONAN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;showview &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;angle&amp;gt; &amp;lt;horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Displays on-screen the view from in-game coordinates (&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;z&amp;gt;), looking at angle &amp;lt;angle&amp;gt; and with z-angle &amp;lt;horiz&amp;gt;, between screen coordinates (&amp;lt;scrn_x1&amp;gt;,&amp;lt;scrn_y1&amp;gt;) and (&amp;lt;scrn_x2&amp;gt;,&amp;lt;scrn_y2&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sector&amp;gt; is the sector that contains the in-game coordinates.&lt;br /&gt;
&lt;br /&gt;
The on-screen coordinates can be in any shape; they do not have to be in the same x-y ratio as the screen resolution. However, different ratios can result in warping or graphical glitches in the view. The on-screen coordinates are in 320x200 scale.&lt;br /&gt;
&lt;br /&gt;
Keep in mind when using this command that the game will have to completely redraw everything from the specified perspective, which can produce a sizeable framerate hit.&lt;br /&gt;
&lt;br /&gt;
This example will embed a small version of the player&#039;s view near the top left corner of the screen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getplayer[THISACTOR].posx x&lt;br /&gt;
getplayer[THISACTOR].posy y&lt;br /&gt;
getplayer[THISACTOR].posz z&lt;br /&gt;
getplayer[THISACTOR].angle ang&lt;br /&gt;
getplayer[THISACTOR].horiz horiz&lt;br /&gt;
getplayer[THISACTOR].horizoff temp&lt;br /&gt;
addvarvar horiz temp&lt;br /&gt;
updatesectorz x y z sect&lt;br /&gt;
showview x y z ang horiz sect 16 8 56 39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This lengthy example will create a &amp;quot;gun camera&amp;quot; that shows a closeup view of wherever the player is currently aiming. In addition to showview and basic EDuke commands, it also uses [[updatesectorz]], [[myos]], and [[hitscan]], as well as the [[event]] [[EVENT_DISPLAYREST]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gamevar sv_scrnx1 0 0&lt;br /&gt;
gamevar sv_scrny1 0 0&lt;br /&gt;
gamevar sv_scrnx2 0 0&lt;br /&gt;
gamevar sv_scrny2 0 0&lt;br /&gt;
gamevar sv_sect 0 0&lt;br /&gt;
gamevar sv_temp1 0 0&lt;br /&gt;
gamevar sv_temp2 0 0&lt;br /&gt;
gamevar sv_x 0 0&lt;br /&gt;
gamevar sv_y 0 0&lt;br /&gt;
gamevar sv_z 0 0&lt;br /&gt;
gamevar sv_hitx 0 0&lt;br /&gt;
gamevar sv_hity 0 0&lt;br /&gt;
gamevar sv_hitz 0 0&lt;br /&gt;
gamevar sv_cos 0 0&lt;br /&gt;
gamevar sv_sin 0 0&lt;br /&gt;
gamevar sv_ang 0 0&lt;br /&gt;
gamevar sv_horiz 0 0&lt;br /&gt;
state sv_playerview&lt;br /&gt;
  getplayer[THISACTOR].posx sv_x&lt;br /&gt;
  getplayer[THISACTOR].posy sv_y&lt;br /&gt;
  getplayer[THISACTOR].posz sv_z&lt;br /&gt;
  subvar sv_z 512&lt;br /&gt;
  updatesectorz sv_x sv_y sv_z sv_sect&lt;br /&gt;
ends&lt;br /&gt;
onevent EVENT_DISPLAYREST {&lt;br /&gt;
//get coords&lt;br /&gt;
  setvar sv_scrnx1 23&lt;br /&gt;
  setvar sv_scrny1 16&lt;br /&gt;
  setvarvar sv_scrnx2 sv_scrnx1 addvar sv_scrnx2 50&lt;br /&gt;
  setvarvar sv_scrny2 sv_scrny1 addvar sv_scrny2 47 // 31 for correct ratio&lt;br /&gt;
//display frame&lt;br /&gt;
  setvarvar sv_temp1 sv_scrnx1 subvar sv_temp1 7&lt;br /&gt;
  setvarvar sv_temp2 sv_scrny1 subvar sv_temp2 8&lt;br /&gt;
  myos sv_temp1 sv_temp2 SCREENBREAK6 0 16&lt;br /&gt;
//do the hitscan&lt;br /&gt;
  getplayer[THISACTOR].ang sv_ang&lt;br /&gt;
  getplayer[THISACTOR].horiz sv_horiz&lt;br /&gt;
  getplayer[THISACTOR].posx sv_hitx&lt;br /&gt;
  getplayer[THISACTOR].posy sv_hity&lt;br /&gt;
  getplayer[THISACTOR].posz sv_hitz&lt;br /&gt;
  getplayer[THISACTOR].cursectnum sv_temp2&lt;br /&gt;
  subvar sv_hitz 512&lt;br /&gt;
  cos sv_cos sv_ang&lt;br /&gt;
  sin sv_sin sv_ang&lt;br /&gt;
  setvar sv_temp1 100&lt;br /&gt;
  subvarvar sv_temp1 sv_horiz&lt;br /&gt;
  getplayer[THISACTOR].horizoff sv_horiz&lt;br /&gt;
  subvarvar sv_temp1 sv_horiz&lt;br /&gt;
  shiftvarl sv_temp1 11&lt;br /&gt;
  hitscan sv_hitx sv_hity sv_hitz sv_temp2 sv_cos sv_sin sv_temp1 sv_temp2 sv_temp1 sv_temp1 sv_hitx sv_hity sv_hitz CLIPMASK1&lt;br /&gt;
&lt;br /&gt;
  getplayer[THISACTOR].horiz sv_temp1&lt;br /&gt;
  getplayer[THISACTOR].horizoff sv_horiz&lt;br /&gt;
  addvarvar sv_horiz sv_temp1&lt;br /&gt;
&lt;br /&gt;
//get distance between player and hitscan location&lt;br /&gt;
  getplayer[THISACTOR].posx sv_x&lt;br /&gt;
  getplayer[THISACTOR].posy sv_y&lt;br /&gt;
  getplayer[THISACTOR].posz sv_z&lt;br /&gt;
  subvarvar sv_x sv_hitx&lt;br /&gt;
  mulvarvar sv_x sv_x&lt;br /&gt;
  subvarvar sv_y sv_hity&lt;br /&gt;
  mulvarvar sv_y sv_y&lt;br /&gt;
  addvarvar sv_x sv_y&lt;br /&gt;
  sqrt sv_x sv_x&lt;br /&gt;
&lt;br /&gt;
  ifvarl sv_x 768 state sv_playerview //if dist &amp;lt; 768, just show the player&#039;s view&lt;br /&gt;
  else { //otherwise, move camera 768 units back from hitscan location on x-y plane and adjust z accordingly&lt;br /&gt;
	subvarvar sv_z sv_hitz&lt;br /&gt;
	mulvar sv_z 768&lt;br /&gt;
	ifvare sv_x 0 setvar sv_x 1&lt;br /&gt;
	divvarvar sv_z sv_x&lt;br /&gt;
	addvarvar sv_z sv_hitz&lt;br /&gt;
	setvarvar sv_x sv_hitx&lt;br /&gt;
	setvarvar sv_y sv_hity&lt;br /&gt;
	mulvar sv_cos -768&lt;br /&gt;
	mulvar sv_sin -768&lt;br /&gt;
	divvar sv_cos 16384&lt;br /&gt;
	divvar sv_sin 16384&lt;br /&gt;
	addvarvar sv_x sv_cos&lt;br /&gt;
	addvarvar sv_y sv_sin&lt;br /&gt;
	subvar sv_z 512&lt;br /&gt;
//if the calculated position isn&#039;t in a sector (this does happen) then just show the player&#039;s view&lt;br /&gt;
	updatesectorz sv_x sv_y sv_z sv_sect&lt;br /&gt;
	ifvare sv_sect -1 state sv_playerview&lt;br /&gt;
//make sure the camera can still see the hitscan location&lt;br /&gt;
	cansee sv_x sv_y sv_z sv_sect sv_hitx sv_hity sv_hitz sv_temp2 sv_temp1&lt;br /&gt;
	ifvare sv_temp1 0 state sv_playerview&lt;br /&gt;
  }&lt;br /&gt;
//check again to make sure we&#039;re in a sector&lt;br /&gt;
  ifvarn sv_sect -1 {&lt;br /&gt;
	//x y z ang horiz sect scrn_x scrn_y scrn_x2 scrn_y2&lt;br /&gt;
	showview sv_x sv_y sv_z sv_ang sv_horiz sv_sect sv_scrnx1 sv_scrny1 sv_scrnx2 sv_scrny2&lt;br /&gt;
  }&lt;br /&gt;
//display crosshair&lt;br /&gt;
  addvarvar sv_scrnx1 sv_scrnx2 divvar sv_scrnx1 2&lt;br /&gt;
  addvarvar sv_scrny1 sv_scrny2 divvar sv_scrny1 2&lt;br /&gt;
  myos sv_scrnx1 sv_scrny1 CROSSHAIR 0 0&lt;br /&gt;
}&lt;br /&gt;
endevent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Screen drawing commands]]&lt;/div&gt;</summary>
		<author><name>CONAN</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=5922</id>
		<title>Showview</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=5922"/>
		<updated>2007-02-16T04:58:55Z</updated>

		<summary type="html">&lt;p&gt;CONAN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;showview &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;angle&amp;gt; &amp;lt;horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Displays on-screen the view from in-game coordinates (&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;z&amp;gt;), looking at angle &amp;lt;angle&amp;gt; and with z-angle &amp;lt;horiz&amp;gt;, between screen coordinates (&amp;lt;scrn_x1&amp;gt;,&amp;lt;scrn_y1&amp;gt;) and (&amp;lt;scrn_x2&amp;gt;,&amp;lt;scrn_y2&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sector&amp;gt; is the sector that contains the in-game coordinates.&lt;br /&gt;
&lt;br /&gt;
The on-screen coordinates can be in any shape; they do not have to be in the same x-y ratio as the screen resolution. However, different ratios can result in warping or graphical glitches in the view. The on-screen coordinates are in 320x200 scale.&lt;br /&gt;
&lt;br /&gt;
Keep in mind when using this command that the game will have to completely redraw everything from the specified perspective, which can produce a sizeable framerate hit.&lt;br /&gt;
&lt;br /&gt;
This example will embed a small version of the player&#039;s view near the top left corner of the screen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getplayer[THISACTOR].posx x&lt;br /&gt;
getplayer[THISACTOR].posy y&lt;br /&gt;
getplayer[THISACTOR].posz z&lt;br /&gt;
getplayer[THISACTOR].angle ang&lt;br /&gt;
getplayer[THISACTOR].horiz horiz&lt;br /&gt;
getplayer[THISACTOR].horizoff temp&lt;br /&gt;
addvarvar horiz temp&lt;br /&gt;
updatesectorz x y z sect&lt;br /&gt;
showview x y z ang horiz sect 16 8 56 39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This lengthy example will create a &amp;quot;gun camera&amp;quot; that shows a closeup view of wherever the player is currently aiming. In addition to showview and basic EDuke commands, it also uses [[updatesectorz]], [[myos]], and [[hitscan]], as well as the [[event]] [[EVENT_DISPLAYREST]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gamevar sv_scrnx1 0 0&lt;br /&gt;
gamevar sv_scrny1 0 0&lt;br /&gt;
gamevar sv_scrnx2 0 0&lt;br /&gt;
gamevar sv_scrny2 0 0&lt;br /&gt;
gamevar sv_sect 0 0&lt;br /&gt;
gamevar sv_temp1 0 0&lt;br /&gt;
gamevar sv_temp2 0 0&lt;br /&gt;
gamevar sv_x 0 0&lt;br /&gt;
gamevar sv_y 0 0&lt;br /&gt;
gamevar sv_z 0 0&lt;br /&gt;
gamevar sv_hitx 0 0&lt;br /&gt;
gamevar sv_hity 0 0&lt;br /&gt;
gamevar sv_hitz 0 0&lt;br /&gt;
gamevar sv_cos 0 0&lt;br /&gt;
gamevar sv_sin 0 0&lt;br /&gt;
gamevar sv_ang 0 0&lt;br /&gt;
gamevar sv_horiz 0 0&lt;br /&gt;
onevent EVENT_DISPLAYREST {&lt;br /&gt;
//get coords&lt;br /&gt;
  setvar sv_scrnx1 23&lt;br /&gt;
  setvar sv_scrny1 16&lt;br /&gt;
  setvarvar sv_scrnx2 sv_scrnx1 addvar sv_scrnx2 50&lt;br /&gt;
  setvarvar sv_scrny2 sv_scrny1 addvar sv_scrny2 47 // 31 for correct ratio&lt;br /&gt;
//display frame&lt;br /&gt;
  setvarvar sv_temp1 sv_scrnx1 subvar sv_temp1 7&lt;br /&gt;
  setvarvar sv_temp2 sv_scrny1 subvar sv_temp2 8&lt;br /&gt;
  myos sv_temp1 sv_temp2 SCREENBREAK6 0 16&lt;br /&gt;
//do the hitscan&lt;br /&gt;
  getplayer[THISACTOR].ang sv_ang&lt;br /&gt;
  getplayer[THISACTOR].horiz sv_horiz&lt;br /&gt;
  getplayer[THISACTOR].posx sv_hitx&lt;br /&gt;
  getplayer[THISACTOR].posy sv_hity&lt;br /&gt;
  getplayer[THISACTOR].posz sv_hitz&lt;br /&gt;
  getplayer[THISACTOR].cursectnum sv_temp2&lt;br /&gt;
  subvar sv_hitz 512&lt;br /&gt;
  cos sv_cos sv_ang&lt;br /&gt;
  sin sv_sin sv_ang&lt;br /&gt;
  setvar sv_temp1 100&lt;br /&gt;
  subvarvar sv_temp1 sv_horiz&lt;br /&gt;
  getplayer[THISACTOR].horizoff sv_horiz&lt;br /&gt;
  subvarvar sv_temp1 sv_horiz&lt;br /&gt;
  shiftvarl sv_temp1 11&lt;br /&gt;
  hitscan sv_hitx sv_hity sv_hitz sv_temp2 sv_cos sv_sin sv_temp1 sv_temp1 sv_temp1 sv_temp1 sv_hitx sv_hity sv_hitz CLIPMASK1&lt;br /&gt;
&lt;br /&gt;
  getplayer[THISACTOR].horiz sv_temp1&lt;br /&gt;
  getplayer[THISACTOR].horizoff sv_horiz&lt;br /&gt;
  addvarvar sv_horiz sv_temp1&lt;br /&gt;
&lt;br /&gt;
//get distance between player and hitscan location&lt;br /&gt;
  getplayer[THISACTOR].posx sv_x&lt;br /&gt;
  getplayer[THISACTOR].posy sv_y&lt;br /&gt;
  getplayer[THISACTOR].posz sv_z&lt;br /&gt;
  subvarvar sv_x sv_hitx&lt;br /&gt;
  mulvarvar sv_x sv_x&lt;br /&gt;
  subvarvar sv_y sv_hity&lt;br /&gt;
  mulvarvar sv_y sv_y&lt;br /&gt;
  addvarvar sv_x sv_y&lt;br /&gt;
  sqrt sv_x sv_x&lt;br /&gt;
&lt;br /&gt;
  ifvarl sv_x 768 { //if dist &amp;lt; 768, just show the player&#039;s view&lt;br /&gt;
	getplayer[THISACTOR].posx sv_x&lt;br /&gt;
	getplayer[THISACTOR].posy sv_y&lt;br /&gt;
	subvar sv_z 512&lt;br /&gt;
	updatesectorz sv_x sv_y sv_z sv_sect&lt;br /&gt;
  }&lt;br /&gt;
  else { //otherwise, move camera 768 units back from hitscan location on x-y plane and adjust z accordingly&lt;br /&gt;
	subvarvar sv_z sv_hitz&lt;br /&gt;
	mulvar sv_z 768&lt;br /&gt;
	ifvare sv_x 0 setvar sv_x 1&lt;br /&gt;
	divvarvar sv_z sv_x&lt;br /&gt;
	addvarvar sv_z sv_hitz&lt;br /&gt;
	setvarvar sv_x sv_hitx&lt;br /&gt;
	setvarvar sv_y sv_hity&lt;br /&gt;
	mulvar sv_cos -768&lt;br /&gt;
	mulvar sv_sin -768&lt;br /&gt;
	divvar sv_cos 16384&lt;br /&gt;
	divvar sv_sin 16384&lt;br /&gt;
	addvarvar sv_x sv_cos&lt;br /&gt;
	addvarvar sv_y sv_sin&lt;br /&gt;
	subvar sv_z 512&lt;br /&gt;
//if the calculated position isn&#039;t in a sector (this does happen) then just show the player&#039;s view&lt;br /&gt;
	updatesectorz sv_x sv_y sv_z sv_sect&lt;br /&gt;
	ifvare sv_sect -1 {&lt;br /&gt;
		getplayer[THISACTOR].posx sv_x&lt;br /&gt;
		getplayer[THISACTOR].posy sv_y&lt;br /&gt;
		getplayer[THISACTOR].posz sv_z&lt;br /&gt;
		subvar sv_z 512&lt;br /&gt;
		updatesectorz sv_x sv_y sv_z sv_sect&lt;br /&gt;
	}&lt;br /&gt;
  }&lt;br /&gt;
//check again to make sure we&#039;re in a sector&lt;br /&gt;
  ifvarn sv_sect -1 {&lt;br /&gt;
	//x y z ang horiz sect scrn_x scrn_y scrn_x2 scrn_y2&lt;br /&gt;
	showview sv_x sv_y sv_z sv_ang sv_horiz sv_sect sv_scrnx1 sv_scrny1 sv_scrnx2 sv_scrny2&lt;br /&gt;
  }&lt;br /&gt;
//display crosshair&lt;br /&gt;
  addvarvar sv_scrnx1 sv_scrnx2 divvar sv_scrnx1 2&lt;br /&gt;
  addvarvar sv_scrny1 sv_scrny2 divvar sv_scrny1 2&lt;br /&gt;
  myos sv_scrnx1 sv_scrny1 CROSSHAIR 0 0&lt;br /&gt;
}&lt;br /&gt;
endevent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Screen drawing commands]]&lt;/div&gt;</summary>
		<author><name>CONAN</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=5921</id>
		<title>Showview</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=5921"/>
		<updated>2007-02-16T04:57:33Z</updated>

		<summary type="html">&lt;p&gt;CONAN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;showview &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;angle&amp;gt; &amp;lt;horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Displays on-screen the view from in-game coordinates (&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;z&amp;gt;), looking at angle &amp;lt;angle&amp;gt; and with z-angle &amp;lt;horiz&amp;gt;, between screen coordinates (&amp;lt;scrn_x1&amp;gt;,&amp;lt;scrn_y1&amp;gt;) and (&amp;lt;scrn_x2&amp;gt;,&amp;lt;scrn_y2&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sector&amp;gt; is the sector that contains the in-game coordinates.&lt;br /&gt;
&lt;br /&gt;
The on-screen coordinates can be in any shape; they do not have to be in the same x-y ratio as the screen resolution. However, different ratios can result in warping or graphical glitches in the view. The on-screen coordinates are in 320x200 scale.&lt;br /&gt;
&lt;br /&gt;
Keep in mind when using this command that the game will have to completely redraw everything from the specified perspective, which can produce a sizeable framerate hit.&lt;br /&gt;
&lt;br /&gt;
This example will embed a small version of the player&#039;s view near the top left corner of the screen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getplayer[THISACTOR].posx x&lt;br /&gt;
getplayer[THISACTOR].posy y&lt;br /&gt;
getplayer[THISACTOR].posz z&lt;br /&gt;
getplayer[THISACTOR].angle ang&lt;br /&gt;
getplayer[THISACTOR].horiz horiz&lt;br /&gt;
getplayer[THISACTOR].horizoff temp&lt;br /&gt;
addvarvar horiz temp&lt;br /&gt;
updatesectorz x y z sect&lt;br /&gt;
showview x y z ang horiz sect 16 8 56 39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This lengthy example will create a &amp;quot;gun camera&amp;quot; that shows a closeup view of wherever the player is currently aiming. In addition to showview and basic EDuke commands, it also uses [[updatesectorz]], [[myos]], and [[hitscan]], as well as the [[event]] [[EVENT_DISPLAYREST]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gamevar sv_scrnx1 0 0&lt;br /&gt;
gamevar sv_scrny1 0 0&lt;br /&gt;
gamevar sv_scrnx2 0 0&lt;br /&gt;
gamevar sv_scrny2 0 0&lt;br /&gt;
gamevar sv_sect 0 0&lt;br /&gt;
gamevar sv_temp1 0 0&lt;br /&gt;
gamevar sv_temp2 0 0&lt;br /&gt;
gamevar sv_x 0 0&lt;br /&gt;
gamevar sv_y 0 0&lt;br /&gt;
gamevar sv_z 0 0&lt;br /&gt;
gamevar sv_hitx 0 0&lt;br /&gt;
gamevar sv_hity 0 0&lt;br /&gt;
gamevar sv_hitz 0 0&lt;br /&gt;
gamevar sv_cos 0 0&lt;br /&gt;
gamevar sv_sin 0 0&lt;br /&gt;
gamevar sv_ang 0 0&lt;br /&gt;
gamevar sv_horiz 0 0&lt;br /&gt;
onevent EVENT_DISPLAYREST {&lt;br /&gt;
//get coords&lt;br /&gt;
  setvar sv_scrnx1 23&lt;br /&gt;
  setvar sv_scrny1 16&lt;br /&gt;
  setvarvar sv_scrnx2 sv_scrnx1 addvar sv_scrnx2 50&lt;br /&gt;
  setvarvar sv_scrny2 sv_scrny1 addvar sv_scrny2 47 // 31 for correct ratio&lt;br /&gt;
//display frame&lt;br /&gt;
  setvarvar sv_temp1 sv_scrnx1 subvar sv_temp1 7&lt;br /&gt;
  setvarvar sv_temp2 sv_scrny1 subvar sv_temp2 8&lt;br /&gt;
  myos sv_temp1 sv_temp2 SCREENBREAK6 0 16&lt;br /&gt;
//do the hitscan&lt;br /&gt;
  getplayer[THISACTOR].ang sv_ang&lt;br /&gt;
  getplayer[THISACTOR].horiz sv_horiz&lt;br /&gt;
  getplayer[THISACTOR].posx sv_hitx&lt;br /&gt;
  getplayer[THISACTOR].posy sv_hity&lt;br /&gt;
  getplayer[THISACTOR].posz sv_hitz&lt;br /&gt;
  getplayer[THISACTOR].cursectnum sv_temp2&lt;br /&gt;
  subvar sv_hitz 512&lt;br /&gt;
  cos sv_cos sv_ang&lt;br /&gt;
  sin sv_sin sv_ang&lt;br /&gt;
  setvar sv_temp1 100&lt;br /&gt;
  subvarvar sv_temp1 sv_horiz&lt;br /&gt;
  getplayer[THISACTOR].horizoff sv_horiz&lt;br /&gt;
  subvarvar sv_temp1 sv_horiz&lt;br /&gt;
  shiftvarl sv_temp1 11&lt;br /&gt;
  hitscan sv_hitx sv_hity sv_hitz sv_temp2 sv_cos sv_sin sv_temp1 sv_temp1 sv_temp1 sv_temp1 sv_hitx sv_hity sv_hitz CLIPMASK1&lt;br /&gt;
&lt;br /&gt;
  getplayer[THISACTOR].horiz sv_temp1&lt;br /&gt;
  getplayer[THISACTOR].horizoff sv_horiz&lt;br /&gt;
  addvarvar sv_horiz sv_temp1&lt;br /&gt;
&lt;br /&gt;
//get distance between player and hitscan location&lt;br /&gt;
  getplayer[THISACTOR].posx sv_x&lt;br /&gt;
  getplayer[THISACTOR].posy sv_y&lt;br /&gt;
  getplayer[THISACTOR].posz sv_z&lt;br /&gt;
  subvarvar sv_x sv_hitx&lt;br /&gt;
  mulvarvar sv_x sv_x&lt;br /&gt;
  subvarvar sv_y sv_hity&lt;br /&gt;
  mulvarvar sv_y sv_y&lt;br /&gt;
  addvarvar sv_x sv_y&lt;br /&gt;
  sqrt sv_x sv_x&lt;br /&gt;
&lt;br /&gt;
  ifvarl sv_x 768 { //if dist &amp;lt; 768, just show the player&#039;s view&lt;br /&gt;
	getplayer[THISACTOR].posx sv_x&lt;br /&gt;
	getplayer[THISACTOR].posy sv_y&lt;br /&gt;
	subvar sv_z 512&lt;br /&gt;
	updatesectorz sv_x sv_y sv_z sv_sect&lt;br /&gt;
  }&lt;br /&gt;
  else { //otherwise, move camera 768 units back from hitscan location on x-y plane and adjust z accordingly&lt;br /&gt;
	subvarvar sv_z sv_hitz&lt;br /&gt;
	mulvar sv_z 768&lt;br /&gt;
	ifvare sv_x 0 setvar sv_x 1&lt;br /&gt;
	divvarvar sv_z sv_x&lt;br /&gt;
	addvarvar sv_z sv_hitz&lt;br /&gt;
	setvarvar sv_x sv_hitx&lt;br /&gt;
	setvarvar sv_y sv_hity&lt;br /&gt;
	mulvar sv_cos -768&lt;br /&gt;
	mulvar sv_sin -768&lt;br /&gt;
	divvar sv_cos 16384&lt;br /&gt;
	divvar sv_sin 16384&lt;br /&gt;
	addvarvar sv_x sv_cos&lt;br /&gt;
	addvarvar sv_y sv_sin&lt;br /&gt;
	subvar sv_z 512&lt;br /&gt;
//if the calculated position isn&#039;t in a sector (this does happen) then just show the player&#039;s view)&lt;br /&gt;
	updatesectorz sv_x sv_y sv_z sv_sect&lt;br /&gt;
	ifvare sv_sect -1 {&lt;br /&gt;
		getplayer[THISACTOR].posx sv_x&lt;br /&gt;
		getplayer[THISACTOR].posy sv_y&lt;br /&gt;
		getplayer[THISACTOR].posz sv_z&lt;br /&gt;
		subvar sv_z 512&lt;br /&gt;
		updatesectorz sv_x sv_y sv_z sv_sect&lt;br /&gt;
	}&lt;br /&gt;
  }&lt;br /&gt;
//check again to make sure we&#039;re in a sector&lt;br /&gt;
  ifvarn sv_sect -1 {&lt;br /&gt;
	//x y z ang horiz sect scrn_x scrn_y scrn_x2 scrn_y2&lt;br /&gt;
	showview sv_x sv_y sv_z sv_ang sv_horiz sv_sect sv_scrnx1 sv_scrny1 sv_scrnx2 sv_scrny2&lt;br /&gt;
  }&lt;br /&gt;
//display crosshair&lt;br /&gt;
  addvarvar sv_scrnx1 sv_scrnx2 divvar sv_scrnx1 2&lt;br /&gt;
  addvarvar sv_scrny1 sv_scrny2 divvar sv_scrny1 2&lt;br /&gt;
  myos sv_scrnx1 sv_scrny1 CROSSHAIR 0 0&lt;br /&gt;
}&lt;br /&gt;
endevent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Screen drawing commands]]&lt;/div&gt;</summary>
		<author><name>CONAN</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=5920</id>
		<title>Showview</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=5920"/>
		<updated>2007-02-16T04:52:58Z</updated>

		<summary type="html">&lt;p&gt;CONAN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;showview &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;angle&amp;gt; &amp;lt;horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Displays on-screen the view from in-game coordinates (&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;z&amp;gt;), looking at angle &amp;lt;angle&amp;gt; and with z-angle &amp;lt;horiz&amp;gt;, between screen coordinates (&amp;lt;scrn_x1&amp;gt;,&amp;lt;scrn_y1&amp;gt;) and (&amp;lt;scrn_x2&amp;gt;,&amp;lt;scrn_y2&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sector&amp;gt; is the sector that contains the in-game coordinates.&lt;br /&gt;
&lt;br /&gt;
The on-screen coordinates can be in any shape; they do not have to be in the same x-y ratio as the screen resolution. However, different ratios can result in warping or graphical glitches in the view. The on-screen coordinates are in 320x200 scale.&lt;br /&gt;
&lt;br /&gt;
Keep in mind when using this command that the game will have to completely redraw everything from the specified perspective, which can produce a sizeable framerate hit.&lt;br /&gt;
&lt;br /&gt;
This example will embed a small version of the player&#039;s view near the top left corner of the screen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getplayer[THISACTOR].posx x&lt;br /&gt;
getplayer[THISACTOR].posy y&lt;br /&gt;
getplayer[THISACTOR].posz z&lt;br /&gt;
getplayer[THISACTOR].angle ang&lt;br /&gt;
getplayer[THISACTOR].horiz horiz&lt;br /&gt;
getplayer[THISACTOR].horizoff temp&lt;br /&gt;
addvarvar horiz temp&lt;br /&gt;
updatesectorz x y z sect&lt;br /&gt;
showview x y z ang horiz sect 16 8 56 39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This lengthy example will create a &amp;quot;gun camera&amp;quot; that shows a closeup view of wherever the player is currently aiming. In addition to showview and basic EDuke commands, it also uses [[updatesectorz]], [[myos]], and [[hitscan]], as well as the [[event]] [[EVENT_DISPLAYREST]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gamevar sv_scrnx1 0 0&lt;br /&gt;
gamevar sv_scrny1 0 0&lt;br /&gt;
gamevar sv_scrnx2 0 0&lt;br /&gt;
gamevar sv_scrny2 0 0&lt;br /&gt;
gamevar sv_sect 0 0&lt;br /&gt;
gamevar sv_temp1 0 0&lt;br /&gt;
gamevar sv_temp2 0 0&lt;br /&gt;
gamevar sv_x 0 0&lt;br /&gt;
gamevar sv_y 0 0&lt;br /&gt;
gamevar sv_z 0 0&lt;br /&gt;
gamevar sv_hitx 0 0&lt;br /&gt;
gamevar sv_hity 0 0&lt;br /&gt;
gamevar sv_hitz 0 0&lt;br /&gt;
gamevar sv_cos 0 0&lt;br /&gt;
gamevar sv_sin 0 0&lt;br /&gt;
gamevar sv_ang 0 0&lt;br /&gt;
gamevar sv_horiz 0 0&lt;br /&gt;
onevent EVENT_DISPLAYREST {&lt;br /&gt;
//get coords&lt;br /&gt;
  setvar sv_scrnx1 23&lt;br /&gt;
  setvar sv_scrny1 16&lt;br /&gt;
  setvarvar sv_scrnx2 sv_scrnx1 addvar sv_scrnx2 50&lt;br /&gt;
  setvarvar sv_scrny2 sv_scrny1 addvar sv_scrny2 47 // 31 for correct ratio&lt;br /&gt;
//display frame&lt;br /&gt;
  setvarvar sv_temp1 sv_scrnx1 subvar sv_temp1 7&lt;br /&gt;
  setvarvar sv_temp2 sv_scrny1 subvar sv_temp2 8&lt;br /&gt;
  myos sv_temp1 sv_temp2 SCREENBREAK6 0 16&lt;br /&gt;
//do the hitscan&lt;br /&gt;
  getplayer[THISACTOR].ang sv_ang&lt;br /&gt;
  getplayer[THISACTOR].horiz sv_horiz&lt;br /&gt;
  getplayer[THISACTOR].posx sv_hitx&lt;br /&gt;
  getplayer[THISACTOR].posy sv_hity&lt;br /&gt;
  getplayer[THISACTOR].posz sv_hitz&lt;br /&gt;
  getplayer[THISACTOR].cursectnum sv_temp2&lt;br /&gt;
  subvar sv_hitz 512&lt;br /&gt;
  cos sv_cos sv_ang&lt;br /&gt;
  sin sv_sin sv_ang&lt;br /&gt;
  setvar sv_temp1 100&lt;br /&gt;
  subvarvar sv_temp1 sv_horiz&lt;br /&gt;
  getplayer[THISACTOR].horizoff sv_horiz&lt;br /&gt;
  subvarvar sv_temp1 sv_horiz&lt;br /&gt;
  shiftvarl sv_temp1 11&lt;br /&gt;
  hitscan sv_hitx sv_hity sv_hitz sv_temp2 sv_cos sv_sin sv_temp1 sv_temp1 sv_temp1 sv_temp1 sv_hitx sv_hity sv_hitz CLIPMASK1&lt;br /&gt;
&lt;br /&gt;
  getplayer[THISACTOR].horiz sv_temp1&lt;br /&gt;
  getplayer[THISACTOR].horizoff sv_horiz&lt;br /&gt;
  addvarvar sv_horiz sv_temp1&lt;br /&gt;
&lt;br /&gt;
//get distance between player and hitscan location&lt;br /&gt;
  getplayer[THISACTOR].posx sv_x&lt;br /&gt;
  getplayer[THISACTOR].posy sv_y&lt;br /&gt;
  getplayer[THISACTOR].posz sv_z&lt;br /&gt;
  subvarvar sv_x sv_hitx&lt;br /&gt;
  mulvarvar sv_x sv_x&lt;br /&gt;
  subvarvar sv_y sv_hity&lt;br /&gt;
  mulvarvar sv_y sv_y&lt;br /&gt;
  addvarvar sv_x sv_y&lt;br /&gt;
  sqrt sv_x sv_x&lt;br /&gt;
&lt;br /&gt;
  ifvarl sv_x 768 { //if dist &amp;lt; 768, just show the player&#039;s view&lt;br /&gt;
	getplayer[THISACTOR].posx sv_x&lt;br /&gt;
	getplayer[THISACTOR].posy sv_y&lt;br /&gt;
	subvar sv_z 512&lt;br /&gt;
	updatesectorz sv_x sv_y sv_z sv_sect&lt;br /&gt;
  }&lt;br /&gt;
  else { //otherwise, move camera 768 units back from hitscan location on x-y plane and adjust z accordingly&lt;br /&gt;
	subvarvar sv_z sv_hitz&lt;br /&gt;
	mulvar sv_z 768&lt;br /&gt;
	ifvare sv_x 0 setvar sv_x 1&lt;br /&gt;
	divvarvar sv_z sv_x&lt;br /&gt;
	addvarvar sv_z sv_hitz&lt;br /&gt;
	setvarvar sv_x sv_hitx&lt;br /&gt;
	setvarvar sv_y sv_hity&lt;br /&gt;
	mulvar sv_cos -768&lt;br /&gt;
	mulvar sv_sin -768&lt;br /&gt;
	divvar sv_cos 16384&lt;br /&gt;
	divvar sv_sin 16384&lt;br /&gt;
	addvarvar sv_x sv_cos&lt;br /&gt;
	addvarvar sv_y sv_sin&lt;br /&gt;
	subvar sv_z 512&lt;br /&gt;
//if the calculated position isn&#039;t in a sector (this does happen) then just show the player&#039;s view)&lt;br /&gt;
	updatesectorz sv_x sv_y sv_z sv_sect&lt;br /&gt;
	ifvare sv_sect -1 {&lt;br /&gt;
		getplayer[THISACTOR].posx sv_x&lt;br /&gt;
		getplayer[THISACTOR].posy sv_y&lt;br /&gt;
		getplayer[THISACTOR].posz sv_z&lt;br /&gt;
		subvar sv_z 512&lt;br /&gt;
		updatesectorz sv_x sv_y sv_z sv_sect&lt;br /&gt;
	}&lt;br /&gt;
  }&lt;br /&gt;
//check again to make sure we&#039;re in a sector&lt;br /&gt;
  ifvarn sv_sect -1 {&lt;br /&gt;
	//x y z ang horiz sect scrn_x scrn_y scrn_x2 scrn_y2&lt;br /&gt;
	showview sv_x sv_y sv_z sv_ang sv_horiz sv_sect sv_scrnx1 sv_scrny1 sv_scrnx2 sv_scrny2&lt;br /&gt;
  }&lt;br /&gt;
//display crosshair&lt;br /&gt;
  addvarvar sv_scrnx1 sv_scrnx2 divvar sv_scrnx1 2&lt;br /&gt;
  addvarvar sv_scrny1 sv_scrny2 divvar sv_scrny1 2&lt;br /&gt;
  myos sv_scrnx1 sv_scrny1 CROSSHAIR 0 0&lt;br /&gt;
}&lt;br /&gt;
endevent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke commands]]&lt;br /&gt;
[[Category:Screen drawing commands]]&lt;/div&gt;</summary>
		<author><name>CONAN</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Full_command_list&amp;diff=5919</id>
		<title>Full command list</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Full_command_list&amp;diff=5919"/>
		<updated>2007-02-16T04:42:48Z</updated>

		<summary type="html">&lt;p&gt;CONAN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{EDuke32 Intro}}&lt;br /&gt;
&lt;br /&gt;
This is a list of every CON primitive in EDuke32.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-right: none; padding: 0.6em;&amp;quot; |&lt;br /&gt;
*[[action]]&lt;br /&gt;
*[[activatebysector]]&lt;br /&gt;
*[[actor]]&lt;br /&gt;
*[[addammo]]&lt;br /&gt;
*[[addinventory]]&lt;br /&gt;
*[[addkills]]&lt;br /&gt;
*[[addlog]]&lt;br /&gt;
*[[addlogvar]]&lt;br /&gt;
*[[addphealth]]&lt;br /&gt;
*[[addstrength]]&lt;br /&gt;
*[[addvar]]&lt;br /&gt;
*[[addvarvar]]&lt;br /&gt;
*[[addweapon]]&lt;br /&gt;
*[[addweaponvar]]&lt;br /&gt;
*[[ai]]&lt;br /&gt;
*[[andvar]]&lt;br /&gt;
*[[andvarvar]]&lt;br /&gt;
*[[angoff]]&lt;br /&gt;
*[[angoffvar]]&lt;br /&gt;
*[[betaname]]&lt;br /&gt;
*[[break]]&lt;br /&gt;
*[[cactor]]&lt;br /&gt;
*[[cansee]]&lt;br /&gt;
*[[canseespr]]&lt;br /&gt;
*[[case]]&lt;br /&gt;
*[[changespritesect]]&lt;br /&gt;
*[[changespritestat]]&lt;br /&gt;
*[[cheatkeys]]&lt;br /&gt;
*[[checkactivatormotion]]&lt;br /&gt;
*[[checkavailinven]]&lt;br /&gt;
*[[checkavailweapon]]&lt;br /&gt;
*[[clipdist]]&lt;br /&gt;
*[[cos]]&lt;br /&gt;
*[[count]]&lt;br /&gt;
*[[cstat]]&lt;br /&gt;
*[[cstator]]&lt;br /&gt;
*[[debris]]&lt;br /&gt;
*[[debug]]&lt;br /&gt;
*[[default]]&lt;br /&gt;
*[[define]]&lt;br /&gt;
*[[definecheat]]&lt;br /&gt;
*[[definegamefuncname]]&lt;br /&gt;
*[[definegametype]]&lt;br /&gt;
*[[definelevelname]]&lt;br /&gt;
*[[defineprojectile]]&lt;br /&gt;
*[[definequote]]&lt;br /&gt;
*[[defineskillname]]&lt;br /&gt;
*[[definesound]]&lt;br /&gt;
*[[definevolumename]]&lt;br /&gt;
*[[digitalnumber]]&lt;br /&gt;
*[[displayrand]]&lt;br /&gt;
*[[displayrandvar]]&lt;br /&gt;
*[[displayrandvarvar]]&lt;br /&gt;
*[[dist]]&lt;br /&gt;
*[[divvar]]&lt;br /&gt;
*[[divvarvar]]&lt;br /&gt;
*[[dragpoint]]&lt;br /&gt;
*[[dynamicremap]]&lt;br /&gt;
*[[else]]&lt;br /&gt;
*[[enda]]&lt;br /&gt;
*[[endevent]]&lt;br /&gt;
*[[endofgame]]&lt;br /&gt;
*[[ends]]&lt;br /&gt;
*[[endswitch]]&lt;br /&gt;
*[[enhanced]]&lt;br /&gt;
*[[eqspawn]]&lt;br /&gt;
*[[eqspawnvar]]&lt;br /&gt;
*[[eshoot]]&lt;br /&gt;
*[[eshootvar]]&lt;br /&gt;
*[[espawn]]&lt;br /&gt;
*[[espawnvar]]&lt;br /&gt;
*[[eventloadactor]]&lt;br /&gt;
*[[ezshoot]]&lt;br /&gt;
*[[fall]]&lt;br /&gt;
*[[findnearactor]]&lt;br /&gt;
*[[findnearactor3d]]&lt;br /&gt;
*[[findnearactor3dvar]]&lt;br /&gt;
*[[findnearactorvar]]&lt;br /&gt;
*[[findnearactorz]]&lt;br /&gt;
*[[findnearactorzvar]]&lt;br /&gt;
*[[findnearsprite]]&lt;br /&gt;
*[[findnearsprite3d]]&lt;br /&gt;
*[[findnearsprite3dvar]]&lt;br /&gt;
*[[findnearspritevar]]&lt;br /&gt;
*[[findnearspritez]]&lt;br /&gt;
*[[findnearspritezvar]]&lt;br /&gt;
*[[findotherplayer]]&lt;br /&gt;
*[[findplayer]]&lt;br /&gt;
*[[flash]]&lt;br /&gt;
*[[gamestartup]]&lt;br /&gt;
*[[gametext]]&lt;br /&gt;
*[[gamevar]]&lt;br /&gt;
*[[getactor]]&lt;br /&gt;
*[[getactorangle]]&lt;br /&gt;
*[[getactorvar]]&lt;br /&gt;
*[[getangle]]&lt;br /&gt;
*[[getangletotarget]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-right: none; border-left: none; padding: 0.6em;&amp;quot; |&lt;br /&gt;
*[[getceilzofslope]]&lt;br /&gt;
*[[getflorzofslope]]&lt;br /&gt;
*[[getinput]]&lt;br /&gt;
*[[getlastpal]]&lt;br /&gt;
*[[getplayer]]&lt;br /&gt;
*[[getplayerangle]]&lt;br /&gt;
*[[getplayervar]]&lt;br /&gt;
*[[getpname]]&lt;br /&gt;
*[[getprojectile]]&lt;br /&gt;
*[[getsector]]&lt;br /&gt;
*[[gettextureceiling]]&lt;br /&gt;
*[[gettexturefloor]]&lt;br /&gt;
*[[getthisprojectile]]&lt;br /&gt;
*[[getuserdef]]&lt;br /&gt;
*[[getwall]]&lt;br /&gt;
*[[getzrange]]&lt;br /&gt;
*[[globalsound]]&lt;br /&gt;
*[[globalsoundvar]]&lt;br /&gt;
*[[gmaxammo]]&lt;br /&gt;
*[[guniqhudid]]&lt;br /&gt;
*[[guts]]&lt;br /&gt;
*[[hitradius]]&lt;br /&gt;
*[[hitscan]]&lt;br /&gt;
*[[ifaction]]&lt;br /&gt;
*[[ifactioncount]]&lt;br /&gt;
*[[ifactor]]&lt;br /&gt;
*[[ifactornotstayput]]&lt;br /&gt;
*[[ifai]]&lt;br /&gt;
*[[ifangdiffl]]&lt;br /&gt;
*[[ifawayfromwall]]&lt;br /&gt;
*[[ifbulletnear]]&lt;br /&gt;
*[[ifcansee]]&lt;br /&gt;
*[[ifcanseetarget]]&lt;br /&gt;
*[[ifcanshoottarget]]&lt;br /&gt;
*[[ifceilingdistl]]&lt;br /&gt;
*[[ifcount]]&lt;br /&gt;
*[[ifdead]]&lt;br /&gt;
*[[iffloordistl]]&lt;br /&gt;
*[[ifgapzl]]&lt;br /&gt;
*[[ifgotweaponce]]&lt;br /&gt;
*[[ifhitspace]]&lt;br /&gt;
*[[ifhitweapon]]&lt;br /&gt;
*[[ifinouterspace]]&lt;br /&gt;
*[[ifinspace]]&lt;br /&gt;
*[[ifinwater]]&lt;br /&gt;
*[[ifmove]]&lt;br /&gt;
*[[ifmultiplayer]]&lt;br /&gt;
*[[ifnosounds]]&lt;br /&gt;
*[[ifnotmoving]]&lt;br /&gt;
*[[ifonwater]]&lt;br /&gt;
*[[ifoutside]]&lt;br /&gt;
*[[ifp]]&lt;br /&gt;
*[[ifpdistg]]&lt;br /&gt;
*[[ifpdistl]]&lt;br /&gt;
*[[ifphealthl]]&lt;br /&gt;
*[[ifpinventory]]&lt;br /&gt;
*[[ifrespawn]]&lt;br /&gt;
*[[ifrnd]]&lt;br /&gt;
*[[ifsound]]&lt;br /&gt;
*[[ifspawnedby]]&lt;br /&gt;
*[[ifspritepal]]&lt;br /&gt;
*[[ifsquished]]&lt;br /&gt;
*[[ifstrength]]&lt;br /&gt;
*[[ifvarand]]&lt;br /&gt;
*[[ifvare]]&lt;br /&gt;
*[[ifvarg]]&lt;br /&gt;
*[[ifvarl]]&lt;br /&gt;
*[[ifvarn]]&lt;br /&gt;
*[[ifvarvarand]]&lt;br /&gt;
*[[ifvarvare]]&lt;br /&gt;
*[[ifvarvarg]]&lt;br /&gt;
*[[ifvarvarl]]&lt;br /&gt;
*[[ifvarvarn]]&lt;br /&gt;
*[[ifwasweapon]]&lt;br /&gt;
*[[include]]&lt;br /&gt;
*[[insertspriteq]]&lt;br /&gt;
*[[killit]]&lt;br /&gt;
*[[ldist]]&lt;br /&gt;
*[[lockplayer]]&lt;br /&gt;
*[[lotsofglass]]&lt;br /&gt;
*[[mail]]&lt;br /&gt;
*[[mikesnd]]&lt;br /&gt;
*[[minitext]]&lt;br /&gt;
*[[modvar]]&lt;br /&gt;
*[[modvarvar]]&lt;br /&gt;
*[[money]]&lt;br /&gt;
*[[move]]&lt;br /&gt;
*[[movesprite]]&lt;br /&gt;
*[[mulscale]]&lt;br /&gt;
*[[mulvar]]&lt;br /&gt;
*[[mulvarvar]]&lt;br /&gt;
*[[music]]&lt;br /&gt;
*[[myos]]&lt;br /&gt;
*[[myospal]]&lt;br /&gt;
*[[myospalx]]&lt;br /&gt;
*[[myosx]]&lt;br /&gt;
*[[neartag]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-left: none; padding: 0.6em;&amp;quot; |&lt;br /&gt;
*[[nullop]]&lt;br /&gt;
*[[onevent]]&lt;br /&gt;
*[[operate]]&lt;br /&gt;
*[[operateactivators]]&lt;br /&gt;
*[[operatemasterswitches]]&lt;br /&gt;
*[[operaterespawns]]&lt;br /&gt;
*[[operatesectors]]&lt;br /&gt;
*[[orvar]]&lt;br /&gt;
*[[orvarvar]]&lt;br /&gt;
*[[palfrom]]&lt;br /&gt;
*[[paper]]&lt;br /&gt;
*[[pkick]]&lt;br /&gt;
*[[precache]]&lt;br /&gt;
*[[pstomp]]&lt;br /&gt;
*[[qspawn]]&lt;br /&gt;
*[[qspawnvar]]&lt;br /&gt;
*[[qsprintf]]&lt;br /&gt;
*[[qstrcat]]&lt;br /&gt;
*[[qstrcpy]]&lt;br /&gt;
*[[quote]]&lt;br /&gt;
*[[randvar]]&lt;br /&gt;
*[[randvarvar]]&lt;br /&gt;
*[[readgamevar]]&lt;br /&gt;
*[[redefinequote]]&lt;br /&gt;
*[[resetactioncount]]&lt;br /&gt;
*[[resetcount]]&lt;br /&gt;
*[[resetplayer]]&lt;br /&gt;
*[[respawnhitag]]&lt;br /&gt;
*[[rotatepoint]]&lt;br /&gt;
*[[rotatesprite]]&lt;br /&gt;
*[[savegamevar]]&lt;br /&gt;
*[[sectgethitag]]&lt;br /&gt;
*[[sectgetlotag]]&lt;br /&gt;
*[[setactor]]&lt;br /&gt;
*[[setactorangle]]&lt;br /&gt;
*[[setactorvar]]&lt;br /&gt;
*[[setaspect]]&lt;br /&gt;
*[[setinput]]&lt;br /&gt;
*[[setplayer]]&lt;br /&gt;
*[[setplayerangle]]&lt;br /&gt;
*[[setplayervar]]&lt;br /&gt;
*[[setprojectile]]&lt;br /&gt;
*[[setsector]]&lt;br /&gt;
*[[setsprite]]&lt;br /&gt;
*[[setthisprojectile]]&lt;br /&gt;
*[[setuserdef]]&lt;br /&gt;
*[[setvar]]&lt;br /&gt;
*[[setvarvar]]&lt;br /&gt;
*[[setwall]]&lt;br /&gt;
*[[shiftvarl]]&lt;br /&gt;
*[[shiftvarr]]&lt;br /&gt;
*[[shoot]]&lt;br /&gt;
*[[shootvar]]&lt;br /&gt;
*[[showview]]&lt;br /&gt;
*[[sin]]&lt;br /&gt;
*[[sizeat]]&lt;br /&gt;
*[[sizeto]]&lt;br /&gt;
*[[sleeptime]]&lt;br /&gt;
*[[smaxammo]]&lt;br /&gt;
*[[sound]]&lt;br /&gt;
*[[soundonce]]&lt;br /&gt;
*[[soundoncevar]]&lt;br /&gt;
*[[soundvar]]&lt;br /&gt;
*[[spawn]]&lt;br /&gt;
*[[spgethitag]]&lt;br /&gt;
*[[spgetlotag]]&lt;br /&gt;
*[[spriteflags]]&lt;br /&gt;
*[[spritenoshade]]&lt;br /&gt;
*[[spritenvg]]&lt;br /&gt;
*[[spritepal]]&lt;br /&gt;
*[[spriteshadow]]&lt;br /&gt;
*[[sqrt]]&lt;br /&gt;
*[[ssp]]&lt;br /&gt;
*[[startlevel]]&lt;br /&gt;
*[[starttrack]]&lt;br /&gt;
*[[state]]&lt;br /&gt;
*[[stopallsounds]]&lt;br /&gt;
*[[stopsound]]&lt;br /&gt;
*[[stopsoundvar]]&lt;br /&gt;
*[[strength]]&lt;br /&gt;
*[[subvar]]&lt;br /&gt;
*[[subvarvar]]&lt;br /&gt;
*[[switch]]&lt;br /&gt;
*[[tip]]&lt;br /&gt;
*[[tossweapon]]&lt;br /&gt;
*[[updatesector]]&lt;br /&gt;
*[[updatesectorz]]&lt;br /&gt;
*[[useractor]]&lt;br /&gt;
*[[userquote]]&lt;br /&gt;
*[[wackplayer]]&lt;br /&gt;
*[[whilevarn]]&lt;br /&gt;
*[[whilevarvarn]]&lt;br /&gt;
*[[xorvar]]&lt;br /&gt;
*[[xorvarvar]]&lt;br /&gt;
*[[zshoot]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:All commands]]&lt;/div&gt;</summary>
		<author><name>CONAN</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=5918</id>
		<title>Showview</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Showview&amp;diff=5918"/>
		<updated>2007-02-16T04:41:11Z</updated>

		<summary type="html">&lt;p&gt;CONAN: New page: showview &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;angle&amp;gt; &amp;lt;horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;  Displays on-screen the view from in-game coordinates (&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;z&amp;gt;), looking at angle &amp;lt;angle&amp;gt; and with...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;showview &amp;lt;x&amp;gt; &amp;lt;y&amp;gt; &amp;lt;z&amp;gt; &amp;lt;angle&amp;gt; &amp;lt;horiz&amp;gt; &amp;lt;sector&amp;gt; &amp;lt;scrn_x1&amp;gt; &amp;lt;scrn_y1&amp;gt; &amp;lt;scrn_x2&amp;gt; &amp;lt;scrn_y2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Displays on-screen the view from in-game coordinates (&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;z&amp;gt;), looking at angle &amp;lt;angle&amp;gt; and with z-angle &amp;lt;horiz&amp;gt;, between screen coordinates (&amp;lt;scrn_x1&amp;gt;,&amp;lt;scrn_y1&amp;gt;) and (&amp;lt;scrn_x2&amp;gt;,&amp;lt;scrn_y2&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sector&amp;gt; is the sector that contains the in-game coordinates.&lt;br /&gt;
&lt;br /&gt;
The on-screen coordinates can be in any shape; they do not have to be in the same x-y ratio as the screen resolution. However, different ratios can result in warping or graphical glitches in the view. The on-screen coordinates are in 320x200 scale.&lt;br /&gt;
&lt;br /&gt;
Keep in mind when using this command that the game will have to completely redraw everything from the specified perspective, which can produce a sizeable framerate hit.&lt;br /&gt;
&lt;br /&gt;
This example will embed a small version of the player&#039;s view near the top left corner of the screen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getplayer[THISACTOR].posx x&lt;br /&gt;
getplayer[THISACTOR].posy y&lt;br /&gt;
getplayer[THISACTOR].posz z&lt;br /&gt;
getplayer[THISACTOR].angle ang&lt;br /&gt;
getplayer[THISACTOR].horiz horiz&lt;br /&gt;
getplayer[THISACTOR].horizoff temp&lt;br /&gt;
addvarvar horiz temp&lt;br /&gt;
updatesectorz x y z sect&lt;br /&gt;
showview x y z ang horiz sect 16 8 56 39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke commands]]&lt;br /&gt;
[[Category:Screen drawing commands]]&lt;/div&gt;</summary>
		<author><name>CONAN</name></author>
	</entry>
</feed>