Guns
Vanlichtinstein
09 Oct 2016, 04:47I am looking to have a World War Two based RPG game with actual combat, but I don't know how to get the gun mechanic working. The only I can think to fix it the way I'm doing it would be to give a global variable that can be changed throughout the game.
What I have so far. It's listed under a verb for Polish Infantry object. :
if (not GetBoolean(Gewehr 42, "NN")) {
Gewehr___SPACE___42___SPACE___ammo = 210
SetObjectFlagOn (Gewehr 42, "NN")
if (Got(Gewehr 42)) {
SetObjectFlagOn (Gewehr 42, "fired")
if (GetBoolean(Gewehr 42, "fired")) {
Gewehr___SPACE___42___SPACE___ammo = Gewehr___SPACE___42___SPACE___ammo - 14
msg ("Your Gewehr 42 has " + Gewehr___SPACE___42___SPACE___ammo + " bullets left.")
SetObjectFlagOff (Gewehr 42, "fired")
}
}
}
else {
if (Got(Gewehr 42)) {
if (Gewehr___SPACE___42___SPACE___ammo >= 0) {
SetObjectFlagOn (Gewehr 42, "fired")
Gewehr___SPACE___42___SPACE___ammo = Gewehr___SPACE___42___SPACE___ammo - 14
msg ("Your Gewehr 42 has " + Gewehr___SPACE___42___SPACE___ammo + " bullets left.")
SetObjectFlagOff (Gewehr 42, "fired")
}
else {
msg ("I'm sorry, but your Gewehr 42 is out of ammo.")
}
}
}
If any one could help find a solution or tell me how to create a global variable that would be great.

onimike
09 Oct 2016, 05:00Hi there, I recently did a tutorial setup for weapons here is the setup video https://www.youtube.com/watch?v=yiQRfCjl1Lg in the description you can find both links to the project.
hegemonkhan
09 Oct 2016, 05:47here's a guide on Attributes (these are quest's global VARIABLES, they are contained within Elements, quest's OBJECTS of OOP/OOD, and so long as the Element, usually the 'Object' Element, exists, then the Attribute exists and can thus be used globally via: NAME_OF_OBJECT.NAME_OF_ATTRIBUTE or NAME_OF_OBJECT.NAME_OF_ATTRIBUTE = VALUE_OR_EXPRESSION), and the 'if' Script:
http://textadventures.co.uk/forum/samples/topic/5559/attributes-and-if-script-guide-by-hk
ask if you need any help explaining anything or with whatever.
quest's design is set up like this:
VARIABLES (keeping this simple):
- Attributes: global/public VARIABLES due to being contained by Elements, so long as the Element containing them, exists/still-exists
- Variables: local VARIABLES, these only exist within and until the 'Function' or whatever scripting container Element's scripting, ends/ terminates/loops
- Arguments/Parameters: deals with 'Commands' and 'Function' Elements
Attributes:
NAME_OF_OBJECT.NAME_OF_ATTRIBUTE
~OR~
NAME_OF_OBJECT.NAME_OF_ATTRIBUTE = VALUE_OR_EXPRESSION
examples:
player.strength = 100
msg ("Player's Strength: " + player.strength)
// outputs: Player's Strength: 100
player.alias = "HK"
monster.dead = false
Variables:
NAME_OF_VARIABLE
~OR~
NAME_OF_VARIABLE = VALUE_OR_EXPRESSION
examples:
handled = false
counter = 0
str = "blah blah blah"
The Pixie
09 Oct 2016, 08:03Following on from what the others have said, there are no global variables. Instead, set attributes on objects. And that really make more sense for this, because it is the ammo in that one gun that you are tracking, so just have an ammo attributes for the gun.
if (not GetBoolean(Gewehr 42, "NN")) {
Gewehr 42.ammo = 210
SetObjectFlagOn (Gewehr 42, "NN")
if (Got(Gewehr 42)) {
SetObjectFlagOn (Gewehr 42, "fired")
if (GetBoolean(Gewehr 42, "fired")) {
Gewehr 42.ammo = Gewehr 42.ammo - 14
msg ("Your Gewehr 42 has " + Gewehr 42.ammo + " bullets left.")
SetObjectFlagOff (Gewehr 42, "fired")
}
}
}
else {
if (Got(Gewehr 42)) {
if (Gewehr 42.ammo >= 0) {
SetObjectFlagOn (Gewehr 42, "fired")
Gewehr 42.ammo = Gewehr 42.ammo - 14
msg ("Your Gewehr 42 has " + Gewehr 42.ammo + " bullets left.")
SetObjectFlagOff (Gewehr 42, "fired")
}
else {
msg ("I'm sorry, but your Gewehr 42 is out of ammo.")
}
}
}
ETA: I am assuming only one gun per ammo type by the way; I guess that may not be the case.

Vanlichtinstein
22 Oct 2016, 01:09Thanks for the help. I haven't been on here in a while, because of no internet, but I fixed it by doing this (Probably not the best to do in the long run, but with your guys' help I can go back and redo it when I feel like it):
if (Got(Gewehr 42)) {
if (GetBoolean(Gewehr 42, "twenty")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 242 bullets left.")
SetObjectFlagOn (Gewehr 42, "nineteen")
SetObjectFlagOff (Gewehr 42, "twenty")
}
else if (GetBoolean(Gewehr 42, "nineteen")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 228 bullets left.")
SetObjectFlagOn (Gewehr 42, "eightteen")
SetObjectFlagOff (Gewehr 42, "nineteen")
}
else if (GetBoolean(Gewehr 42, "eightteen")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 214 bullets left.")
SetObjectFlagOn (Gewehr 42, "seventteen")
SetObjectFlagOff (Gewehr 42, "eightteen")
}
else if (GetBoolean(Gewehr 42, "seventteen")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 200 bullets left.")
SetObjectFlagOn (Gewehr 42, "sixteen")
SetObjectFlagOff (Gewehr 42, "seventteen")
}
else if (GetBoolean(Gewehr 42, "sixteen")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 186 bullets left.")
SetObjectFlagOn (Gewehr 42, "fifteen")
SetObjectFlagOff (Gewehr 42, "sixteen")
}
else if (GetBoolean(Gewehr 42, "fifteen")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 172 bullets left.")
SetObjectFlagOn (Gewehr 42, "fourteen")
SetObjectFlagOff (Gewehr 42, "fifteen")
}
else if (GetBoolean(Gewehr 42, "fourteen")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 158 bullets left.")
SetObjectFlagOn (Gewehr 42, "thirteen")
SetObjectFlagOff (Gewehr 42, "fourteen")
}
else if (GetBoolean(Gewehr 42, "thirteen")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 144 bullets left.")
SetObjectFlagOn (Gewehr 42, "twelve")
SetObjectFlagOff (Gewehr 42, "thirteen")
}
else if (GetBoolean(Gewehr 42, "twelve")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 130 bullets left.")
SetObjectFlagOn (Gewehr 42, "eleven")
SetObjectFlagOff (Gewehr 42, "twelve")
}
else if (GetBoolean(Gewehr 42, "eleven")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 116 bullets left.")
SetObjectFlagOn (Gewehr 42, "ten")
SetObjectFlagOff (Gewehr 42, "eleven")
}
else if (GetBoolean(Gewehr 42, "ten")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 102 bullets left.")
SetObjectFlagOn (Gewehr 42, "nine")
SetObjectFlagOff (Gewehr 42, "ten")
}
else if (GetBoolean(Gewehr 42, "nine")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 88 bullets left.")
SetObjectFlagOn (Gewehr 42, "eight")
SetObjectFlagOff (Gewehr 42, "nine")
}
else if (GetBoolean(Gewehr 42, "eight")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 74 bullets left.")
SetObjectFlagOn (Gewehr 42, "seven")
SetObjectFlagOff (Gewehr 42, "eight")
}
else if (GetBoolean(Gewehr 42, "seven")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 60 bullets left.")
SetObjectFlagOn (Gewehr 42, "six")
SetObjectFlagOff (Gewehr 42, "seven")
}
else if (GetBoolean(Gewehr 42, "six")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 46 bullets left.")
SetObjectFlagOn (Gewehr 42, "five")
SetObjectFlagOff (Gewehr 42, "six")
}
else if (GetBoolean(Gewehr 42, "five")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 32 bullets left.")
SetObjectFlagOn (Gewehr 42, "four")
SetObjectFlagOff (Gewehr 42, "five")
}
else if (GetBoolean(Gewehr 42, "four")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 18 bullets left.")
SetObjectFlagOn (Gewehr 42, "three")
SetObjectFlagOff (Gewehr 42, "four")
}
else if (GetBoolean(Gewehr 42, "three")) {
msg ("You shoot a magazine out of your Gewehr 42. You now have 4 bullets left.")
SetObjectFlagOn (Gewehr 42, "two")
SetObjectFlagOff (Gewehr 42, "three")
}
else if (GetBoolean(Gewehr 42, "two")) {
msg ("You shoot a magazine out of your Gewehr 42. You no longer have any bullets for this weapon.")
SetObjectFlagOn (Gewehr 42, "zero")
SetObjectFlagOff (Gewehr 42, "two")
}
else if (GetBoolean(Gewehr 42, "zero")) {
msg ("You attempt to shoot your Gewehr 42, but you no longer have munitions for it.")
}
else {
msg ("You shoot a magazine out of your Gewehr 42. You now have 256 bullets left.")
SetObjectFlagOn (Gewehr 42, "twenty")
}
}
else {
msg ("You go to shoot your Gewehr 42, but you realize that you don't have one.")
}
The Pixie
22 Oct 2016, 08:30If it works, it works.
That said, instead of a bunch of booleans, I would have a single int to hold the number of magazines. Then you can just do this:
if (not Got(Gewehr 42)) {
msg ("You go to shoot your Gewehr 42, but you realize that you don't have one.")
}
else if (Gewehr 42.magazines = 0) {
msg ("You attempt to shoot your Gewehr 42, but you no longer have munitions for it.")
}
else {
Gewehr 42.magazines = Gewehr 42.magazines - 1
msg ("You shoot a magazine out of your Gewehr 42. You now have " + (Gewehr 42.magazines * 14 - 10) + " bullets left.")
}