wiki:rb

Version 4 (modified by jpawlick, 14 years ago) (diff)

--

This ProtocolZero query is much like rf, except that it is designed for large-scale image acquisition. Normal rf returns only one sample per command, and thus a user attempting to get a large number of samples by sending many queries to it at a variety of angles suffers poor performance and risks overflowing the Quagent's command queue. improves upon rf by allowing the user to specify a region of samples with only a single command. High-resolution data can take some time to write: the game will appear to hang while it does. On machine "e33" in the lab, this command can acquire about 250,000 samples per second (so, for example, it takes 2 seconds to get a 720 by 720 area).

It is useful to think of as returning a raster of duples. (An image interpretation of such a raster is shown below.)

Example image representation of output.

(In the above image, the striped area represents another entity (in this case, a player) in the environment, while the walls are greyscale. White areas are further from the bot, while black areas are close. The uppermost row of the image corresponds to a pitch of 45 degrees up, and the bottom row is 44.5 degrees down. The left side is at -90 yaw from the bot, and the right side at +90.)

However, this should not be thought of as returning a picture from the point of view of the bot for the following reasons.

  • returns a number of samples generated by accumulating sample_deltas. Increasing YAW makes the bot turn left, so for positive sample_delta_yaw, subsequent samples are more to the left. This is not the standard image coordinate system where increasing samples in the X direction are to the right. In other words, the "image" would be flipped horizontally from what the bot would actually "see".
  • generates the image by a process that is suggestive of a fisheye lens, not a linear projection. For example, it is possible to have a raster that contains the results of rays looking directly ahead and behind, an impossible perspective for linear projections. Wall seams will appear curved, etc.

Parameters:

  • 1: integer type, selecting the type of rangefinder to use. A "solid" as used below means a wall, floor, ceiling, etc.
    • 0 = an infinitely narrow beam that passes through entities such as other quagents but is stopped by solids.
    • 1 = an infinitely narrow beam that is blocked by entities and solids.
    • 2 = a wide beam the size of a quagent that is blocked if any part of it is blocked by solids, but passes through entities.
    • 3 = a wide beam the size of a quagent that is blocked if any part of it is blocked by solids or entities.
  • 2: integer distance, the maximum distance of the rangefinder. There is no particular penalty to supplying very large distances that we can find - the maximum distance we've seen this call used with in Quake is 8120, the range of the rail gun.
  • 3: float theta, the number of degrees left of facing to start shooting the rangefinder at.
  • 4: float phi, the number of degrees down from facing to start shooting the rangefinder at.
  • 5: int width, the width of the returned raster (how many YAW-variant samples to take).
  • 6: int height, the height of the returned raster (how many PITCH-variant samples to take).
  • 7: float sample_delta_yaw: how far apart (in degrees) two samples differing only in YAW should be.
  • 8: float sample_delta_pitch: how far apart (in degrees) two samples differing only in PITCH should be.

Responds:

  • n X1 E1 X2 E2 X3 E3... Xn En where n is the number of samples (width*height) in the raster. Each X is the range at which the rangefinder stopped, and each corresponding E is the entityid of the entity that stopped it (or -1 or -2, see rf).

Reports:

  • done when the task completes.
  • popped if popped by po.
  • forgotten if deleted by fa.

Example:

  • User sends: "n rf 512 1 6000 90 45"
  • Bot replies "rs rf 512 65.2 -2"
  • Bot replies "cp rf 512 done"

Attachments (13)

Download all attachments as: .zip