Hi Everyone,
Wondering I have checked the command reference and I did not see a command for what I am looking for. Id like to have a bot shoot the player and be able to detect if its shot actually hit the player. Not sure if there is a command for this or some type of coding to use. Any advice is greatly appreciated
Page 1 of 1
shot detection
#2
Posted 25 February 2024 - 05:11 AM
There's nothing direct. How feasible this is depends on what else is going on on the board at the same time.
For example, if there's no other source of player-hurting bullets on the board, just use the :playerhit label
However, once a robot has fired a bullet, there is nothing unique about that bullet tying it to the robot in question - it just becomes a plain, neutral bullet with a given direction. There's some nasty shit you could do to try and make a guess - for example, use code to follow the bullet's path, make sure it's still there. If the bullet disappears and the player is in the right location to be hit by it and the player's health is reduced in that same cycle, chances are very good your bullet hurt the player - but nothing is certain.
Another alternative is that you could simulate a bullet, using a sprite or overlay to draw it, and just reproduce in robotic all the usual bullet handling (what happens when it hits various creatures etc.), except for a special case when hitting the player. However other code potentially on the board, such as code checking for the presence of a bullet in a given location, or if any bullet etc. will not work.
For example, if there's no other source of player-hurting bullets on the board, just use the :playerhit label
However, once a robot has fired a bullet, there is nothing unique about that bullet tying it to the robot in question - it just becomes a plain, neutral bullet with a given direction. There's some nasty shit you could do to try and make a guess - for example, use code to follow the bullet's path, make sure it's still there. If the bullet disappears and the player is in the right location to be hit by it and the player's health is reduced in that same cycle, chances are very good your bullet hurt the player - but nothing is certain.
Another alternative is that you could simulate a bullet, using a sprite or overlay to draw it, and just reproduce in robotic all the usual bullet handling (what happens when it hits various creatures etc.), except for a special case when hitting the player. However other code potentially on the board, such as code checking for the presence of a bullet in a given location, or if any bullet etc. will not work.
<Malwyn> Yes, yes. Don't worry I'd rather masturbate with broken glass than ask you for help again. :(
#3
Posted 25 February 2024 - 02:30 PM
Dr Lancer-X, on 25 February 2024 - 12:11 AM, said:
[
] for example, use code to follow the bullet's path, make sure it's still there. If the bullet disappears and the player is in the right location to be hit by it and the player's health is reduced in that same cycle, chances are very good your bullet hurt the player - but nothing is certain.
Basically this. Or, alternately, have the Robot "pay attention" for a few cycles to see what happens to the bullet. I recently made a "short-ranged bullet" engine for my game where a 'bot makes its won bullets disappear in 20 cycles through the use of "copy block". I'm sure the problems are apparent just from that statement alone, but it works for my purposes.
Anyway, if you don't have multiple 'bots on the same axes of the player, you could combine an "if "HORIZPLD"" or "if "VERTPLD"" statement with ":playerhit" or something. It's more prone to trigger false positives if there are multiple sources of damage on the same board, but it would probably be the simplest solution for what's needed. Maybe.
Quote
Another alternative is that you could simulate a bullet, using a sprite or overlay to draw it, and just reproduce in robotic all the usual bullet handling (what happens when it hits various creatures etc.), except for a special case when hitting the player. However other code potentially on the board, such as code checking for the presence of a bullet in a given location, or if any bullet etc. will not work.
That sounds absolutely headache-inducing. As someone who recently put code into a Robot which, when activated, turned it into a "fake bullet" (related to my "short-ranged bullets" thing above), I can imagine what a pain creating an "overlay bullet" script would be. I don't even know how hit detection would work with that. I could probably figure it out and code something, but man, it just sounds daunting right now.
(Then again, I'm staying in the "bronze age" of v2.5x, so )
I'm not that hard to find
if you know where to look.
-=( https://jolikmc.tumblr.com )=-
-=( https://jolikmc.tumblr.com )=-
#4
Posted 06 March 2024 - 08:10 PM
Here's a quick proof-of-concept I threw together of this using duplicate self projectiles that simulate built-in bullets. It's hardly problem-free (the way the SHOT label is handled needs to change to make it a real enemy; the char commands might break when copied into MZX) but this can be done.
set "local" to "robot_id" set "bullettype" to 2 color c0d : "l" goto "#shootn" wait for 10 goto "#shoote" wait for 10 goto "#shoots" wait for 10 goto "#shootw" wait for 10 goto "l" : "#shootn" if touching NORTH then "hit" if blocked NORTH then "blkn" char '' color c0f duplicate self to NORTH send at NORTH to "bulletn" char '' color c0d goto "#return" : "blkn" shoot to NORTH goto "#return" : "#shoots" if touching SOUTH then "hit" if blocked SOUTH then "blks" char '' color c0f duplicate self to SOUTH send at SOUTH to "bullets" char '' color c0d goto "#return" : "blks" shoot to SOUTH goto "#return" : "#shoote" if touching EAST then "hit" if blocked EAST then "blke" char '' color c0f duplicate self to EAST send at EAST to "bullete" char '' color c0d goto "#return" : "blke" shoot to EAST goto "#return" : "#shootw" if touching WEST then "hit" if blocked WEST then "blkw" char '' color c0f duplicate self to WEST send at WEST to "bulletw" char '' color c0d goto "#return" : "blkw" shoot to WEST goto "#return" : "hit" shoot to SEEK * "The player has been hit by my bullet point-blank." goto "#return" : "#hit" * "The player has been hit by my bullet at a distance." goto "#return" . "-----" : "#sendshot" send at "r&local&.thisx" "r&local&.thisy" to "#hit" goto "#return" | "shot" sfx 29 : "die" die : "bulletn" restore "shot" 1 set "lava_walk" to 1 set "goop_walk" to 1 : "bn" if touching NORTH then "hitn" if blocked NORTH then "brkn" if "thisy" = 0 then "die" go NORTH for 1 goto "bn" : "hitn" goto "#sendshot" : "brkn" shoot to NORTH die : "bullets" restore "shot" 1 set "lava_walk" to 1 set "goop_walk" to 1 : "bs" if touching SOUTH then "hits" if blocked SOUTH then "brks" if "thisy" = "('boardh'-1)" then "die" go SOUTH for 1 goto "bs" : "hits" goto "#sendshot" : "brks" shoot to SOUTH die : "bullete" restore "shot" 1 set "lava_walk" to 1 set "goop_walk" to 1 : "be" if touching EAST then "hite" if blocked EAST then "brke" if "thisx" = "('boardw'-1)" then "die" go EAST for 1 goto "be" : "hite" goto "#sendshot" : "brke" shoot to EAST die : "bulletw" restore "shot" 1 set "lava_walk" to 1 set "goop_walk" to 1 : "bw" if touching WEST then "hitw" if blocked WEST then "brkw" if "thisx" = 0 then "die" go WEST for 1 goto "bw" : "hitw" goto "#sendshot" : "brkw" shoot to WEST die
"Let's just say I'm a GOOD hacker, AND virus maker. I'm sure you wouldn't like to pay for another PC would you?"
xx̊y (OST) - HELLQUEST (OST) - Zeux I: Labyrinth of Zeux (OST) (DOS OST)
w/ Lancer-X and/or asgromo: Pandora's Gate - Thanatos Insignia - no True(n) - For Elise OST
MegaZeux: Online Help File - Keycode Guide - Joystick Guide - Official GIT Repository
xx̊y (OST) - HELLQUEST (OST) - Zeux I: Labyrinth of Zeux (OST) (DOS OST)
w/ Lancer-X and/or asgromo: Pandora's Gate - Thanatos Insignia - no True(n) - For Elise OST
MegaZeux: Online Help File - Keycode Guide - Joystick Guide - Official GIT Repository
Share this topic:
Page 1 of 1