Jump to content

Lazarus.

Member
  • Posts

    1,223
  • Joined

  • Last visited

Everything posted by Lazarus.

  1. Make sure all the dialog strings are of the appropriate length, make sure all message_dialogs have a "" for empty strings. If neither of these is a problem, then temporarily delete all monsters in hidden group 3 so that you can see the error message before they print over it.
  2. I'll try to be there, and in all likelyhood will succeed.
  3. Ok the error is fixed. The problem was that the spawned creatures used a slightly altered version of groupnpc which added them to their group and sent an alert to their group in the Init_state. Once the group they were being added to reached maximum capacity (20), they started sending alerts to nobody, which crashes Windows users but just does nothing for Macs. Thanks for the help. And remember kids, don't send alerts to nonexistant groups.
  4. Windows testers and anyone else reading TM's beta call thread may know that Echoes Renegade has been delayed by some very strange bugs resulting in unhandled exceptions for Windows users. Imban and I have both experienced crashes in the same area, and the problem has been traced to a seemingly harmless place_monster call. However, we are at a loss as to why BOA is suddenly objecting to such a frequently used call. Pleas to Jeff Vogel have fallen on deaf ears, swearing and cursing has left us only with dry throats, BOA remains unrelenting in its inexplicable crashes. Here is the code in question, hopefully some wise spiderwebber out there will have better luck with it. This is one while statement out of 6 that appears in the town's start_state, the other 5 are just duplicates with different locations for monsters to spawn, so I posted just one. Ask TM, myself or any other tester if you need the full version of the script for some reason. Code: if(get_flag(15,1) == 11){ if((((get_flag(19,1) == 0) && (get_ran(1,0,1) == 1)) || ((get_flag(19,1) == 1) && (get_ran(1,0,3) < 3))) && (get_flag(25,1) < 34)){ sld_typ = get_ran(1,0,8); if(sld_typ < 4) place_monster(24,8,6,0); if((sld_typ >= 4) && (sld_typ <= 6)) place_monster(24,8,132,0); if(sld_typ > 6) place_monster(24,8,184,0); pcs = 86; telep_ok = 0; while((pcs <= 119) && (telep_ok == 0)){ if(char_ok(pcs) == TRUE){ if(get_stat(pcs,27) == 0) telep_ok = 1; } if(telep_ok == 0) pcs = (pcs + 1); } if(telep_ok == 1){ alter_stat(pcs,27,1); rctx = char_loc_x(pcs); rcty = char_loc_y(pcs); put_boom_on_space(rctx,rcty,2,0); force_instant_terrain_redraw(); run_animation_sound(10); inc_flag(25,1,1); } } Good luck.
  5. Lord Licorice easily wins best board game villain. I've often wondered why Rentar doesn't try the "distribution of icky candy" path to world domination.
  6. As far as I can tell, you can only assign a string in that way in the variables section. So for example variables; string test = "Test."; Would be legitamate, but if you tried to write test = "test"; Somewhere in the body of the script it returns an error. If you need to do this then I think you have to use get_buffer_text(). Edit: The problem isn't with Alint, I tried to assign a string in this way and got a missing semicolon error when I tested it in BOA (No, I wasn't missing a semicolon, I think its either the wrong format or just not a valid way to assign strings).
  7. Double (or triple) posting is frowned upon, if you need to add something to a previous post you should use the edit button. To get the full version of BOE you have to order it from Spidweb, it's $15.
  8. Here's a quick drawing (I love drawings) to illustrate my point. I'll use a 2x2 outdoors section, but it doesn't really matter about the size. b1 d1 | b2 d2 a1 c1 | a2 c2 If A is the only outdoors you're changing, then make A2 the clean version of A1. Then move the party to A2, and notice that they are in a completely different "world" than the original outdoors. The party will never see the first four(the 1 series) of outdoors, only the 2 series. The party can still go to the other outdoors sections, but when they are walking to what looks like the b1 outdoors, they are really in the b2 outdoors. The party won't know the difference, since they will be identical.
  9. Well my idea would assume that you would re-draw that second outdoor section as well (even if its only an exact import of the original). This way, once the party was moved to the new outdoors they would never see the original outdoors again. If you decide to use rectangle calls then heres a few tips. If you're doing floors then I would have some sort of randomness to the floor assignment, that way the outdoors isn't one big bland area, and you can easily add some frills. If you're doing terrain then its more difficult, although you could have one terrain for the "debris" terrain, then just clear it and replace it with a random "clean" terrain (for example a tree or bush.) it would look something like Code: (if(get_terrain(locx,locy) == (debris terrain))set_terrain(locx,locy,get_ran(1,(lowest number of clean terrain),(highest number of clean terrain)) This way the rectangle calls won't make your outdoors too plain, or draw over important things like roads or cities.I'd still do it the way I suggested, unless you have more than 4 or so outdoor sections its really the easiest way.
  10. This is just an idea, there may be cleaner ways, I'm not sure. Make two versions of your outdoors, one that's all messy, one nice and clean. Then you can just move the party to the clean one whenever they exit a town when they've completed the quest. This shouldn't be a problem since quests are usually completed in towns anyway. Use change_outdoor_location() when the party exits town and has completed the quest, so the party will show up in the clean outdoors. So long as the two outdoors never touch, it won't be a problem.
  11. Use get_ran(x,y,z) X- number of dice to be rolled. Probably just set this to 1. y- smallest number each die can come up. z - largest number each die can come up. So put something like if(get_highest_skill(1) >= get_ran(1,1,20)). In this case, it is possible for it to occur even if your highest dexterity is only 1, but its only a 5% chance.
  12. Dintiradan's idea reminds me of a vague idea I had/have for a scenario. Basically it'd have have 4-8 stories, all of which touch upon each other a bit. Choices in one story would effect others etc. I've seen this done in movies / TV shows, but to my knowledge (which is limited to BOA) not in a scenario. The concept kind of reminds me of how Pulp Fiction's plot is presented, but with more storylines. I put this idea aside because I couldn't come up with a good, detailed plot that tied all the stories together. Maybe sometime in the future.
  13. Thanks for the help, I haven't tried the new version yet but I don't see why it shouldn't work. I think I'll have to take a pass on the ogre getting whooped on. The first time the party encounters them will be outdoors, which eliminates putting the sequence there. By the time you reach the dungeon it will already have been established through message dialogs and Friendly NPC dialog that the ogres are mistreated. Throwing a sequence like that in the middle of a hack n' slash dungeon, while tempting, would probably just break up the atmosphere (plus I assume you mean the sparring script you wrote at the codex, in which case the party will just wind up killing the ogre and overseer before they realize what is going on ) Edit: Actually having an overseer beating up on ogres and miners alike would be kinda interesting. I'll put it in and see how it looks.
  14. I like the idea of judging on a 1-10 scale in the preliminaries, then discussion to decide the final round. The only real problem I have with scoring on a 1-10 scale is that scenarios often seem to receive the same score as they had at the CSR. Which could suggests that judges just take the score they see at the CSR and modify it by half a point or so depending on their personal feelings. Or it could be because the judges are the only people rating it at the CSR, so the scores are just duplicated Quote: Originally written by Jewels: I've sent it to Spiderweb, but they haven't sent me a confirmation e-mail yet. Spiderweb doesn't give confirmation e-mails, at least I never got one.
  15. Nothing to apologize for. Here's the scripts for both the slave and the overseer. The slave script is pretty much what I posted last time. Slave: Code: begincreaturescript;variables;short i,target;short check,message,nomess,new;short best,status,targbody;beginstate INIT_STATE;set_char_script_mode(ME,2); nomess = 0; new = 1; if (get_memory_cell(0) == 2) set_mobility(ME,0); break;beginstate DEAD_STATE; // Set the appropriate stuff done flag for this character being dead if ((get_memory_cell(1) != 0) || (get_memory_cell(2) != 0)) set_flag(get_memory_cell(1),get_memory_cell(2),1);break;beginstate START_STATE; message = my_current_message(); if(message == 1){ nomess = -1; set_attitude(ME,10); } if(message == -1){ if((tick_difference(nomess,get_current_tick()) >= 2) && (nomess > 0)){ if(get_flag(5,0) == 0){ message_dialog("Ogres are slow and dim witted, nevertheless it only takes this one a short amount of time to realize that there are no overseers around, and thus no threat of whips and pain. It promptly starts attacking anything in sight.",""); set_flag(5,0,1); } set_attitude(ME,11); set_target(ME,-1); } if(nomess == -1) nomess = get_current_tick(); } if (target_ok()) { if (dist_to_char(get_target()) <= 16) else set_target(ME,-1); } // Look for a target, attack it if visible if (select_target(ME,8,0)) { do_attack(); } // Have I been hit? Strike back! if (who_hit_me() >= 0) { set_target(ME,who_hit_me()); do_attack(); }break; Overseer: Code: begincreaturescript;variables;short i,target;body;beginstate INIT_STATE;set_char_script_mode(ME,2); if (get_memory_cell(0) == 2) set_mobility(ME,0); break;beginstate DEAD_STATE; // Set the appropriate stuff done flag for this character being dead if ((get_memory_cell(1) != 0) || (get_memory_cell(2) != 0)) set_flag(get_memory_cell(1),get_memory_cell(2),1);break;beginstate START_STATE; // if I have a target for some reason, go attack it if (target_ok()) { if (dist_to_char(get_target()) <= 16) set_state(3); else set_target(ME,-1); } // Look for a target, attack it if visible if (select_target(ME,8,0)) { do_attack(); set_state(3); } if (who_hit_me() >= 0) { set_target(ME,who_hit_me()); do_attack(); set_state(3); } // Otherwise, just peacefully move around. Go back to start, if I'm too far // from where I started. if ((my_dist_from_start() >= 6) || ((my_dist_from_start() > 0) && (get_memory_cell(0) > 0))) { if (get_ran(1,1,100) < 40) return_to_start(ME,1); } else if (get_memory_cell(0) == 0) { fidget(ME,25); } // if we're in combat and the above didn't give me anything to do, just // stop now. Otherwise, game will keep running script, and that eats up CPU time. if (am_i_doing_action() == FALSE) end_combat_turn();break;beginstate 3; // attackingprint_str("Sent");broadcast_char_message(15,1,0); if (target_ok() == FALSE) set_state(START_STATE); do_attack(); end();break; It seems to be working fairly well like this, although I'm still a bit distrustful of it. I've seen it act goofy too many times in the past. Oh, and I think I'm going to edit it to run a town script when the creature dies, I'll decide when I'm done with the dungeon and know whether I'll need it.Edit: That message dialog was WAY to long, broke it up a bit.
  16. The message dialog sucks because I wrote it in about 2 seconds, mostly for the purpose of alerting me when the ogre changed sides when testing the script. As for the rest, I already had taken out state 3, but I've now added a set_target(ME,-1) to when the ogre switches sides. Also, whether the overseer acts first doesn't matter particularly much, since he has an extra turn to catch up to them. Example: Ogre doesn't get a message because it acts first, begins countdown, then next turn gets a message and doesn't revolt. The real problem is that a slowed, forcecaged or paralyzed overseer's script doesn't get run, which means the ogres go nuts every other turn. Its not to much of a concern since I'm stripping all the default spells so this probably won't come up, but still. I'm making the overseers immune to those things just in case. And the reason I'm not using SDF's is because I'll be using this in outdoor combats a couple of times. Since you can't set memory cells before hand in outdoor combats, or add creatures to groups, it would require making a different script for each one (Since number of overseers that have to die, etc. changes from situation to situation.) In a town I could get away with this by just using a memory cell to mark how many overseers a particular ogre should expect to have, and what flag that group would be using. In an outdoors it would take a whole new script.
  17. Actually this was for real. I'm using it in my new scenario. So anyway, I had to fix the code a little. Heres what the working version looked like. Code: message = my_current_message(); if(message == 1){ nomess = -1; set_attitude(ME,10); // For the record, this is here in case an overseer comes back into range, so the ogre will straighten itself out. } if(message == -1){ if((tick_difference(nomess,get_current_tick()) >= 1) && (nomess != -1)){ message_dialog("The ogre, realizing that its tormentor is dead, promptly turns on its former masters.",""); set_attitude(ME,11); } nomess = get_current_tick(); } if (target_ok()) { if (dist_to_char(get_target()) <= 16) else set_target(ME,-1); } // Look for a target, attack it if visible if (select_target(ME,8,0)) { do_attack(); } // Have I been hit? Strike back! if (who_hit_me() >= 0) { set_target(ME,who_hit_me()); do_attack(); } Your tick suggestion really put me on the right track. Thanks a bunch. By the way, what easier ways to do you mean? I'm always a fan of shortcuts, and I'd run through a lot of different ideas and couldn't come up with anything that would work for how I'm using this code. Ok, slightly funny story, I made the changes above, and knew it should be working, but it wasn't. After slamming my head on the wall for about five minutes it hit me. Much to my chagrin, I was testing it in a town that I had frozen in time (doh).
  18. I was writing my first script involving messaging today, (I've avoided it like the plague) and have encountered some difficulties. The idea is fairly simple. One creature(the overseer) sends out a message of 1 to all nearby characters. Another script(the slave) turns to hostile B if it doesn't receive a message for two consecutive turns. Basically its Kel's "traitor" but with messages instead of SDFs. The problem I've encountered is that the slave creature is constantly forgetting its message. I tried saving the message as a variable, but the script runs multiple times each turn and just winds up writing over it with a -1. See for yourself, here's the relevant part of the slave script. Code: beginstate START_STATE; message = my_current_message(); if(message == 1){ nomess = 0; set_attitude(ME,10); } if(message == -1){ if(nomess == 1){ message_dialog("The ogre, realizing that its tormentor is dead, promptly turns on its former masters.",""); set_attitude(ME,11); } if(nomess == 0) nomess = 1; } if (target_ok()) { if (dist_to_char(get_target()) <= 16) else set_target(ME,-1); } // Look for a target, attack it if visible if (select_target(ME,8,0)) { do_attack(); } // Have I been hit? Strike back! if (who_hit_me() >= 0) { set_target(ME,who_hit_me()); do_attack(); }break; I can get it to work if I replace the do_attack()'s with end_combat_turn, but obviously that makes it just sit there. The most frustrating thing is that the behavior seems fairly random, one slave will revolt while others remain hostile, and then several turns later they too will revolt. Any suggestions would be appreciated.
  19. Well Bain is involved, that pretty much rules out BOA. Yet another reason why I should get around to ordering BOE. For now I'll curse you good naturedly. (Damn BOE designers, don't have to worry about heights or terrains. Think their sooooo cool because of all those talkport graphics. Makes me sick.)
  20. Dilecia has 16 zones, so its a small, although since it'll be in Newcomer I don't suppose it matters. On that note, is a scenario entered only in the Newcomer category? Or is it entered in both Newcomer and the appropriate category for its size?
  21. Actually I think its the other way around (x + (y * w)), so Drakey is right.
  22. The first section (0,0) is number 0. (1,0) is number 1, (2,0) is 2 etc. Once its gone all through the (x,0) row, it starts with (x,1) row. I hope that wasn't too confusing. Basically it starts with 0 in the NW corner. Then keeps adding one as it goes east, and restarts at the west each time. I tested this in every outdoor section of my 3x3 scenario.
  23. Well if you're going to follow this up with the "digging" code, not just show the messages, then my way is going to be too much trouble. If you just want to annoy the party with messages then by all means use it
  24. Code: beginstate 11; if((char_on_loc(7,16) >= 0) && (char_on_loc(7,16) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(7,15) >= 0) && (char_on_loc(7,15) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(7,14) >= 0) && (char_on_loc(7,14) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(7,13) >= 0) && (char_on_loc(7,13) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(7,12) >= 0) && (char_on_loc(7,12) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(6,17) >= 0) && (char_on_loc(6,17) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(6,16) >= 0) && (char_on_loc(6,16) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(6,15) >= 0) && (char_on_loc(6,15) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(6,14) >= 0) && (char_on_loc(6,14) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(6,13) >= 0) && (char_on_loc(6,13) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(6,12) >= 0) && (char_on_loc(6,12) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(6,11) >= 0) && (char_on_loc(6,11) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(5,15) >= 0) && (char_on_loc(5,15) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(5,14) >= 0) && (char_on_loc(5,14) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(5,13) >= 0) && (char_on_loc(5,13) < 4)){ message_dialog("You can dig here!",""); end(); } if((char_on_loc(5,12) >= 0) && (char_on_loc(5,12) < 4)){ message_dialog("You can dig here!",""); end(); } message_dialog("You can't dig here!",""); break; Thuryl's way should work as well, although all those else statements make me nervous for some reason. This is just the way I would personally do it.
  25. Well if they start out at a higher level than your regular PC's then they would gain less exp, even if it was just because of their higher level, not the fact that they were the recruited type and joined you later in the game. I guess eventually your regular PC's would catch up in level, and then everyone would gain exp at the same rate.
×
×
  • Create New...