Jump to content

Chokboyz

Member
  • Posts

    428
  • Joined

  • Last visited

    Never

Everything posted by Chokboyz

  1. Originally Posted By: Celtic Minstrel I did something completely different, but haven't yet tested it. I discovered some code already there to hide the map in a particular case (if you're in town number -1, which at a guess I'd say might mean outdoor combat?), and simply copied and pasted and altered it slightly. Such code is absent in the Windows code (unsurprisingly), but from i can get out the code it seems it does the same thing as mine. The message can be either of the two, yours being more litterate Originally Posted By: Celtic Minstrel This won't doesn't affect outdoor maps, though. I think we'd need to have a completely different case for masking outdoor maps, because the game loads up to 4 outdoor sections into memory at any one time. I would say the game loads up to 9 outdoor sections (array is [2][2]) in memory (i think rewriting this part so that the entire outdoor is accessible at any moment will be a good think with the new scenario format). No specific changes needs to be done to the function though, a simple isOutdoor check would suffice (i've tested mine in town/outdoor without a problem and the code seems to behaves like mine) Originally Posted By: Celtic Minstrel At the end of load_party() / load_file() and at the end of put_party_in_scen(): I've put it right after SDF initialization so that no case are missed (this is where play_sound is set). Apart from that, our codes are similar (minor difference : i check if SDF[308][8] == 0). Originally Posted By: Celtic Minstrel Well... technically it should probably affect players in the same way as monsters. Is it possible for such missiles to be used against the player though? Yup, they do the same damage as a normal arrow So, I will fix it ... Chokboyz Edit: And here it goes : in fire_missile() Click to reveal.. [...] if (r1 > hit_chance[skill]) add_string_to_buf(" Missed."); else if ((targ_monst = monst_there(target)) < T_M) { cur_monst = &c_town.monst.dudes[targ_monst]; spec_dam = calc_spec_dam(adven[current_pc].items[ammo_inv_slot].ability, adven[current_pc].items[ammo_inv_slot].ability_strength,cur_monst); if (adven[current_pc].items[ammo_inv_slot].ability == 176) { ASB(" There is a flash of light."); cur_monst->m_d.health += r2; } else damage_monst(targ_monst, current_pc, r2, spec_dam, 1300); // poison if ((adven[current_pc].status[0] > 0) && (adven[current_pc].weap_poisoned == ammo_inv_slot)) { poison_amt = adven[current_pc].status[0]; if (adven[current_pc].hasAbilEquip(51) < 24) poison_amt++; cur_monst->poison(poison_amt); } } else if((targ_monst = pc_there(target)) < 6 && adven[current_pc].items[ammo_inv_slot].ability == 176){ ASB(" There is a flash of light."); adven[targ_monst].heal(r2); } else hit_space(target,r2,0,1,0); } [...] (another case is used because the two first are monster specifics)
  2. Here are several (last ?) bugs that needs to be fixed prior to an executable release. Don't hesitate to post informations on these (what is the problem, example of the problem, compatibility breaking, etc) as this will make the fixing process a lot faster. By the way, if there's any bug you consider should belong to the list, don't hesitate to mention it. Bugs : When the party is split up, Affect PC special nodes should only affect the active PC ? (any compatibility breaking ?) Fixed, only the Kill/Raise Node has been left untouched. Apparently event timers are broken. (an example of bad behavior would be nice Here again, no compatibility breaking ?) Should be done with the new timers handling method. Empties! Found one cause, keep an eye open in the case there was another ... Creatures in one time place town encounters don’t check their life flag. (compatibility breaking ?) Hopes not, this has been fixed. Changing the visibility (i.e., opaque, transparent, etc.) of terrain types often does not work. (examples would be appreciated here ... Firing arrows through solid walls or in the dark has already been fixed) 100% in Blades doesn’t equal 100%. (if there is any occurence that comes to your mind besides random number calculation, summon chances, dropping chances, statistic affecting chances, monsters field appearing chances, don't hesitate to mention it). Here's what has already been done (note that some bugs were Windows specific, the Mac version should be up-to-date thanks to Celtic Minstrel) : Click to reveal.. (Changelog) - Custom Scenario Loading now works. - Conceal Ability Flag now works. - Game now uses the font that comes with it. - Strengh potions can now be made (Ishad Nha) - Add/Lose Sanctuary and Add/Lose Martyr's Shield abilities fixed. (Ishad Nha) - Acidic weapons works as living saving charm fixed. (Ishad Nha) - Fixed the raise_dead node so that it actually raise dead. (Ishad Nha) - Fixed the second part of a special node dialog called from a conversation wasn't properly recorded (actually read). - Fixed custom items weren't properly masked (transparent background) in the inventory . - The Defense skill was used rather than the Thrown Missiles skill when firing missiles weapons . - Fixed the Paralysing Ray trap wasn't working. - Fixed the petrification touch was causing disease. You now have the same chance of being petrified that when a basilisk gazes at you each time your are hit (subject to changes) (!). - Make the automap updates after terrain change/swap/transform. - Cleaned and expanded the Debug Mode. Type 'D' to begin debug mode and '/' to see commands. (Ishad Nha) - Corrected doubling 152 index in m_pic_index (little alien beast graphic can now be used). (Ishad Nha) - Corrected the "Town Special Encounter" node so that it makes full use of the ten groups. - Fixed the ring of Will was not checked during mind duel. (Lots of people) - Fixed Destroy Items and Move Items nodes so that they work for rectangles as well as a single space. - Hide Town now works. - Appears/Disappears on Day X now works. So does Appears/Disappears on Events. - Fixed the day_reached function so that it correctly checks if the major event between 1 and 10 has occured (0 always happens) - Nimble trait actually gave lower chance to disarm a trap, picklock and to put poison correctly. Fixed, the game now gives bonus to nimble ones rather than penalizing characters without the trait. - Changing non-conveyer belt terrain into conveyer belt terrain will not work unless the town where the change occurs begins with a least one square of conveyer belt terrain as default. Fixed - Step on sound code implemented. - Corrected the Affect Statistic Node random calculation method, so that 100 happens all the time (and 0 never). - Conveyor freezes upon loading fixed. - Chances of dropping fixed, so that 100 happens all the time (and 0 never) - Monster radiates field and rect_spec were plagued with the same random calculation as affect statistic node. Monster special ability : summons is now accurate. - Last missile weapon in a group that possess special abilities will fail when fired and last stack of an ordinary thrown item that is placed immediately prior to a stack of another missile weapon with a special ability in that PC’s inventory will gain the special ability of the adjacent missile weapon fixed. - Fixed the bug where you could fire an exploding arrow everywhere on the map, even if the target was out of range or not in sight. - The 16 different area descriptions can now be used. - The Spells “Resurrection” and "Raise Dead" did not require a Resurrection Balm, despite advertisements to the contrary. This is fixed in new scenarios (major version more or equal to 2) and left alone in legacy scenarios for compatibility reasons. - If two friendly NPCs occupy the same space, and they both have dialogued personalities, talking to either of them will talk count as if talking to the first placed mosnter. This prevent the game from freezing. - According to the BOE Manual, the Affect Party — Do Damage special node allows the scenario designer to vary the Pict. box. Doing so will supposedly only cause damage to the PC who triggers the special, if the party is in combat node. Fortunately, this has been fixed. - Ice and Magic damaging terrains now displays the right effect/plays the right sound when damaging the party while not in combat. - “Map Not Available” Option implemented. => (temporary ?) assigned to SDF[308][0] - Fixed (?) oddities appearing in the map with animated terrains (torches, firecamp, water, ...). - 100 town bug lurking ? <= should be done Changes : - Add a preference option that displays or not the start-up picture and music. - Changed the "Wait 40 moves" dialog to "Wait 80 moves" to better reflect the time actually waited. - Added a "Fast Boom Space Effects" option that speeds up any boom sfx in the game. - The party status text (Flying, Firewalk, Detect Life, Stealth) is not longer black on black. It should be readable now. - Once identified, the exploding arrows now shows the radius of the explosion. Chokboyz
  3. Originally Posted By: Celtic Minstrel Since you say ability 99 doesn't exist, maybe you should adopt the Mac version of this function? I did post it, right? I did (and you did) That was clearly what the function was supposed to be ... Originally Posted By: Celtic Minstrel I could be wrong, but I was under the impression that the function called actually returned the ability strength (meaning that it's a misleading function name, but still it's at least no the wrong function). Incredibly enough, the function does indeed return the ability strengh ... Speak about a misleading name Originally Posted By: Celtic Minstrel That seems like a bad idea. I bet that was an Ormus change. Seems like scenario version is stored in scenario.ver and program made version is stored in scenario.prog_make_ver after all (my bad ) The load_scenario_header function seems the same as the Mac one (original code) (besides, if we are able to play Mac scenario, it should be ok, no ?) Originally Posted By: Celtic Minstrel Maybe. It's possible that Ormus cleaned out unused functions, or perhaps Jeff cleaned out unused function during the porting process. There are quite a lot of unused functions, not all of which have an empty body. Either it's him or me, but the function has indeed been removed (present in the original Windows code) ... Putting it back in the code wouldn't requires much effort Originally Posted By: Celtic Minstrel ...Actually, the setting of the SDF would have to be in the load party code, after the scenario is loaded – something like "if(scenario.prog_make_ver < 2) PSD[305][8] = 1; else PSD[305][8] = 0;". I will adopt that as well ... Originally Posted By: Celtic Minstrel Okay, I'm not quite sure what you've said here... I can understand that the do_missile_anim(100,pc_pos[current_pc], 5); line in the exploding case of the fire_missile() is redundant in the way that two arrows will be shoot by the firer (because do_missile_anim() is already done in run_a_missile()). I removed it (that was also the cause of two explosion sounds being played) The problem with ammo and poison reducing code is that it's placed after damage dealing. Unfortunately, if a pc (other than the firer) is killed because of the damage dealt by the arrow then current_pc switch to the first active pc (let's say Frrrrrr shoots an explosive arrow that kills Feodoric, then Jennekee (providing he is alive) ammo will be reduced (provided he has any) and poison on his blade will be reduced. Frrrrrr would lost no ammo). I used the already present missile_firer variable (needs to be set in exploding case) to check the right pc ... (may be a Windows only bug, as the kill function has been modified by Ormus) Originally Posted By: Celtic Minstrel Originally Posted By: Chokboyz Finally, shouldn't the health arrows works for pc too ?? Huh? The heal target missile ability, heal the monster it hits, but if it hits a pc, it deals normal damages. Should that be fixed ? Edit: Resurrection Balm legacy compatibility check is implemented and working. In any scenario with major version number more or equal to 2, a Resurrection Balm will be needed to cast Resurrection or Raise Dead. Legacy scenarios are left alone. (SDF[305][8] used)
  4. Originally Posted By: Celtic Minstrel I just discovered that in monster_attack_monster, demons seem to do undead damage and undead do demonic damage... can you confirm? Yup, confirmed. Ishad Nha found some times ago that the same thing also happens in monster_attack_pc(). Originally Posted By: Celtic Minstrel So, if it was an exploding missile, the first two lines should be skipped? At least the reduce poison line should be skipped, right? The first one can safely be skipped. The second one should also, because the poison wearing off with time is done in the increase_age() function if i remember correctly, so this one represents the poison wearing off because being used ... Originally Posted By: Celtic Minstrel Okay, so what did your version of stat_adj() check for? Click to reveal.. (statAdj) short pc_record_type::statAdj(short which) { short tr; tr = skill_bonus[skills[which]]; if (which == 2) {//intelligence if (traits[1] == TRUE) tr++;//has magical apt ? if (hasAbilEquip(99) < 16) tr++;// has item with ability 99 equipped ? } if (which == 0)//strengh if (traits[8] == TRUE) tr++;//has Exceptionnal Strenght ? return tr; } Originally Posted By: Celtic Minstrel The difference being, I think, that the bonus given by my version of the code actually depends on the ability strength of the item rather than just its presence. The Mac version of Will items handling seems more flexible, maybe the Windows version should adopt it ? (on the other hand, the check should use the ability strenght rather then the protection level, no ? ) Originally Posted By: Celtic Minstrel Is there really any point to that though? Some people might prefers the brightest terrains ... Don't yell yet, i'm leaving that alone for the moment Originally Posted By: Celtic Minstrel Hmm... the indentation confuses me (my code is horribly indented – I should fix that sometime). As far as I can see, the only change is multiplying the sound number by -1? Not only (multiplying the sound number by -1 makes it asynchronous), it also skips the Delay part. Originally Posted By: Celtic Minstrel I also noticed something odd just above that: "r1 = get_ran(ter_flag2,dam_type,ter_flag1)" – so, the damage type is also the minimum amount of damage? That doesn't make sense, does it? I noticed that too and left it as part of the code oddities (fire block does less damage than ice which does less damage than magic). Easily fixed, should the need arise. Originally Posted By: Celtic Minstrel I found that Stealth would not display Stealth displays fine in Windows version. Originally Posted By: Celtic Minstrel There is a problem when you have all three of the effects stealth, detect life, and firewalk, though. First, they take up enough of the text bar that I'm sure they'd be very likely to overlap the town name. Second, Stealth will always overlap the next one to the left, it seems. That may apply to flying, too. Personally, I think it would be better to create four little icons for these effects, but any change like that would have to wait, at a minimum, until such icons could be created. Indeed, these strings overlap with the town name (and even between them). Icons would be nice ... My drawing skills being what they are, i won't be the one that draw them, though If anyone feels like doing it ... Originally Posted By: Celtic Minstrel Another thing: Detect Life is not cancelled when you leave town; Stealth is. Should that be changed? Does Detect Life even work outdoors? That should be changed as Detect Life doesn't work outdoor (it doesn't even work while in combat) ... Did i broke something or monsters appears only on explorated squares ? Originally Posted By: Celtic Minstrel What? Where's the scenario version stored then? The version of the editor/game used seems to be stored in scen_headers[scen].prog_make_ver. But those values are never initialized (that's probably the source of the "version error message when clicking cancel in custom scenario menu" glitch)... The variable scenario.prog_make_ver is used to store the scenario (inner) version. Originally Posted By: Celtic Minstrel Another interesting function I found that isn't used is handle_cave_lore(), which, if it were ever called, would occasionally give the party food if anyone has the cave lore trait (or Woodsman I think it's called). I remember coming across something like that, i can't seems to find it again (handle_cave_lore() doesn't exist my version of the code) ... Should it be implemented ? Originally Posted By: Celtic Minstrel Okay. Chokboyz, shall we agree on an unused SDF? What about SDF(305,4), SDF(305,7), or SDF(305,8)? I actually use SDF[305][4] (skip startup screen) and SDF[305][7] (fast boom space). SDF[305][8] is free though. Originally Posted By: The Almighty Doer of Stuff Don't get me wrong, I do think we should fix that bug. I just think we (well, you guys, not me obviously, but we as a community) should be very careful each time we change a functionality, so that we keep old format scenarios functioning as they were intended to function. Seems like what we're trying to do Originally Posted By: Celtic Minstrel In the editor, overall_mode 1 is checked but, as far as I can see, never set. Can you confirm? Is it safe to remove? A quick glance at code shows no setting of overall_mode to 1. That should be ok to remove ... Chokboyz Edit : i've changed the exploding arrows to show the explosion radius (once they are identified) rather than the basic square when firing. In load_missile() : Click to reveal.. [...] else if ((arrow < 24) && (bow < 24)) { missile_inv_slot = bow; ammo_inv_slot = arrow; overall_mode = MODE_FIRING; add_string_to_buf("Fire: Select a target. "); add_string_to_buf(" (Hit 's' to cancel.)"); current_spell_range = 12; if(adven[current_pc].items[arrow].ability == 172 && adven[current_pc].items[arrow].isIdent() == TRUE) current_pat = radius2; else current_pat = single; } [...] Once again, the code is using Ormus C++ changes and must be adapted (especially isIdent() function). Oh and it seems that the do_missile_anim(100,pc_pos[current_pc], 5); line in the exploding case of fire_missile() is redundant (i.e a second missile is launched) ... Erf, i found that missile removing and poison reducing must be done before damage dealing because if a pc dies from the damage dealt by the arrow, missile and poison will be reduced for the first active pc ... Using missile_firer seems a better idea than duplicating code ... Finally, shouldn't the health arrows works for pc too ?
  5. This, of course, doesn't happens with current version of the code ... Moreover, the previous executable behaves strangely (there is more than the Summon Monster special node that doesn't work, but should anyway) ... I doubt this file is Ishad Nha's latest build (cause it's pretty flawed), but i can't seems to find another ... Maybe if he's around, you can ask him ... Meanwhile, don't mind the bug you encounter Chokboyz
  6. But of course (assuming you speak about the party not being able to be revived via a special node) Wait, this version seems to behave strangely, this may not be the last one Don't hesitate to report back bugs/comments, Chokboyz
  7. Originally Posted By: Celtic Minstrel Okay, this confused me a little at first, because the exploding arrows code was in a different place than in my code, but I've now implemented this change. However, I did it a little differently to avoid duplication of code I've deleted the duplicated code in fire_missile(). The third last line can be left in the exploding case (the first is reinitializing a variable used in normal missile, the second reduces the amount of poison on weapons and the third print the buffer). Concerning the Resurrection Balm, i will not fix it for now as it breaks compatibility. However, a check in the function will make it functionnal for the new scenario format. Originally Posted By: Celtic Minstrel It also didn't help that the function was called do_priest_spell rather than cast_priest_spell... Sorry about that, i was in the combat_cast_priest_spell() function when writing the post Originally Posted By: Celtic Minstrel For the second, my version of stat_adj checks for exactly 3 abilities, and 99 is not one of them. Incredibly enough, windows version of the code didn't do any check with these three values ... The Strengh, Dexterity or Intelligence item abilities were then utterly useless. Here is my version of do_mindduel() : Click to reveal.. (do_mindduel) void do_mindduel(short pc_num,creature_data_type *monst) { short i = 0,adjust,r1,r2,balance = 0; adjust = (adven[pc_num].level + adven[pc_num].skills[2]) / 2 - monst->m_d.level * 2; if (adven[pc_num].hasAbilEquip(53) < 24) adjust += 20; if (monst->attitude % 2 != 1) make_town_hostile(); monst->attitude = 1; add_string_to_buf("Mindduel!"); while ((adven[pc_num].isAlive()) && (monst->active > 0) && (i < 10)) { play_sound(1); r1 = get_ran(1,0,100) + adjust; r1 += 5 * (monst->m_d.status[9] - adven[pc_num].status[9]);//dumbfound status r1 += 5 * balance; r2 = get_ran(1,1,6); if (r1 < 30) { sprintf((char *)c_line, " %s is drained %d.",adven[pc_num].name,r2); add_string_to_buf((char *) c_line); monst->m_d.mp += r2; balance++; if (adven[pc_num].cur_sp == 0) { adven[pc_num].status[9] += 2; sprintf((char *) c_line," %s is dumbfounded.",adven[pc_num].name); add_string_to_buf((char *) c_line); if (adven[pc_num].status[9] > 7) { sprintf((char *) c_line," %s is killed!",adven[pc_num].name); add_string_to_buf((char *) c_line); adven[pc_num].kill(2);//dead status } } else adven[pc_num].cur_sp = max(0,adven[pc_num].cur_sp - r2); } if (r1 > 70) { sprintf((char *)c_line, " %s drains %d.",adven[pc_num].name,r2); add_string_to_buf((char *) c_line); adven[pc_num].cur_sp += r2; balance--; if (monst->m_d.mp == 0) { monst->m_d.status[9] += 2; monst_spell_note(monst->number,22); if (monst->m_d.status[9] > 7) kill_monst(monst,pc_num); } else monst->m_d.mp = max(0,monst->m_d.mp - r2); } print_buf(); i++; } } The item ability 53 is, of course, will. Originally Posted By: Celtic Minstrel Oh my. I think I'll just search for all instances of "get_ran(1,0,100)" (in all three programs) and replace them with "get_ran(1,1,100)". It's simpler that way. If you know of some instance of "get_ran(1,0,100)" that shouldn't be so replaced, speak up. I don't know if some needs to be left alone, i assumed the dice in BoE was 101-sided ... If i ever gather the courage, i will look every instance of get_ran to see if it needs fixing. It won't happens anytime soon, though. Originally Posted By: Celtic Minstrel Such a change would not have to wait for the format rewrite – adding it would not actually affect legacy compatibility. However, it would be impossible to use until the scenario file format supports it. I'm just putting it forth as an idea. Actually, I think I'll also add it to the Google Code issues page so that it's not forgotten. Seconded. Originally Posted By: The Almighty Doer of Stuff Also, perhaps instead of including only one version of the graphics, perhaps a switch could be put in the preferences for darker or lighter graphics I was thinking of such a thing and will see what can be done. It's not top priority though Originally Posted By: Celtic Minstrel Could I see your code for this? End of boom_space() function : Click to reveal.. if ((cartoon_happening == FALSE) && (dest_rect.right - dest_rect.left >= 28) && (dest_rect.bottom - dest_rect.top >= 36)) { sprintf((char *) dam_str,"%d",damage); text_rect = dest_rect; text_rect.top += 10; if ((damage < 10) && (dest_rect.right - dest_rect.left > 19)) text_rect.left += 2; OffsetRect(&text_rect,-4,-5); if ((type == 1) || (type == 4)) WinBlackDrawString(dam_str,text_rect.left + 12,text_rect.top + 6); else WinDrawString(dam_str,text_rect.left + 12,text_rect.top + 6); } if(party.stuff_done[305][7] > 0) play_sound(-sound_to_play[sound]); else{ play_sound(sound_to_play[sound]); if ((sound == 6) && (fast_bang == 0)) Delay(12, &dummy); Delay(10,&dummy); if (fast_bang == 0) { del_len = PSD[306][6] * 3 + 4; if (play_sounds == FALSE) Delay(del_len, &dummy); } } redraw_terrain(); if ((cartoon_happening == FALSE) && (overall_mode > 9) && (overall_mode != 35) && (overall_mode != 36) && (overall_mode != 50)) draw_pcs(center,1); } This is temporary though, as i've not decided what solution to implement. Originally Posted By: Celtic Minstrel I don't think it occurs on Mac – I vaguely remember stepping on cold terrain and seeing the cold damage icon. Which function does it occur in, so I can check? In check_special_terrain(), case 2, 3 and 4 of the ter_special switch, hit_party(r1,1) should read hit_party(1,dam_type). I think this one is Windows specify, though. Originally Posted By: Celtic Minstrel As far as I can tell, they aren't displayed at all, even in black. Could you show your code? Click to reveal.. (put_text_bar code) void put_text_bar(char *str) { char status_str[256]; short xpos = 205; HDC hdc; HBITMAP store_bmp; RECT text_rect = {5,3,279,21}; COLORREF x = RGB(0,0,0),y = RGB(255,255,255); rect_draw_some_item (orig_text_bar_gworld, win_from_rects[4], text_bar_gworld, win_from_rects[4], 0, 0); hdc = CreateCompatibleDC(main_dc); SetBkMode(hdc,TRANSPARENT); SelectObject(hdc,small_bold_font); store_bmp = (HBITMAP) SelectObject(hdc,text_bar_gworld); sprintf(status_str,"%s",str); SetTextColor(hdc,y); win_draw_string(hdc,text_rect,status_str,2,9); SetTextColor(hdc,x); if (monsters_going == FALSE) { if (PSD[305][0] > 0) { text_rect.left = xpos; SetTextColor(hdc,RGB(255,255,255)); sprintf((char *) status_str,"Stealth"); win_draw_string(hdc,text_rect,status_str,2,9); xpos -= 60; } if (PSD[305][1] > 0) { text_rect.left = xpos; SetTextColor(hdc,RGB(255,255,255)); sprintf((char *) status_str,"Flying"); win_draw_string(hdc,text_rect,status_str,2,9); xpos -= 60; } if (PSD[305][2] > 0) { text_rect.left = xpos; SetTextColor(hdc,RGB(255,255,255)); sprintf((char *) status_str,"Detect Life"); win_draw_string(hdc,text_rect,status_str,2,9); xpos -= 60; } if (PSD[305][3] > 0) { text_rect.left = xpos; SetTextColor(hdc,RGB(145+PSD[305][3]*10,40+PSD[305][3]*10,40));//fading (as effect wear off) orange text effect test sprintf((char *) status_str,"Firewalk"); win_draw_string(hdc,text_rect,status_str,2,9); xpos -= 60; } } SelectObject(hdc,store_bmp); if (!DeleteDC(hdc)) DebugQuit("Cannot release DC 23"); rect_draw_some_item (text_bar_gworld, win_from_rects[4], text_bar_gworld, win_to_rects[4], 0, 1); } Originally Posted By: Celtic Minstrel I also discovered that for some reason the game isn't loading strings correctly. I'll have to look into that... it's slightly odd since the editor doesn't have a problem, but then it could have to do with the fact that the game often loads the strings "as needed" rather than all at once. I've never encountered something like this with the Windows code ... A relic of the refactoring ? Originally Posted By: Celtic Minstrel First, could you post your code? Second, there are some unused fields in the town record. One of this could be put to use for this feature. We could add the node as well, to toggle whether the map is available. This heavily use platform dependant graphical code but here it is anyway. Add this at the beginning of the draw_map() function : Click to reveal.. if(party.stuff_done[308][0] > 0 ){//map not available if (modeless_exists[5] == TRUE){ // RECT text_rect = {30,265,230,275}; // legacy text position (lower left corner) RECT text_rect = {0,0,300,290}; hdc2 = GetDC(the_dialog); paint_pattern((HBITMAP) hdc2,2,map_world_rect,0); SetBkMode(hdc2,TRANSPARENT); SelectObject(hdc2,bold_font); SetTextColor(hdc2,RGB(255,255,255)); char_win_draw_string(hdc2,text_rect,"Map unavailable.",1,10); GetClientRect(GetDlgItem(the_dialog,1),&draw_rect); InvalidateRect(GetDlgItem(the_dialog,1),&draw_rect,FALSE); fry_dc(the_dialog,hdc2); } return; } Originally Posted By: Celtic Minstrel I don't think we should add the ability to hide outdoor maps though. I think I mentioned my reasoning for that somewhere already. I agree with Thuryl : if a scenario designer wants to hide outdoors, he should be able to do it. It's up to him to justify the existence of such an effect and make sure the player is not stucked with a "Unavailable Map". A simple if(overall_mode != 0) check will prevent such a thing if you really don't like the idea ... Originally Posted By: Celtic Minstrel With regards to the flags, I have added a check to see if the first flag is 0x0B0E. If it is, I will treat the file as a new-format save file. The three flags will then follow as normal; after that, it may be useful to add a version flag. Beyond that, I'm not entirely sure. Which flag ? The town save flag ? Wouldn't in_scen be more appropriate ? Originally Posted By: Celtic Minstrel I've now realized that ver is in fact the scenario version, so it should be scenario.format.prog_make_ver that is set to 2 to indicate new version. In the Windows version of the scenario_data_type structure, only scenario.prog_make_ver exists ... Originally Posted By: Celtic Minstrel I should probably implement this debug mode. Could you give me some information about it? If you want a glimpse of the code, Ishad Nha lastest version of the code should have all debug functions but enter_town implemented (see handle_keystroke()). The choice here was to use the scenario debug mode (there was another debug variable, presumably used by Jeff as a coding debug mode. It has been merged with the scenario debug mode). When you Shift+D, you enter debug mode (no password, the code being open it's pretty useless) and you have some Shift+? functions that perform debug functions. Originally Posted By: Celtic Minstrel Okay, so I was wondering – can anyone tell me what mode 5 is? It appears that it may be "dropping mode" when in town (as opposed to combat), but it's not really very clear... Indeed, 5 is dropping in town mode, 15 is dropping in combat mode (checked ingame). Originally Posted By: The Almighty Doer of Stuff While you're working on the automap, sometimes, when I move next to water, one edge of the water will be replaced with the tile that's next to it on the automap. It's kind of hard to describe what I mean, I guess. Maybe someone knows what I'm talking about and can explain it better. Also, terrains that emit light are strange colored blocks on the automap, rather than small representations of themselves. I've come across this bug and i think i found its cause. In draw_map() function, under the // Try a little optimization ( ) comment : Click to reveal.. if ((pic < 400) && (where.x < area_to_put_on_map_rect.right - 1)) { if (out_mode == TRUE) what_ter2 = out[(where.x + 1)+ 48 * party.i_w_c.x][where.y + 48 * party.i_w_c.y]; else what_ter2 = t_d.terrain[where.x + 1][where.y]; if (out_mode == TRUE) expl2 = out_e[(where.x + 1) + 48 * party.i_w_c.x][where.y + 48 * party.i_w_c.y]; else expl2 = is_explored(where.x + 1,where.y); pic2 = scenario.ter_types[what_ter2].picture; if ((map_pats[pic] == map_pats[pic2]) && (expl2 != 0)) { draw_rect.right += 6; map_graphic_placed[(where.x + 1)/ 8][where.y] = map_graphic_placed[(where.x + 1)/ 8][where.y] | (unsigned char)(s_pow(2,(where.x + 1)% 8)); } } If pic2 is an animated terrain, pic2 is >= 400. But map_pats is a 256 char array, so the check is done way out of the array. If by chance the value at pic2[4xx] matches the map_pats[pic] value, it displays oddities. (torches and camfires are 411-413 so the most likely (as further) to trigger this). The fix is to simply replace if (pic2 < 400 && (map_pats[pic] == map_pats[pic2]) && [..] Chokboyz Edit : ever wondered why you could fire arrows through solid walls or even in complete darkness ? It's because, in fire_missile(), the check else if (can_see(pc_pos[current_pc],target,0) == 5) should read else if (can_see(pc_pos[current_pc],target,0) > 4). (There's also an occurence of that glitch in the field handling functions, when the program cleans the field that are not seen)
  8. I'm ironing a few bug out before releasing the code (would someone gives me an accurate description of the "timer event doesn't appear to work" bug ? ) Meanwhile, Ishad Nha has compiled version of OBoE that incorporates lots of recents bug fixes. I think this link is the one : http://www.freewebs.com/ishadnha/BoE2009.zip Hope it helps, Chokboyz
  9. Originally Posted By: Celtic Minstrel I've removed passwords from the Mac version, but it's also currently unable to open files, so that doesn't help much. I'll look at that scenario now to see what I can make of it. If you really can't open the file, i can remove the password (or set it to whatever you want) on Ishad Nha's first (large) file. Originally Posted By: Celtic Minstrel Do you know which town the module town is and what its size is when in the game? Originally Posted By: Ishad Nha In my exthree.exs, Delan is town 29, it is still called "Town Name", town 30 is Module town. Judging from the map, it's a large town. By the way, thanks Ishad Nha : being able to roam Valorim once again is a nice feeling Hope it helps, Chokboyz Edit: Hum, that seems an excellent occasion to complete the debug mode, so here is the last command : Enter Town. Click to reveal.. (Enter Town case) case 'T': // Enter a Town if (in_scen_debug) { short find_direction_from; char response[256]=""; sprintf(response,"Enter Town Number (between 0 and %d)", scenario.num_towns -1 ); display_strings(response,"",0,0,0,0,"Which Town ?",-1,130,0); get_text_response(873,response,0); i = atoi(response); if(i>=0 && i < scenario.num_towns ){ if (party.direction == 0) find_direction_from = 2; else if (party.direction == 4) find_direction_from = 0; else if (party.direction < 4) find_direction_from = 3; else find_direction_from = 1; start_town_mode(i, find_direction_from); } } break; The direction you enter the town is the direction you are actually turned to (i.e the direction of the last step you took. Default is entering from the down). The party outdoor location is not updated : to find the town would require scanning (hence shifting) all the outdoors areas ...
  10. Originally Posted By: Celtic Minstrel I discovered a few lines of code that will prevent Magic Map from working in a town. The town record contains a field called "special2". If special2 % 10 is equal to 1, Magic Map will fail in that town. The field is never written to, and is only checked in two places: use_item() and do_mage_spell(). So it wouldn't affect Far Sight. Indeed, like m_name[25], those variables are not used. I didn't noticed the magic map (item or spell) failing condition, but that makes sense since, if i remember correctly, you couldn't use magic map on several towns/dungeons in Exile II/III. I think we can make them into bitfield, but shouldn't the check be removed (or adapted) ? Originally Posted By: Celtic Minstrel Ishad, did you put a password on that scenario? I opened the file without a problem ... I don't think there's any password. Chokboyz
  11. Quote: So the character editor doesn't have a hard-coded item list like it used to? Exactly, it now loads the item list (and the town names, ...) right from the scenario file. Chokboyz
  12. Originally Posted By: Shifting Global Mod Less serious question: Where the heck does your PDN come from? Ah, that one It's from Warhammer 40.000. In this board game, young orcs are disciplined and serious, only getting chaotic and brutal when growing up. They tend to regroup in units, calling themselves Chokboyz. I am not the party type, so when i was young others, often see me as someone serious. One day, some guy, a Warhammer 40.000 player i suppose, told me i was behaving like a Chokboy. That pleased others and rapidly became a nickname. And that kinda sticked since ... Not the brightest PDN i admit, but i'm used to it Even less serious question: Why the heck does your PDN changes each time i see it (your avatar gives you though) ? Chokboyz
  13. Quote: At some point wouldn't it be easier to just write a new game engine from scratch, and make a converter to read in BoE scenarios? I think that's what will eventually happens.When the remaining bugs will be ironed out, the next step will be, indeed, major rewriting (Celtic Minstrel has already began that). After releasing a (mostly) bug free version of BoE (a sort of "Classic" Blade of Exile), focus will be on code refactoring. I don't know when it will happen, though Writing a new engine from scratch is a possibility, but i'm not a programmer enough to know about that ... Chokboyz
  14. New version of the char editor code is uploaded. I found several bugs that needed to be fixed and made some additions. Changelog : - Corrected the edit day option so that it sets the day to the one specified and not to the day after. Not a crucial one, but fixed anyway (original bug). - Fixed the saving function : now changes can be saved outdoors (that was crashing at save stored_items making give_map non functional). That also fixes the stored items arrays being filled with items from current town. Major bug that was present in the original (Ormus) code. The current_town_item_list was used to fill the stored_item array, resulting in : The stored array being filled by the items in current town if in town. When loading a new scenario, the game would propose the player to get these items. The saving function returning before ending with outdoor, not saving the maps. The give map options were then useless. - If in a scenario, the editor nows display the name of the town the party is in or if they are outdoor. (even while in a Mac made scenario) - Giving PC items from a Mac made scenario doesn't crash the game anymore (overall Mac scenario support added) Big/little endian adjustment. If giving items from a scenario made on mac, the game would crash when using them, getting info on them, etc ... - Cleaned the ressource file. The executable is now smaller. But more can be done with the code i'm sure - On give items : the editor now tries to load the bladbase.exs file if the scenario file is not found. If can't locate the bladbase, the items menus are grayed. Thus preventing clicking on unallocated items. The Character Editor should now be fully operational. Chokboyz
  15. Originally Posted By: Celtic Minstrel Ooh, thanks, I had missed the presence of those three flags at the start. On Windows, is the first flag either 5790 or 1342? For a new save format, we could set that flag to some other random value. (We should avoid 40470 or 15877, which, if I've calculated correctly, are the byte-swaps of 5790 and 1342.) Yup, straight from the sources : slot 0 ... 5790 - out 1342 - town //in town ? slot 1 100 in scenario, 200 not in //in scen ? slot 2 ... 3422 - no maps 5567 - maps// save maps ? Quote: Right, something to consider then. Though that doesn't explain why it doesn't affect the scenario editor... I forget to precise that the faulty function was rect_draw_some_item() . Originally Posted By: Niemand The game's savefiles have a really dumb, trivial cipher applied to them; each byte is XORed with the constant 0x5C. That's true for party data. The PCs data is "encoded" using the constant 0x6B Quote: Fair enough. I'll probably give you a chance to catch up soon, once I iron out a few more things. As new bugs arose (char editor refuses to save the stored_item array if not in town ... It's incredible how bugs are always where you expect them the least ), it won't be anytime soon, i fear Chokboyz
  16. Originally Posted By: Celtic Minstrel I think the only bug remaining in the dialog code is the one that sometimes causes a control to randomly be replaced with whiteness. It never happens in the scenario editor, though – I've only witnessed it in the game. This happened when displaying custom items with transparency in the Windows version. The problem was a RECT copied with src size despite being dest size (custom graphics src/dest size are often differents). Originally Posted By: Celtic Minstrel The scenario header flags are 10/20/30/40 for Mac and 20/40/60/80 for Windows, right? I propose that when we rewrite the scenario format we choose the same header for Mac and for Windows – maybe something like 100/75/50/25. For scenarios in the new format, only PowerMacs would need to use the flip and port functions. Agreed, it should use the same header (thus i don't know which one ... 100/75/50/25 seems like a good choice). Originally Posted By: Celtic Minstrel a "map" of the save file format The save_file function is helpfull here. First the three flags town_save;in_scen;save_map (short type in windows/flag_type on mac), then the party (size party_record_type), setup (size setup_save_type), pcs (size 6* pc_record_type), outdoor data (size out_info_type), then town if town_save (size current_town_type + big_tr_type + stored_items_list for win/town_item_list for mac), stored items (size 3*stored_items_list), maps if save_map (size stored_town_maps_type + stored_outdoor_maps_type) and finally sfx and misc (?) (size 2 * (64 * 64)). Notice that stored_items_list and town_item_list are the same structure and be (as it has been done by Ormus) merged into one. I haven't looked for the scenario format. Originally Posted By: Celtic Minstrel Once we have a map, we need to create a function (or method) which reads the old file format one field at a time rather than in one large block. Seems like Ormus already did this in his version of the source code ... Ah, and don't forget that party and pc are encrypted in save files ... Originally Posted By: Celtic Minstrel Have you made any attempt to duplicate my dialog code refactoring? Not yet, i need time for this. And i need to work too Chokboyz Originally Posted By: Niedmand All you need to know is the ordering of the blocks/structs and the struct definitions. Ormus version of save_file follow the struct definition order. I think it's not legacy compatible, though.
  17. Originally Posted By: Celtic Minstrel Success!! I got the scenario editor to open a scenario when compiled as Intel code, and now can use the debugger to figure out what's going wrong in the terrain dialog. Good job, things will be easier from now on ... By the way, in win_draw_string() : Click to reveal.. if (on_what_line == LINES_IN_TEXT_WIN - 1) <= this is asking for trouble i = 10000; <= as soon as the text is 11 (?) lines long if (i - last_line_break > 1) { strcpy((char *)str_to_draw,(char *)null_s); strncpy ((char *) str_to_draw,(char *) c_str + last_line_break,(size_t) (i - last_line_break)); <= copy the next 10000 - last_line_break bytes to str_to_draw starting from c_str + last_line_break sprintf((char *)str_to_draw2," %s",str_to_draw); <= this is useless, as not used (replaced by c2pstr) //if (strlen((char *) str_to_draw2) > 3) { // str_to_draw2[0] = (char) strlen((char *)str_to_draw); // DrawString(str_to_draw2); //} if(strlen((char*)str_to_draw) > 2){ c2pstr((char*)str_to_draw); DrawString(str_to_draw); } How long is the "Enter properties for this terrain type ..." string ? Originally Posted By: Thuryl It seems like a Show/Hide Map node would provide more flexibility to the designer than putting it in the town options, though. That's never a bad thing. There's no reason not to let people prevent outdoor mapping if for some reason they want to. I agree, so i will (temporary or not) implement it as a global variable (SDF[30x][y]). Chokboyz
  18. I've been unable to locate the Mac editor error, since i don't have a way to pinpoint the source of the error Have you succeeded in locating the precise point where the program crash (i.e what function, what instruction, etc ...)? You've changed so many things concerning terrains graphics (for example, csp(813,14,store_ter.picture - 400,PICT_TER_ANIM_TYPE); regroups the original csp(813,14,store_ter.picture - 100,PICT_TER_ANIM_TYPE); and the -300 that is later used for animated terrain graphics) that it can be pretty anything (a check that uses the old notation for example). I would investigate how the function put_ter_info_in_dlog behaves (i.e if everything that is called, is called with the right argument) and the rest of the function edit_ter_type() if it were possible ... Originally Posted By: Celtic Minstrel The problem occurs while drawing the dialog, not while initializing it (as far as I can figure out, anyway). The drawing of the "Enter properties for this terrain ..." string is done in cd_create_dialog_parent_num(813,0); (precisely in GetNewDialog(...); speaking of which, are you sure the GetDialogWindow() is necessary ?) and since the next instruction is reached ... Did you also check if your ressources files were ok ? Without a way to test my guess, i'm pretty useless concerning this problem Originally Posted By: Thuryl You know what would be a good use for this? An option to specifically turn off damage sounds -- or better still, force them to play asynchronously. At the moment, walking on damage floors or damaging fields takes forever because you have to wait for the *zap* *zap* *zap* *zap* *zap* *zap* as all your characters get hit every single step. Originally Posted By: Celtic Minstrel It could use, say, SDF(305,7). I implemented a preference option, using SDF[305][7], that does something like that. What effect would you (as in players) prefers ? Skip all delay between sounds (speeds up boom spaces) That's the one i use. Play the shortest sound (i.e the sound played when a shade hits you) Play no sounds (then don't count on reading the number) Skips everything (as in "No frill effects" but applied to boom spaces) Quote: Also, I'm not quite sure what SDF(305,9) is, but it appears to store the number of hostile monsters that have seen you It seems like it is a counter of "hostile activity" : if you've succesfully hide from monsters for more than 30 turns, the town gets to its "placid" state ... I didn't look if this was used in the game though ... I've also corrected the damaging terrains so that they display the right damage type/play the right sound when stepped on (previously the fire damage type was always used). I think this is a Windows-only bug, but if it also occurs on Mac, i'll post the fix. The party status (Flying, Firewalk, Stealth, Detect Life) were displayed in black, making them hard to read (or even notice). I fixed that too (a Windows-only bug ?). Finally, a relic from the past, the Exile I/II (maybe III) "Map unavailable." feature is now implemented. I used a SDF to test it, but it's obvious the town record type would have to be changed to use it. Something that can't be done without breaking compatibility, i fear So i thought, why not make a node that displays/hide the map ? That way, even outdoors map can be hidden. And the town record type is left untouched ... Chokboyz
  19. Place a sysbeep (or whatever you want to now if a point is reached) in the function edit_ter_type() right after the line cd_create_dialog_parent_num(813,0); Does the sound play ? (is the point reached ?) Chokboyz
  20. Quote: I only found one reference to it, though you mentioned something in the startup. I do in fact have two lines of code in the startup that set SDF(NO_FRILLS) and SDF(NO_SOUNDS) to 0 – I suppose it's possible that one of those was originally affecting SDF(304,9). In any case, I'll delete that one reference. All SDF are reinitialized to 0 at each party initialization, then some options are loading from the bladmisc.dat (if i'm not mistaken) and others initialized. I would also say it's a leftover and delete it confidently. Click to reveal.. (proof) void init_party_scen_data() { short i,j,k,l; Boolean stored_item = FALSE; short store_help; party.age = 0; store_help = PSD[306][4]; for (i = 0; i < 310; i++) for (j = 0; j < 10; j++) party.stuff_done[ i ][j] = 0; PSD[306][4] = store_help; party.light_level = 0; party.outdoor_corner.x = scenario.out_sec_start.x; party.outdoor_corner.y = scenario.out_sec_start.y; party.i_w_c.x = 0; party.i_w_c.y = 0; [...] Quote: With modern computers we have plenty of memory, so I'd say better a little too much than too little. Especially if we are keeping the SDF array a fixed size. I could have suggesting making it 300 wide, though. I think somewhere between 30 and 70 is probably more reasonable. Yup, that's definitely a possibility. Should be added to the suggestion list, if not already. Quote: No, no, it's the other way around. I've solved the "not drawing controls" problem but still have the "editing terrain crash" problem. Wow, must be post confusion Quote: What is the expected output? What do you see instead? It should display the edit terrain dialog, and it does, but then it crashes. At what moment does it exactly crash (i.e what is displayed : only the dialog, some strings in it, are the led lit, the field filled , ... ?) Note : i've improved the fix that was redrawing the map after each terrain changes : when there were too many changes the performances dropped significantly (i noticed this on the burning farmhouse in the Deadly Goblins scenario : rapidly there are so many quickfires that the map refreshes during 1-2 seconds ). So, I wrote a function that only redraw given rectangles on the map, saving (much) time on the process. Now one can follow the fire spreading without any slowdown. I tested this new fix with some other massive map transformations and the gain was impressive. Unfortunately, i don't know if the code is platform-dependant (i fear so) and can surely be cleaned a little ... However it was mainly an adaptation of the classic draw_map() function, so i think a Mac equivalent can be coded pretty easily. Chokboyz
  21. Quote: One thing of note is the fact that Windows has less graphics sheets than Mac. Several of the Windows graphics sheets consist of two or more Mac graphics sheets attached together. I'm not sure whether it'd be better to keep that discrepancy, or to alter the Windows code to make use of the split sheets, or alter the Mac code to make use of the combined sheets, or some combination of both. There is 10 monsters sheets (MONST1.BMP to MONST10.BMP) and 6 terrains sheets (TER1.BMP to TER6.BMP) in the Windows version of the graphics files. I prefer having less sheets, but that's just a matter of taste This isn't urgent though, we will have time to discuss it ... Quote: In that case... shall we remove it? Then we can use it for something else. Feel free to remove all references to it (i did) : it is, in state, useless (the only checks that involves it are always true). Quote: By the way, I was thinking we could increase the size of the stuff done array. Obviously that would be a part of the file format rewrites, but I would propose extending its width to, say, 50 instead of 10. That may be a good idea for later ... Isn't 50 a little too much though Quote: also you can add the OS-WINDOWS label if the bug is also present in the Windows version. I will check that. I took a look at the Mac code and felt a little lost here ... I may not be of a great help as i don't know most of the functions/variable/types used ... And i can't even test my changes But i will try, anyway From what you have said, it seems you have already solved the "Editing Terrain button crashed the editor" problem ? The problem remains is "game and pc editor do not seem to be drawing any dialog controls ", right ? Chokboyz Edit : Originally Posted By: Alcritas According to the BOE Manual, the Affect Party — Do Damage special node allows the scenario designer to vary the Pict. box. Doing so will supposedly only cause damage to the PC who triggers the special, if the party is in combat node. Unfortunately, this does not work. The node now behaves as in the help file (if pict is 1, in combat mode and no Select Pc node has been used, only damage the active character). Simply change the case 81 in affect_spec() (SPECIALS.cpp) to case 81: r1 = get_ran(spec.ex1a,1,spec.ex1b) + spec.ex2a; //get random damage if (pc < 0) { //has a PC been selected if(spec.pic == 1 && overall_mode == MODE_COMBAT) //if not and in combat and pict value is 1 adven[current_pc].damage(r1,spec.ex2b,0); //damage the current active pc else adven.damage(r1,spec.ex2b);//else damage everyone } else adven[pc].damage(r1,spec.ex2b,0);//if a pc has been selected, just damage the pc break; The code needs to be adapted for the Mac version, because here it use the c++ rewriting of Ormus. (just use the original damage functions).
  22. Quote: Once I've fixed the major graphics bug, I'll add all your fixes starting from this post. Ok, i'll try to refrain from doing more fixing then Quote: I'm thinking of using the Google Code Issues section as a personal todo list (though of course anyone may submit bug reports or feature requests there). Otherwise I may just keep forgetting about things. Go ahead, that's a good idea. Quote: Besides the stuff that you've done which I haven't yet incorporated, I need to make use of the constants in consts.h, add the option to skip startup splash, fix several major bugs... and I think there's a few other things too. I haven't used constants from CONSTS.h much too. What others major bugs are you looking to fix ? I should add them to my todo list if not already there Quote: About graphics: From what I remember, the Windows graphics are in fact brighter than the Mac graphics to account for differing gamma settings. What would you think about using the Mac graphics for the Windows version? If necessary you could probably adjust gamma manually, though that'd probably be hard (maybe upon loading an image). But I suspect it may no longer be necessary to adjust gamma, since modern computers (at least Macs) have ways of doing this automatically or something... I think... Indeed, Windows graphics are brighter than Mac ones (it is flagrant when using custom scenarios with custom graphics done on Mac). Either we use the Mac or Windows one, but that should be normalized Like you , I think that adjusting gamma is no longer necessary; using a corrected bmp should suffice. Quote: I just noticed that SDF(304,9) is checked in one place, but never appears to be assigned to... It is, apparently, a flag that allow/prevent some sounds from being played (that's not clear, it seems to be doubling as a No Sound check). It is assigned to 0 during the initialization of the game (cf load_file(), etc ...) so it's utterly useless. Chokboyz
  23. Quote: I think it should be fixed, but I'm not sure whether it would break compatibility with older scenarios. If it could, then we'd want to find a way to fix it without breaking compatibility... and I have no idea how we would do that. Ok, that's added on the todo list (provided i find a non-destructive way to do this) ... Quote: Well, the code does not allow a monster to move onto the same space as another monster, right? So there are therefore exactly two ways to get two monsters on one space: a) by summoning and by placing them in the editor. The first isn't a problem, because summoned creatures never have dialog. The second could be fixed by both including the change you mention (always pick the first character) and also by ensuring that the editor does not allow you to place a monster on a space when there is already a monster there. The safety check (always picks the first character) is the most simple one : find the (huge) handle_action() function, find the lines // Begin : talking to someone and in the loop add a break; just after else switch (c_town.monst.dudes.monst_start.personality){ default: start_talk_mode(i,c_town.monst.dudes.monst_start.personality,c_town.monst.dudes.number, c_town.monst.dudes.monst_start.facial_pic); did_something = FALSE; need_redraw = FALSE; break; } (the switch can be safely removed. I suppose it was here for a different personnalities features that didn't make it ...) Quote: I see no reason to keep compatibility here. Will implement it so; crossing fingers that no crazy designer fiddled with the pic value I will take a look at the code to help you if i find the time (i barely find the time to do work, so i may slow down a bit ). I am absolutely inexperienced with Mac coding (graphically speaking) though. Nonetheless, it's nice to see the code slowly taking shape (are we on the way to cross-platforming ?) Thanks, Chokboyz Edit: To ADoS : Quote: About the Town Encounter/Life flag compatibility: Pict, 1b, 2a, and 2b are unused in the One-Time Place Town Encounter node, so it should be fairly easy to include a compatibility switch. That's what i plan to do ... Quote: As for prohibiting the designer from placing multiple monsters on a space, I think that could potentially have legitimate uses. I think just having the game call the dialog of the first-placed monster should fix it well enough. I agree with you. The fix above should be enough to prevent the infinite loop. (though,i still think someone that places two npc with two personnalities on the same block, preventing them from moving is asking for trouble ) Quote: I tried replicating the Empty problem based on what happened with The Killing Cave, but unfortunately couldn't. However, a different type of Empty (with stats) is summoned by the default Bladbase Scale Necklace. The necklace before it (Lifesaver Amulet) and the one after it (I forget) have ability strengths of 0, so the Scale summons Empties and the one after is effectively useless. Too bad for the Empties, thanks to you for having tried. The Lifesaver Amulet doesn't need charges to work. You're right for the two others : the Scale Necklace summons "real Empties" (i.e monsters 0 with stats, ...) because it ability strengh is 0 and the Amber Periaph is useless. That should be fixed in the corrected Bladbase.exs.
  24. Okay, still an odd choice though Maybe Jeff choose to create another array instead of having to change the structure and checks all the code ... Nevermind, it's fixed after all Some questions to people out there : Originally Posted By: Alcritas Creatures in one time place town encounters don’t check their life flag. For example, if you have a creature in a one time place town encounter with a life flag of 1, 5, that creature will appear when the one time place town encounter goes off, even if the 1, 5 flag has been set to 1. Should it be fixed ? Wouldn't it break any legacy scenarios ? Originally Posted By: Alcritas ? If two friendly NPCs occupy the same space, and they both have dialogued personalities, talking to either of them will cause the game to freeze (note : infinite dialog loop). This is cleary asking for trouble ... Should it be fixed and how ? (i've succesfully tested a fix that would only talk with the first placed character. Choosing the character you would like to talk to would be a little harder ... ) Originally Posted By: Alcritas According to the BOE Manual, the Affect Party — Do Damage special node allows the scenario designer to vary the Pict. box. Doing so will supposedly only cause damage to the PC who triggers the special, if the party is in combat node. Unfortunately, this does not work. Should the behavior described in the help file be implemented (compatibility, etc ...) ? I'm always investigating empties (never seen any during all my tests) and timer problems (still guessing what the problem is). Thanks, Chokboyz
  25. Ok enough edit, this one will get a new post ... Investigating the 100 town bug, i found that the saving of the maps in town with number more than 100 was faulty (disappearing squares, ...). So i took a look in the code, to find what was happening. stored_town_maps_type is the structure where maps are stored. In Mac's code, it's a [200][8][64] array (200 towns, 8 is x axis (bitwise coded when read or written), 64 is y axis) and everything seems ok. In Windows code it was a [100][8][64] array. What about the 100 other towns ? No problem, there was a second stored_town_maps_type named town_maps2 that does the job (another leftover from when the 100 town limit was reached in Exile III ?). Unfortunately, the confusion between the two stored_town_maps_type was predictable. First there was a check to see if town number was more than 100 (if the case, use town_maps2). The reading of 100+ towns maps was well coded, but when it came to save them, it was chaos : the original version of the code saved the value from the first town_maps at the number of the town index (i.e 100+, out of the array) in town_maps2 and the corrected one only changed the function to take value into town_maps2 (but still out of the array). Simply telling the function to look at the number_of_town - 100 index would have corrected the bug, but there is no point at having two array while one can do the job (even more when the Mac's code only use one !), so i changed the stored_town_maps_type to match the correct (Mac) one and modified the code accordingly. I didn't have any crash, nor corrupted maps since ... Further testing would ensure that the bug is gone for good, but that should be ok. Chokboyz
×
×
  • Create New...