#Build 69 (2011/10/14) !external release! bug fix: maps don't save/load scripted item definitions bug fix: creating a new map doesn't crash started aspect.vau file bug fix: interior/exterior map tilesets are used properly new art: added some of Eduardo's art back into the game #Build 68 (2011/10/03) error log: no errors will be output for Items without equippable statistics internal: moved EMapLayerDefinition to oc.rpgengine.parameters.engine art: renamed ground tile images art: added corners for ground art art: separated interior, exterior tilesets, and object sets internal: SpriteVault -> SpriteFactoryVault art: have interior and exterior tilesets defined in scenario - use one or the other for all maps internal: ScriptedSpriteArtVault.loadScriptedSpriteRenderers -> loadScriptedObstacleRenderers separate bridge/item/trap layers into an "objectset" internal: make objects actually appear internal: eliminated unused methods from TilesetLoader internal: moved CharacterArtVault into ScriptedSpriteArtVault internal: NullSprite now extends AbstractTiledSprite instead of BasicTiledSprite removed: source prefix.txt file (used to add prefix to all files) #Build 67 (2011/09/04) internal: deleted ReinerProcessor updated carry weight description to include hectograms; initial value is now 750 new art: basket, inventory button, torch internal: reorganized AreaMap internal: added AbstracterCharacterFactorySingle to separate character renderers from factories map editor: Changing Character sets uses missing character image for characters that aren't defined gamedata: created minimal items.vau file (stored in defaults folder) gamedata: edited upgrade.vau to have an array of statistics rather than using numbered statistics vau: arrays now require = and ; to be used item definitions internal: CurrentScenario.parsePlayerSpecies should output the parse log internal: RPGGameDataErrorList is now the interface IRPGGameDataErrorList bug fix: IntPairArray.getB returns the correct int utility: ObjectIntPairArray internal: RpgSystemVault.processStatisticModifiersFromArrayProperty processes statistic modifiers internal: some RPG classes are renamed to Rpg internal: separated scenario parsing from scenario loading (only parse stuff in the game) map editor: item definition dialog #Build 66 (2011/08/18) License: Added GPL comment to each source code file. internal: scripted sprite definitions should be stored in the map, not the scenario internal: moved createUntitledMap from EditMapPanel to EditorGuiAccess bug fix: when creating a new scenario, the current map is closed map editor: when creating/opening a scenario/map, the user should be prompted to save the old one new art: lava, pit (as scripted traps) removed art: counter moved log and rock art from obstacle layer to item layer eliminated ground decal layer internal: IRPGStaticDataErrorList -> IParametersRPGErrorList bug fix: clicking on the DialogueDialog's replies doesn't cause movement in the game reduced size of the text of the DialogueDialog's header deletion of unused art: blank background, character guidelines image map editor: removed screen position label new art: cave entrance, crystals, flippers, runes, skull pile, sign, sorry angel, stars, trees, ziggurats new art: basket, basin, candelabra, chairs, keg, iron maiden, pedestal, spikes, stocks, torture rack, thrones new art: chicken statue, floor, magic trap, pillars, pyramid, stairs #Build 65 (2011/08/06) !external release! internal: renamed gobs to factories and updated method names in: MapFileUtil, SpriteFactoriesForLayer, and SpriteVault internal: oc.rpgengine.gobdata -> oc.rpgengine.spritedata internal: TsFactory classes return 1 variation by default unless overridden (may help prevent bugs with returning the wrong value for 1-variation factories, but will make bugs for multi-variation factories more likely) removed map editor error messages bug fix: bridge image gets displayed bug fix: OCSParser doesn't output error messages for script states scripts: included type-checking in parsing (not in ScriptedSprite.executeScript) updated art: now have horizontal/vertical bridge images, added borders refactor: PathFinder uses AreaMapUtil.isPassableTo directly instead of PassablePositionTest bug fix: the player can cross bridges over water internal: AScriptedTsFactory.getScriptedObjectType -> getScriptedSpriteType bug fix: doors open deleted unused species.vau file statistics: convert to new set of statistics bug fix: StringUtil's lowercase canonical map makes Z lowercase properly typo fix: added "to" to the default help text on the status panel bug fix: initial values are included in RpgCharacter's statistics testing: increased starting XP to 5000 internal: ParseLog.getLogText now appends to a ByteString instead of a String error messages: when a .vau file or Script has a parse log, the error messages output its name #Build 64 (2011/07/29) bug fix: in the map editor, when deleting a scripted object causes sprite removals, it flags the map as modified removed art: water (in ground layer) internal: TsCollections are now called TsFactories internal: renamed and fixed AreaMap methods readScriptedSpriteIndexList and writeScriptedSpriteIndexList internal: ScriptedGobArtVault -> ScriptedSpriteArtVault new art: missing character image internal: split oc.rpgengine.staticdata classes into oc.rpgengine.parameters.engine and .rpg internal: reorganized DialogAccess classes internal: used ScriptedSpriteDialogAccess methods for trigger classes internal: moved pseudodialogs into correct DialogAccess classes, adding to EditorGuiAccess's CardLayout internal: CharacterSet -> CharacterArtLoader error messages: map editor's error about bad start information in scenario properties only mentions the start map internal: moved character renderers from ScriptedSpriteArtVault to CharacterArtVault Characters: map editor selects an image and then enters a script Characters: game allows talking to them internal: rearranged Sprite classes to make CharacterSprite extend ScriptedSprite bridges are always extended #Build 63 (2011/07/23) internal: reorganized WPGameView.updateLogic internal: removed check for animation frame == 0 from CharacterSprite.update because it's always 0 when update is called bug fix: Characters don't change paths in mid step internal: renamed ObjectRenderer classes to SpriteRenderer internal: moved Sprite renderers from oc.rpgengine.gobdata to oc.rpgengine.art internal: moved RPGGraphics2D from oc.rpgengine.gamedata to oc.rpgengine.gui internal: renamed RPGGraphics2D to TileDisplayAreaRenderer internal: converted enum names to start with E internal: converted interface names to start with I internal: renamed "gob" classes to "sprite" or "ts" classes internal: rearranged oc.rpgengine packages scripts: multi-state scripts now work, conversations work gui: converted map editor's save unsaved files dialog to Swing bug fix: map editor name dialog includes a cancel button bug fix: map editor should be able to save and name untitled map files upon exit java: jre 6 update 26 will be used internal: removed MapEditorMenuBar.SafeActionListener map editor: should prompt to save modified scenario/map when opening a new scenario or map #Build 62 (2011/07/15) replaced net.jcip.annotation package with oc.concurrency to avoid Creative Commons and GPL conflict moved AbstractSafeRunnable to oc.concurrency internal: JGameFrame is annotated as NotThreadSafe internal: moved classes from oc.gui into oc.graphics.render, oc.main, oc.swing, and oc.util internal: GuiErrorList -> SwingErrorList internal: created AbstractSafeActionListener internal: EqualSizeGridLayout solves the problem I always had with Swing map editor: uses mostly Swing inside the map editor to get word wrap, etc. map editor: defines player species in a text script, rather than having an avatar dialog map editor: hitting enter in a dialog no longer triggers the ok button (due to implementation problems) map editor: can function in windowed mode gui: SplashScreenPanel can be displayed at different sizes internal: BackgroundRenderType for WComposite backgrounds internal: SplashScreenPanel -> WSplashScreenPanel internal: CenterLayout #Build 61 (2011/06/19) !external release! optimization: more efficient text file loading in FileUtil: internal: eliminate usage of java.lang.String in oc.orbitalcowscript, oc.parser, and oc.vau internal: ByteString can read/write itself from/to a Stream internal: AdvancedInputStream/AdvancedOutputStream can read/write ByteStrings new art: sign images bug fix: OCS parser's error messages print better text for the AbstractParseTokens internal: deleted unused constants for users internal: RPGGobErrorList -> RPGTiledSpriteErrorList, ScriptedObjectType -> ScriptedSpriteType internal: fixed ButtonFontAndColor/WPanel comments, reformatted WLabelContainer's comments internal: AbstractMainPanel doesn't take size parameters since they aren't used bug fix: the OneLineTextRenderer constructor with Justification parameters works internal: TileDisplayArea extends WPanel and has modified drawTo method so that it can display dialogs added justification to TextButtonRenderer, put more justification methods in TextUtil internal: EditMapPanel inner classes extending WText now extend AbstractSoloText internal: added WText.setText(ByteString) internal: updated AbstractTiledSprite's comments and added getPixelWidth method internal: WPanel.isDialogBeingDisplayed -> isDisplayingDialog internal: WPanel.isAnyDialogBeingDisplayed -> isDisplayingAnyDialog internal: Buttons now used WMouseEvent.CLICKED instead of WMouseEvent.RELEASED for consistency with the game Signs minimal one-state dialogue works dialogue and reply tags work reverted version number to 0 for options file because "angelband" options file will no longer be loaded renamed all resources to UgaritRL the installer no longer offers to create a desktop icon #Build 60 (2011/06/01) Find Bugs: AvatarDefinitionDialog: is thread safe CharacterSet: made variables final MapFileUtil: uses Short.valueOf(short) instead of new Short(short) MapEditorMenuBar: made it into a singleton to avoid thread-safety issues SimpleFileFilter: doesn't include a description any more Sound: constructor always closes DataInputStream bug fix: OCSParser no longer has null exception when there's a missing bracket JGameFrame: dropped System.exit for lack of Graphics2D, but kept the error message (would most likely cause a crash elsewhere) SaveFileManager: saveOptionsFile aborts when save directory can't be created bug fix: moved card reference in WTopLayerContainer.show into the if(card != null) block TwoPartRowWLayout: is marked ThreadSafe rather than Immutable FileUtil.ensureDirectoryExists: Used by ApplicationCommand, CurrentScenario, and SaveFileManager ByteString: is now never equal to a String; uses equals(Object) method Pair: added equals(Object) method that always returns false ScriptDialog: marked ThreadSafe instead of Immutable MapSizeDialog: marked ThreadSafe instead of Immutable CharacterSet: eliminated possible null reference to optionProperty in an error message inner classes made static: AbsoluteWLayout.WidgetAndLocation ArrayKeyReactor.KeyState FlowWLayout.BlankWidget GamePanel.StatisticProgressBar GobsForLayer.SortedTsCollectionArray StatusPanel.StatusElement WPAbstractMainView.TileCoordinates not from Find Bugs: internal: reordered OperatingSystem's check for different Windows OS's included source code in setup file internal: split oc.widget.text into oc.widget.text and oc.widget.textfield internal: AbstractEditableSoloText -> AbstractEditableText internal: separated text model from AbstractEditableText class internal: moved Justification to oc.graphics internal: moved OperatingSystem to oc.util internal: moved MainLoop classes to oc.gui internal: OptionsPanel changes left/rightSliderTextRenderer to left/rightJustifiedTextRenderer bug fix: invalid index errors in ByteString will be output properly bug fix: Escape opens up the menu again internal: eliminated UserData and UserDataVault added Escape and F2 to Options screen updated options file to include keyboard settings and not unused user data #Build 59 (2011/05/17) deleted classes: SlideshowPanel and related classes ImageBlender FadedImageRenderer, PercentageRenderer, WidgetAsRenderer unused classes implementing AnimationRenderer BooleanFlags BoundedWidget OpenURLAction CombatantAnimationMode CompositeWidgetErrorList incorporated UtilCommon into ArrayUtil incorporated RPGGuiErrorList into RPGErrorList MultipleFileFilter incorporated OutputToFileErrorListener in ErrorLog ErrorListener incorporated ImageLoaderUtil into ImageUtil deleted constants, variables, and methods: unused midi error messages in NoiseErrorList GuiAccess.drawWidgetPanelToImage ImageLoader.getDefaultOneTileImage WMouseEvent button constants DisplayModeConstants.shouldProfileWidgetPanel GameDataConstants.doorOpeningFilename and groundTransitionTilesDirectoryName GamePanelConstants unused constants for status area InterfaceConstants unused buy frame, intro, and main screen constants RPGEnguneConstants miscellaneous unused constants RPGGameDataErrorList.gobsForLayerErrorLoadingGroundTransitionTiles RPGGobDataErrorList.characterObjectRendererInvalidAnimationModeInGetImageToDraw unused ParseToken constructors ArrayUtil.fill methods GuiAccess.getAnimationManager WidgetErrorList.openUrlActionCouldntOpenUrl WidgetSizeConstants.mapEditorMainViewHeight KeyboardSettings leftKey and rightKey ArrayKeyReactor.clearInput (version for specific keys) ControllerButtonState.getUpdatedState FileUtil recurseSubdirectoriesForDirectories, recurseSubdirectoriesForFiles, writeByteFile GuiAccess.getErrorDialog(String,WidgetAction) MathUtil.signum methods Time (MainLoop now uses System.currentTimeMillis) WTextList.isSelected RandomUtil.getNonnegativeLong SimpleBitSet.set FontVault.getDefaultFont, getDefaultFontName, getDefaultFontStyle FileUtil.getExtension(File) made private: CharacterImageDefinition constructor used by importFile GFDisplayMode.BIT_DEPTH_UNKNOWN EditorGuiAccess made some dialog variables private AreaMap.updatePositionKnowledgeOfAllTiledSprites various CharacterAssembler methods CharacterImageDefinition: setReplacementColor methods that take a ByteString as an argument ImageLoader.isImageTooSmall internal: converted cg.vau.AbstractArrayProperty to package-visible used ArrayUtil.defaultArrayCapacity where appropriate updated class comment for JWidgetPanel.ResizeListener EditorVariables and MapLayerDefinition use booleans instead of complex and unnecessary int-flagging fixed since/version tags in oc.util.Array moved some GuiAccess.setDisplayMode functionality into ApplicationCommand.setDisplayMode to avoid cycle (GuiAccess no longer references subpackages of oc.rpgengine) ImageLoader uses the default image FontVault uses Font.SAN_SERIF constant MutableBag one-element constructor has capacity set to the default commented GobsForLayer.loadBridgeImages TrieSet now uses "element" as a parameter name instead of "e" classes now final: OCSParser TileDisplayArea UniversalTextCursorAnimation from PMD: made SoundPlayer.setPaused abstract ResizedMapDialog: eliminated EditMapPanel parameter from constructor ButtonRenderer -> AbstractButtonRenderer CompositeProperty -> AbstractCompositeProperty EditableSoloText -> AbstractEditableSoloText FullViewPanel -> AbstractFullViewPanel JustifiedTextRenderer -> AbstractJustifiedTextRenderer MainLoop -> AbstractMainLoop swapped names of AbstractNamedRpgObject and NamedRpgObject ParseToken -> AbstractParseToken PrimitiveArray -> AbstractPrimitiveArray SafeRunnable -> AbstractSafeRunnable ScriptedTsArray -> AbstractScriptedTsArray ScriptedTsCollection -> AbstractScriptedTsCollection SimpleOneLineProperty -> AbstractSimpleProperty SizedWidget -> AbstractSizedWidget TextWidgetRenderer -> AbstractTextWidgetRenderer TiledSprite -> AbstractTiledSprite TsCollection -> AbstractTsCollection WLayout -> AbstractWLayout #Build 58 (2011/05/12) !external release! Image Assembler: character parts and character image definitions should be grouped together in character sets (moved character image definitions into the art folder; alternative is to use an art folder of "" and put other art in folders like "interface". This is bad for 2 reasons: 1) the art isn't all grouped in one folder 2) if the art is assigned an art folder in the future, it opens up the possibility of bugs wherever the ResourceLoader art directory isn't used properly but worked anyways because it's an empty string ) bug fix: Image Assembler puts errorlog.txt in the right location new art: human arms new cid: creepy bald albino internal: eliminated MapLayerDefinitionConstants constants INTERACTABLE and SHOULD_BE_DRAWN_IN_GAME moved the contents of WidgetSystemManager into GuiAccess moved DisplayWidgetPanelAction to oc.rpgengine.gui deleted unused WPViewWithAction class GuiAccess has one keyboard handler for screenshots, and GamePanel has another for most other hot keys added source notes.txt file (barely used at this point) game: in-game screenshots bug fix: when you open the status screen, the mouse click won't be processed by the status screen as well #Build 57 (2011/05/08) !external release! Image Assembler: separated hair from head separated male and female faces added error message for missing for missing BodyPart directories in CharacterTemplate bug fix: doesn't crash when a BodyPart is missing a directory in CharacterTemplate bug fix: character image definitions include initial " for Strings in the exported .vau file changing the character template clears the rest of the data character art: added "none" image for human arms just so that a human image can be created added .exe file and menu shortcut updated artist - character notes.htm art: deleted unused maleplayerbody.png Game: bug fix: alpha channel transparency is handled properly for the player's image (probably broken in build 56) #Build 56 (2011/05/08) internal: moved CharacterTemplate into a separate file internal: moved constants into oc.rpgengine.staticdata.CharacterImageConstants internal: BodyPart enum streamlines body part loading and storage internal: move all image data and generateImage into CharacterImageDefinition internal: oc.characterassembler -> oc.rpgengine.characterassembler gui: WDatalessWithEmptySpace handles graphics that must be placed within a larger area internal: ColorOption hides variables but adds getter methods vau files: VauObject exposes methods for adding properties and constructors vau files: VauFile.writeVauFile delegates outputting the property to interface Property vau files: VauFile.writeVauFile can handle ListProperties Angelband loads characters from .vau image definition files vau files: ListProperty produces proper text value vau files: ArrayProperties without property names Image Assembler: updated hair colors allows different character set selection saving images hitting "Previous" doesn't clear selected components selected component text will be highlighted when component is changed color options are in a separate file from species split artwork.txt into artwork tiles.txt and artwork characters.txt; updated to include image assembler info converted .txt files to .htm files #Build 55 (2011/04/19) internal: added CardWLayout for main view container in GamePanel internal: IntProperty -> IntegerProperty vau: vau parser can read lists internal: WGuiMainLoop allows setting additional updates through method internal: moved main loop additional updates out of GuiAccess internal: combined GuiAccess.init and GuiAccess.createGui bug fix: Angelband species and status screen use speech statistic instead of invalid communication statistic bug fix: speech is displayed as a percentage updated vau file specifications.txt for lists and made some other minor changes internal: added indexOf and substring methods to ByteString bug fix: VauParser doesn't get stuck in an infinite loop when there's an unexpected token before a ; Image Assembler includes: character component artwork character component definitions in .vau file color changing for skin and hair #Build 54 (2011/02/28) !external release! internal: updated class MainLoop to match the code that made LPC less sluggish status screen: updated screen instructions; XP -> Experience Points, used word "upgrade" temporary: increased starting xp to 150 bug fix: ImageButtonRenderer getImageWidth and getImageHeight methods don't crash for null images status screen: added boxes around each area internal: named enums implement AbstractNamedRpgObject and have a createTrie utility method status screen: rearranged status screen to put life, etc. in a card in the right area status screen: added gender and species rpg system: defined Nephil and Cambion species, but didn't make them available rpg system: edited Chayot Ha Kodesh to make variety between species, reduced skill bonus from attributes by 1 rpg system: added descriptions to species bug fix: corrected spelling error in awe description status screen: made XP cost more visible (added XP cost to right of upgrade?) status screen: write better text as explanation of screen, increased height of description box rpg system: renamed "Chayot Ha Kodesh" to "Archangel" error messages: "Upgrades" are no longer referred to as "Skills" rpg system: renamed and rearranged many skills rpg system: added 2 attributes and reduced cost of attributes internal: build file: changed demo directory to release directory #Build 53 (2011/02/20) !external release! internal: cg package -> oc package internal: CowgodScript -> OrbitalCowScript eliminated buy frame altogether and used best screen mode bug fix: options screen mode scroll bar doesn't start scrolled down when the box isn't full bug fix: scroll bars don't mess up scrolling when they're not packed yet status screen: added Armor & Dodge elements status screen: doesn't move right area box to right in wide screen mode status screen: percentages are displayed for defenses status screen: displays life/halo regained per time for regeneration and halo recovery statistics: Dodge starts at 2% instead of 5% internal: CurrentParty stores all party members internal: AbstractProgressBar allows subclassing to create custom progress bars game screen displays "Empty" for empty party slots internal: GobCollection.getImageForTileSelector() -> getBaseImage() game screen displays party members' actual life and halo; displays portraits internal: GameObject -> TiledSprite, cg.rpgengine.gob -> cg.rpgengine.tiledsprite, etc. dumped music files art: player image updated credits status screen: description box uses word wrap internal: IntArray added removeRange method bug fix: missing music doesn't crash game bug fix: RandomSelectionDirectory.getRandomFilename doesn't crash for empty directories #Build 52 (2011/02/14) game uses "Angelband" save directory instead of "RBI" save directory renamed "error.log" to "logfile.txt" bug fix: TextOverBoxButtonRenderer can find the background color statistic definitions internal: moved WPView and subclasses to cg.widget.view internal: embedded DisplayWPViewAction in WPView internal: cg.widget.FillBackgroundRenderer -> cg.graphics.render.FillWithColorRenderer internal: WidgetSystemManager stores the JWidgetPanel and is used to display panels (this prevents DisplayWPViewAction from using GuiAccess) internal: deleted DiceProbabilityVault and DiceProbabilityComputer vau files: #-based comments vau files: parser outputs line numbers for errors cowgod scripts: parser outputs line numbers for errors internal: streamlined VauParser.parsePropertyLines internal: removed ArrayUtil.copyOf(byte[]) to use a java.util.Arrays method internal: pretty printing of "canonical" names internal: eliminated ArrayUtil.copyOfRange in favor of java.util.Arrays.copyOfRange eliminated 1024x600 modes and window modes internal: removed emulated full screen mode and maximized window mode from the rpg options file gui: StandardTextAreaRenderers have an option not to render the border gui: WTextAreas can be set to not editable internal: StatisticConstants -> RpgSystemConstants rpg system: added Chayot Ha Kodesh species, RpgCharacter and Species classes, species.vau file log: parsing doesn't return newline-only strings to be output game: eliminated intro screen internal: moved some statistic and main screen art to their own folders with constants in own files gamedata: completely revised statistics, skills, and actions files TEMPORARY: assigned 100 XP to new characters status screen #Build 51 (2010/12/12) eliminated transition auto-tiling; transitions are done by hand internal: renamed "wall tops" to "directional obstacles" bug fix: errors in screen drawing won't crash the game or map editor eliminated door opening animations produced water tiles added trap (water) and bridge layers world map template new ugarit temple map art: drew vertical version of single-tile door bug fix: game checks for not walking into 2-tile-wide characters bug fix: player doesn't walk backwards when interrupted while walking bug fix: player can walk to open doors (open doors are now non-interactable) #Build 50 (2010/12/07) internal: MultipleFileFilter (untested) bug fix: SimpleFileFilter only accepts directories that have the right extension optimization: GobsForLayer.loadBasicImages no longer sorts the filenames (they're sorted by the array) internal: put try-catch block around SoundFlagger.playFlaggedSounds to prevent potential crash internal: used BasicObject instead of unnecessary class WallTopSprite (removed WallTopSprite) internal: corrected some error messages in RPGGameDataErrorList internal: deleted unused method AreaMap.createUntitledMap bug fix (probably fixed): map editor can save maps and seems to know whether they're untitled process reiner's artwork (separate in proper way and resize) buggy transition tiles bug fix: map editor doesn't scroll past right and bottom edges of the map #Build 49 (2010/11/24) internal: backup file gets saved to "angelband" zip files internal: separated source and game only distributions (use the backup file as the source distribution) title screen: disabled resume button instead of making it invisible (to center the buttons properly) game status area: moved combatant name and ap to information box at top internal: BorderWLayout's constructor's parameter is "shouldFavorHorizontalComponents" for consistency for other WLayouts internal: FillProgressBarRenderer -> ColorAndTextProgressBarRenderer internal: added WProgressBar.getProgressPercentage() internal: added ColorProgressBarRenderer game status area: converted life and halo to meters (instead of text) maximum party size is now 6 switched to 1-image characters #Build 48 (2010/11/19) internal: deleted build_mac.xml renamed all RBI resources to Angelband There are now at most 5 dice per skill roll and 15 action points. bug fix: FlowWLayout properly handles Widgets whose secondary design size doesn't fit internal: SaveUnusedFilesDialog class is now a WMessageDialog within MainMenuDialogAccess fixed map editor dialogs internal: eliminated registration file requirement (no demo mode) internal: eliminated "deluxe" version added gpl license internal: eliminated InterfaceConstants.teaserDirectory internal: moved save file constants to FileConstants interface renamed scenario file replaced small object layer with item layer moved source folder into the data folder so that it will be distributed with the game dumped old artwork, replaced with temporary art replaced old map file with Ugarit Temple bug fix: the map editor saves new maps bug fix: game starts centered on player internal: WComposite.setActualPosition packs its layout rather than invalidating it (This insures that TileDisplayArea's size is set when centering the screen on the player at the start of the game.) #Build 47 (2010/11/15) internal: eliminated a warning changed licenses to be governed by laws of Pennsylvania added wide screen modes eliminated 800x600 modes internal: eliminated stretch multipliers bug fix: crash in 1024x768 window (WindowOnlyBorder needs to check GameFrame.getDisplayMode() before its set) internal: moved most of Initializer.startProgram into a class eliminated user select screen title screen: centered title, rearrange buttons credits screen: moved button to top, shortened credits internal: fixed unchecked warnings eliminated unused text labels from slideshow panel internal: AbsoluteWLayout cuts the excise size from a widget to make it fit internal: cg.rpgengine.staticdata.LookAndFeelConstants -> InterfaceConstants internal: cg.gui.GuiConstants -> cg.widget.lookandfeel.LAFConstants internal: defined INVALID_POSITION for WLayouts that can leave out some Widgets when necessary put less on the screen for smaller resolutions internal: added BorderWLayout internal: WScrollPane uses BorderWLayout internal: game containers use BorderWLayout internal: combined GuiAccess finishCreatingEditorGui and finishCreatingGameGui methods adjusted all layouts internal: GameObject.getX, getY -> getXTile, getYTile internal: made more methods of WLayout final fix map editor display #Build 46 (2010/10/16) internal: added ArrayUtil.fill(double[][], double), ByteString.append(double), ByteString.append(byte[], int, int) bug fix: ByteString.append(ByteString) doesn't append null characters from the argument's excess capacity compute dice probabilities eliminated: GameFrameManager.registerDisplayMode methods internal: cg.graphics.PercentageRenderer no longer has a background color eliminated: ResizableWidgetlessRenderer, ShrinkingRectangleRenderer comment reformatting: AdvancedInputStream, AdvancedOutputStream, ErrorLog, Pair, SoundFlagger eliminated: several unused methods from FileUtil eliminated: greedy mode from MainLoop eliminated: support for midi music (I couldn't adjust the volume anyways) eliminated: NoiseErrorList.musicClassCouldntSetVolume and midi-related messages eliminated: CGScriptErrorList.braceTagTerminatedByBracket internal: CGScriptErrorList is an interface instead of a class eliminated: RBIGameDataErrorList.generateCurrentScenarioErrorRenamingScenarioMessage, mapLayerDefinitionUndefinedLayerType eliminated: GameObject.setAnmationFrame internal: GobCollection.getTileHeight/Width -> getBaseImageTileHeight/Width eliminated: PlayerObjectSingle.getScriptedSpriteType eliminated: EditorGuiErrorList.scriptedSpriteMenuDialogAccessSpriteAlreadyExists eliminated: GuiAccess.createGuiMainLoop eliminated: unused GuiErrorList, RBIErrorList, RBIGuiErrorList, UtilErrorList, and VauErrorList error messages eliminated: Direction.getStep eliminated: unused GameDataConstants and LookAndFeelConstants eliminated: MutableBag.getAny eliminated: cg.widget.background package eliminated: MouseButton.NO_BUTTON internal: used WMouseEvent constants instead of MouseEvent constants internal: cg.gui.render -> cg.graphics.render internal: WidgetlessRenderer -> GraphicRenderer, etc. internal: cg.rbi.cgscript -> cg.cowgodscript internal: moved startingScriptStateNameConstants from GameDataConstants to CGSConstants internal: cg.rpg -> cg.rpgsystem internal: moved CombatantAnimationMode to cg.rbi.gobdata internal: cg.rbi -> cg.rpgengine, etc. eliminated: "Belisarius" from credits #Build 45 (2010/10/08) deleted unused art: mainscreen folder, youwinbackground image deleted unused maps/scenarios internal: WTopLayerContainer is now separated from JWidgetPanel bug fix: BuyFrame exit button no longer crashes the program bug fix: draws black border over all views reduced after click images for buttons to 1 frame internal: eliminated BoundedButtonFactory game: increased maximum party size to 4 eliminated "endApplication" text when the application ends game: added button strip, menu button internal: rearranged AbstractSoloText and WText to allow specialized text widgets game: add some party information to the box new art: main screen icons internal: split WMessageDialog into WMessageDialog and WOkAndCancelDialog map editor: prompts to save unsaved scenario/map on exit map editor: prompts to give a title to untitled map when saving it internal: WComposite's background is a WidgetlessRenderer, rather than a mere Color internal: moved FontColor.checkColorAgainst to ColorSetting internal: moved WidgetlessRenderer's getDesignHeight/Width methods to WidgetlessSubrenderer internal: SlideshowPanel uses WidgetlessSubrenderer, rearranged SlideshowPanel and SlideshowWPView internal: removed Justification and resizing garbage from WDataless game: menu screen has a textured background and displays a text title, rather than a graphic logo #Build 44 (2010/09/18) internal: add fill methods to SimpleBitSet and SimpleBitSet2D animation: animation frame is now correct for all object types internal: ScriptedObjects only have 1 "opening" state optimize: WPGameView flags GameObjects for update separately from update phase animation: increased time an animation frame takes internal: BooleanFlags class use BooleanFlags class in EditorVariables for common map editor flags map editor: track whether current scenario and current map are saved, placing an * next to them if they're not bug fix: New Scenarios can be created eliminated 640x480 resolution eliminated title bar (to avoid skipping the unsaved prompt) added black border around windowed mode to separate the window from the rest of the screen internal: dumped old versions of options file, added isDecorated flag for display modes internal: FullSceenPanel -> FullViewPanel, updated class comments #Build 43 (2010/08/27) RBI now skips the intro screen at start up temp art: new animated door art internal: deleted ScriptedObject, renamed ScriptedObstacle to ScriptedObject internal: rearranged methods in class GameObject new door art is loaded properly map editor: message dialogs are another 100 pixels high internal: animation frame is only updated during update phase (and may be more accurate) doors get opened opening door animation internal: split cg.rbi.gob into cg.rbi.gob, cg.rbi.gobcollection, and cg.rbi.gobdata packages #Build 42 (2010/08/20) bug fix: (map editor) when hitting enter on the last character of a text field, the cursor moves down bug fix: (game) game doesn't crash whenever you click on the tile map internal: game update loop updates any updateable layer, not just the obstacle layer bug fix: player can walk around internal: GameObject.update methods don't take position as a parameter because GameObject knows its position internal: AreaMapUtil.findPath doesn't take position as a parameter either internal: moved interaction goal from CurrentParty to CharacterObject internal: created InteractionTypes bug fix: when the player collides with something, he no longer walks backwards one step and then goes back bug fix: overlapping is handled almost correctly added GroundDecal layer bug fix: characters and obstacles overlap properly internal: first ground and ground decal layers are drawn then obstacle, small object, and character layers internal: map is drawn by y-coordinate, then layer, then x-coordinate, though some layers are drawn separately from eachother internal: modified addThis.txt to reflect new goals updated art: doors and tables are closer to the "right" perspective internal: eliminated unused GobCollection.getVariation methods internal: ScriptedObjectArray.getScriptedSpriteType -> getScriptedObjectType internal: added ScriptedObstacle.getScriptedObjectType internal: added ScriptedObject class internal: split CharacterObjectSingle into NPCObjectSingle and PlayerObjectSingle internal: renamed RBI Script to CG Script internal: rewrote CGScriptLexer to exclude any kind of parsing script parsing actually works (for open only) finds the tags in the parser and convert them into ScriptCommands bug fix: it's now impossible for a gob in a lower layer to block the top half of an object covering it from ever being selected internal: when getting a selected object from a mouse click, it iterates over the positions and then over the map layers #Build 41 (2010/07/27) internal: RBIGobSpriteErrorList -> RBIGobErrorList, updated names of error constants internal: when loading a map, the trie maps indexes to a GobDescriptor class, rather than gobs (created GobDescriptor, now must use it) internal: eliminated GameObject.clone bug fix: After loading the map, wall tops at left and right are no longer messed up. (position knowledge was not being set properly by when loading maps) map editor: Main menu contains new/open/save scenario map editor: Scenario menu edits scenario properties and avatars map editor: Scripted Obstacles are a submenu of the Scenario menu Note: Triggers are still stored in the map, not in the scenario. map editor: moved Display menu next to Main Menu internal: MapFileUtil.readBasicGobDefinitionsUsed -> readBasicGobDefinitions internal: ScriptedSpriteArray gets the renderers from ScriptedSpriteArtVault rather than taking a parameter internal: ScriptedSpriteArray -> ScriptedObjectArray, ScriptedSpriteType -> ScriptedObjectType internal: stored scripted obstacle definitions (name, type, and script) in scenario file internal: map file stores scripted obstacle name and number of variations and cross references with scenario internal: eliminated AreaMap.clearGameObject bug fix: Map Editor can place GameObjects that are more than 1 tile wide internal: GobUtil.addNewScriptedSpriteToObjectLayer -> addNewScriptedGobToObstacleLayer internal: GobsForLayer.loadImages -> loadBasicImages internal: GobsForLayer.loadBasicImages doesn't clear the scripted values because some of them are set by the scenario map editor: a black square is displayed for missing scripted gob renderers internal: labeled GobCollection as AbstractFactory and subclasses as ConcreteFactory internal: replace GobCollection.getVariation by making GobCollection.getImageForTileSelector abstract internal: don't store GameObjects for different GobCollections; instead, have a default image that can be returned eliminated the teaser screen (which is unused anyways) bug fix: (map editor) variation buttons work, but only variation 0 was displayed between them internal: eliminated useless TriggerSingle.loadImages method internal: GobUtil has only one method for added scripted object collections to any layer internal: read/write scripted gob definitions for EACH layer that has scripted gobs (not trigger layer) internal: scenario file stores script definitions (other than triggers), but map file lists definition names/numbers for the purpose of determining their indexes within the map internal: PlayerDefinitionData -> AvatarDefinitionData, PlayerDefinitionDialog -> AvatarDefinitionDialog internal: update fileformats.txt #Build 40 (2010/07/14) There is no longer any attempt made at including a shortcut in the special Windows 7 games folder. internal: moved most Sprite fields into GameObject internal: used Tile for UnscriptedSprite and TileArray for UnscriptedSpriteArray internal: eliminated SpriteGobsForLayer renamed map layers, eliminated decal layers, added small object and character layers (characters will be able to stand on the same tile as open doors) internal: deleted MapLayerType internal: basically all GameObjects extend GameObject internal: There is no longer a special Sprite class. internal: combined packages cg.rbi.gob and cg.rbi.gob.sprite internal: CharacterSprite -> CharacterObject, ScriptedSprite -> ScriptedObstacle internal: CharacterSpriteRenderer -> CharacterObjectRenderer, CharacterSpriteSingle -> CharacterObjectSingle internal: all GameObjects store their x, y coordinates internal: added cg.rbi.combatant package internal: separated combat and noncombat character animation enums internal: added VariableLayerObject, which is extended by EmptyObject and SimpleObject internal: EmptyObject is always passable internal: SimpleObjectArray uses BufferedImages instead of OneImageGobRenderers internal: eliminated subclasses of GobsForLayer class internal: combined GobArray and SimpleObjectArray into VariableLayerObjectArray internal: used AreaMap.placeNewGameObject method in MapTemplate internal: stored the Gob's MapLayerDefinition in its GobCollection internal: VariableLayerObject -> BasicObject, VariableLayerObjectArray -> OneImageObjectArray internal: eliminated MapLayerDefinition parameter from PlaceGameObject and placeNewGameObject gui: increased scroll bar size internal: eliminated unused OneImageGobRenderer class internal: GameObjectRenderer -> ScriptedObjectRenderer, ScriptedSpriteArtVault -> ScriptedGobArtVault #Build 39 (2010/07/04) internal: clarified Array's class comments internal: stopped using MapLayerDefinitions as parameters for CharacterSprite methods (These classes assume that Sprites are always in the OBJECT1 layer) internal: added NonflyweightSprite class internal: eliminated unused GameObject.getImageToDraw method internal: combined Sprite and NonflyweightSprite internal: eliminated MapLayerDefinition.getDefaultObject internal: combined OneImageSpriteRenderer and TileRenderer into OneImageGobRenderer internal: moved PCSprite's data into CurrentParty and eliminated PCSprite internal: GobCollection.copyVariation -> createGameObject, it now ALWAYS creates a new object (no flyweights) bug: After loading the map, wall tops are messed up. They are only fixed by placing them in the map again, but are broke after saving and reloading the map (position knowledge is not being set by AreaMap.readRLELayer, so all wall tops are thought to be at 0, 0) shortcut: added to games folder (though it doesn't appear in both games folders) #Build 38 (2010/06/12) refactor: PCSpriteArray -> CharacterSpriteSingle refactor: moved the PCSprite from AreaMap to CurrentParty there are no character-specific skills scenario: player definition is now only image name and gender maximum party size is 3 use number of player definitions rather than party size (where appropriate) scenario: character set is selectable refactor: reorganized static initializers in StringUtil refactor: renamed some error strings in UtilErrorList refactor: simplified StringUtil.padNumber map editor: allows . in map/scenario names bug fix: player definition dialog's ok button works refactor: CGColor -> ColorSetting refactor: SelectFromListDialog -> WSelectFromListDialog, moved to cg.widget.composite refactor: moved scroll bar constants and TextButtonFactory to WidgetSettings class map editor: map templates (1st floor interior, city exterior, empty, upper floor interior) bug fix: the map editor can display the bottom row and right column of the map readme.txt: removed all references to Mac OS X and Linux map editor: by default, loads the rbi scenario (again) refactor: unstaticed AreaMap.tilesetName and saved the current tileset in CurrentArea gui: created ColorSetting.BORDER, which is presently only used by WindowLabelBoxRenderer map editor: dialogs have a black border #Build 37 (2010/06/09) gui: WTextArea and WTextField have smaller cursors (at the top) bug fix: cursor fixes at end of text for WTextArea bug fix: pressing down at end of WTextArea won't move the cursor left on the last line map editor: renamed Tileset menu to Layer bug fix: maps can be loaded and saved bug fix: new maps can be created in the map editor map editor: Modal dialogs disable the menu bar map editor: double clicking on WLists to trigger an action new art: cash register on counter, counters, wall tops/bottom the program automatically arranges wall artwork internal: SpriteRenderer, OneFrameSpriteRenderer internal: WallTopSprite, WallTopSpriteSingles, and SpriteGobsLayer.loadWallImages refactor: combined sprite editing dialog methods for triggers and scripted sprites into 1 updated temp art: doors are 96 pixels high instead of 64 refactor: moved TilesetLoader to cg.rbi.art refactor: put image loading images in ImageLoader class refactor: cg.rbi.constants -> cg.rbi.staticdata refactor: moved Direction, MapLayerDefinition, MapLayerType, OrthoVault to cg.rbi.staticdata refactor: separate character art from tilesets, creating "character sets" scenario: stores character set name (unchangeable at this time) temporary: map editor creates a new scenario at start up, rather than loading "rbi" bug fix: triggers are loaded correctly map editor: new maps, etc. all start without a default name map editor: saving an untitled map should prompt the user to select a name refactor: moved start game method from WPGameView to RBICommand refactor: created AreaMapUtil class for pathfinding, etc. methods of AreaMap refactor: PositionTest classes no longer require AreaMap parameter for tests, but require that CurrentArea be set #Build 36 (2010/05/15) temp art: used new temporary artwork for alot of objects temp art: bench, kitchen fixtures, potted plant temp art: (containers) desk, kitchen sink, refrigerator temp art: (wall decals) chalk board, mirror, painting, phone, poster temp art: eliminated some old objects allowed 2-tile-high sprites bug fix: delete map dialog shows maps, not scenarios eliminated roof layer and 2nd floor decal layer -> ground decal layer added wall decal layer that's displayed on top of sprite layer dumped old maps tilesets: renamed default tileset to interior refactor: GobsForLayer uses a SortedGobCollectionArray for basic values tileset data isn't hardcoded; instead load whatever files are there and end the name at the last _ utility: StringUtil can capitalize the first letter of each word in a String refactor: combined GobCollection.loadImages with constructor editor: empty object is default for all layers refactor: InterfaceArtConstants -> LookAndFeelConstants, moved some constants from RBIConstants gui: TileDisplayArea is filled with black refactor: streamlined AreaMap's file reading/writing code editor: renamed layer directories gobs: multi-tile objects can exist in layers other than the Object layer refactor: only CharacterSpriteRenderers track horizontal/vertical offset refactor: converted SpriteRender to GameObjectRenderer, reduced duplicated code refactor: deleted class Trigger refactor: moved getVariationIndex method into GameObject refactor: made many methods final refactor: ScriptedGobCollection is extended by both ScriptedSpriteArray and TriggerSingle #Build 35 (2010/05/06) internal: AreaMap contains an untested method getting the sprite selected by a mouse click map editor: right click on a tile to display the object names and variation numbers for each layer internal: ByteStrings can append ints map editor: deleted "1st Story" text from the names of floor 1 layers mouse selection: take the height of objects in the tile below into account bug fix: ByteString.append doesn't output an error when capacity is exactly sufficient bug fix: renaming a trigger preserves the old script internal: added generic message dialog for the map editor internal: GameObject is an abstract class, not an interface renaming a sprite/trigger: replace the GobCollections of the old Gobs with a replacement GobCollection optimize: ScriptedSpriteArtVault.loadScriptedSpriteRenderers clears the old characters, but doesn't load the new internal: changed GobsForLayer.empty to emptyCollection and added emptyObject method internal: moved getTileWidth and getTileHeight methods from Sprite to GameObject refactor: GobCollection should have separate getVariation and createGob methods (so ScriptedSpriteArray can be more normal of a class) internal: added UnscriptedSprite class and made Sprite abstract internal: eliminated placeholder GobCollection for GobsForLayer internal: GameObjects without images have tile width/height of 1 internal: eliminated EmptySprite, CharacterSprite no longer extends ScriptedSprite refactor: PlayerSprite -> PCSprite, PlayerSpriteArray -> PCSpriteArray internal: GameObjects should get their renderers from their GobCollections, not store them separately internal: SimpleStack.size method #Build 34 (2010/04/20) refactor: the current AreaMap is now stored in CurrentArea, rather than TileDisplayArea deleting a sprite/trigger: it should be removed from the map bug fix: error message is displayed when copying a sprite/trigger but not changing the name updated art: splash screen says "software" instead of "entertainment" refactor: AreaMap uses MapLayerDefinition.ordinal to get GameObjectLayers from the array, rather a HashMap refactor: stored GobsForLayers in an array in GobVault; index by MapLayerType.ordinal refactor: MapLayerDefinition doesn't store GobsForLayer refactor: moved widget size constants from EditMapPanel, GamePanel, and RBIConstants to WidgetSizeConstants widget: TextlessLineLabelBoxRenderer game: displays boxes where status area will be #Build 33 (2010/02/16) refactor: Arrays grow to at least the default array size in getNewArrayCapacity refactor: Arrays store getNewArrayCapacity() and the default array size in UtilCommon refactor: converted Array classes to Array, MutableBag, MutableArray, MutableSortedArray refactor: MutableBag.insert -> insertElementAt cg.util.primitive: all Array types extend PrimitiveArray with the size variable/method refactor: ColorIndex -> CGColor, CGLookAndFeel -> FontVault refactor: vau lexer uses different CharTypes for "special" CharTypes refactor: cg.io.StringIo -> cg.util.StringUtil refactor: combined CanonicalUtil and NumberToTextPadder into StringUtil refactor: ByteString & Trie are better for using ByteStrings exclusively refactor: vau parser uses ByteStrings everywhere, not Strings or StringBuilders parsing: stored line numbers in parse tokens for outputting parse errors lexing simple scripts parsing: ParseLog, ParseTokenType parsing: move common lexing methods into LexUtil parsing: update RBIScriptLexer, etc. to match changes to VauLexer, etc. refactor: moved GobUtil from cg.rbi.gob to cg.rbi.gamedata refactor: moved addNewScriptedSpriteToObjectLayer and addNewTriggerToTriggerLayer to GobUtil internal: CurrentArea class created but not used #Build 32 (2010/01/28) gui: WTextArea (editable, character-level wrap) gui: added a black line around window label boxes gui: when WButtonRowDialog doesn't have an enter action, it passes enter through to child widgets refactor: ErrorLog output -> outputWithStackTrace, outputWithoutStackTrace -> output refactor: EditableSoloText uses a ByteString rather than AbstractSoloText's String refactor: deleted NullWidgetAction internal: ByteString allows insertions refactor: included EditMapPanel.showScreenResolutionError in WEditMapView.showScreenResolutionError refactor: moved common dialog methods to EditorGuiAccess refactor: SpriteArray -> UnscriptedSpriteArray trigger/door scripting can be input edit trigger/door scripts (separate from creating them) when loading a map, the program tries to use other variations of the same gob for nonexistant gobs scripted sprites get saved properly #Build 31 (2009/12/25) refactor: moved MapScrollingLogic to cg.rbi.gui.game refactor: moved RBIVauFilenames into RBIConstants refactor: TileDisplayArea is stored in ApplicationData game: when entering a map, the game starts centered on the player game: increased the maximum distance of pathfinding deleted error messages in SaveFileManager bug fix: map editor's buy frame sets its resolution properly map editor: buy frame says "Map Editor" rather than "Play Demo" internal: exiting the buy frame uses ApplicationCommand.endApplication updated readme file that says where saved games get stored refactor: moved IntPair to cg.util.primitive optimize: removed extraneous if in MutableBag.ensureCapacity (since an array can't have length < 0) internal: IntArray, IntPairArray refactor: moved GobCollection.useEmptyRenderer down to GobArray doors: image variations are selectable via tile selection arrows refactor: ScriptedSpriteSingle was replaced by ScriptedSpriteArray internal: eliminated error message when changing a trigger name scripted sprites: deleting, editing, renaming, etc. #Build 30 (2009/12/16) !internal release! fleshed out the outline of the starting map refactor: moved UniversalTextCursorAnimation to cg.widget.text refactor: lookandfeel.vau defines each font separately rather than as a mess refactor: WTextArea -> WTextScrollBox refactor: WTextField extends EditableSoloText extends AbstractSoloText figured out where to store saved games in Windows 7 temp art: doors refactor: CharacterSpriteSingle -> ScriptedSpriteSingle refactor: CharacterArtVault -> ScriptedSpriteArtVault doors (unusable, default door image only) #Build 29 (2009/12/10) internal: deleted unused icon art refactor: combined WDialogWithButtonRow and WMultibuttonDialog into WButtonRowDialog gui: store TextButtonFactory in CGLookAndFeel, not GuiAccess refactor: drastically simplified WButtonRowDialog code gui: confirmation dialogs (WMessageDialogs with cancel buttons) refactor: EditMapPanel's error dialogs can handle arguments map editor: rearranged Main/Map menus, added separators refactor: added a centered version of WPanel.showDialog refactor: moved ChangeMapNameAction and ChangeScenarioNameAction outside of EditMapPanel refactor: moved all the dialog methods to separate classes outside of EditMapPanel bug fix: text fields in dialogs start focused AND display the cursor bug fix: error during copy portion of scenario renaming prevents deleting old scenario map editor: Main | Delete Scenario, Map | Delete Map, Triggers | Copy, Delete, Rename map editor: doesn't allow renaming the main scenario game: renamed J Edgar Hoover Fortress to J Edgar Hoover Building refactor: renamed error messages in EditorGuiErrorList for DialogAccess classes refactor: MapLayerDefinition.getObjectCollections -> getSelectableGobCollections refactor: RBIGameDataErrorList "levelMap" errors are now "areaMap" errors optimization: GobsForLayer.findScriptedGobIndex takes advantage of the sorting bug fix: scripted objects can't be named "Empty" #Build 28 (2009/12/03) refactor: combined most dialogs in EditMapPanel, just changing the names/actions refactor: moved dialogs to cg.widget.dialog map editor: dialog titles have some space at the edges map editor: made scroll bars bigger map editor: adjusted positions of the text field in all the dialogs refactor: ColorIndex WINDOW_INSET constants are now TITLE_BAR constants gui: added ColorIndex.TITLE_BAR_TEXT map editor: uses white for label box text refactor: InstructionsContainer and TitleContainer are now named Panel refactor: PremadeContainerFactory -> ContainerFactory refactor: createDescriptionPanel -> createDescriptionContainer refactor: moved box creation methods from ButtonAndBoxFactory to ContainerFactory refactor: combined non-box BoxAndButtonFactory methods with ButtonFactory refactor: WContainers can have their design sizes change refactor: FontAndColorByIndex stores the Color as a ColorIndex refactor: eliminate label box renderer from dialog constructors map editor: darkened the title bar color refactor: OpenFileDialog -> SelectFromListDialog #Build 27 (2009/11/25) rearranged floor tile filename to match real variations map editor: adjusted appearance of Edit Player Definition dialog internal: cleaned up addThis.txt map editor: can fill single tile sprites bug fix: there are no vertical gaps between 1-tile-high sprites Underground map where game actually starts refactor: WSimpleButton.setButtonAction -> setWidgetAction refactor: eliminated rarely used FullScreenContainer class refactor: StandardTextListRenderer extends TextWidgetRenderer refactor: moved LabelBoxRenderer classes to cg.widget.composite gui: created WLabeledContaienr refactor: updated dialog classes refactor: made WErrorDialog.HideDialogAction a non-inner public class refactor: combined WDialog and WContainer #Build 26 (2009/11/19) !internal release! temp art: color coded Ralph's walk animation internal: EmptySprites have a tile width/height of 1 game: reduced the number of pixels from the border that causes the screen to scroll game: A* pathfinding game: update phase is timed game: animated character movement #Build 25 (2009/11/12) refactor: all tile loading is done by TilesetLoader eliminated radio button art (used regular radio button renderers instead) refactor: ButtonFactory doesn't store separate standard and radio buttons deleted the test1 map refactor: CharacterSpriteRenderer combines all walk directions into a 2d array internal: CharacterSprite, EmptySprite refactor: PositionTest.passesTest takes MapLayerDefinition as an argument refactor: cg.rbi.editor -> cg.rbi.gui.editor refactor: getLevelMap() -> getAreaMap() refactor: included GameLogic in WPGameView mouse input the player walks (flawed pathfinding) refactor: moved Sprite classes to cg.rbi.gob.sprite because Sprite imports cg.rbi.gamedata refactor: merged cg.rbi.gui.logic with cg.rbi.gui internal: eliminated unused jump key from KeyboardSettings refactor: moved game-only gui classes to cg.rbi.gui.game #Build 24 (2009/11/06) !internal release! refactor: eliminated ScenarioPropertiesDialog.useDefaultFieldValues refactor: moved CheckButtonAction and RadioButtonAction to cg.widget.button map editor: eliminated useless Save Scenario menu option gui: GridWLayout can contain gaps between objects map editor: there are now gaps between the text fields in most dialogs map editor: player definition dialog map editor: increased the size of the dialog fonts refactor: OrthoVault now uses constants rather than variables refactor: RBITileErrorList -> RBIGobErrorList refactor: deleted unused GameMakerTransparencyConverter, ImageSplitterUtil classes refactor: WPGameView.startLevel -> startMap refactor: MapSearcher.findMultiplePositions -> findMultipleNearbyPositions refactor: GameObjectMatchPositionTest -> IdenticalForFillPositionTest refactor: LevelMap -> AreaMap refactor: moved GobsForLayer, GobVault, and MapLayerDefinition to cg.rbi.gamedata refactor: cg.rbi.gob no longer imports cg.rbi.gamedata bug fix: Map Editor's fill mode works (hopefully) player is displayed character sprites can be loaded added some basic map elements to the upper left corner of J Edgar Hoover Fortress #Build 23 (2009/10/04) refactor: GameTileMatchPositionTest -> GameObjectMatchPositionTest refactor: cg.rbi.tile -> cg.rbi.gob refactor: eliminated EmptySpriteRenderer, EmptyTileRenderer, and TileVaultUtil refactor: merged TileRenderer and StandardTileRenderer refactor: GobArray -> GobCollection, GobArray, GobSingle refactor: GobsForLayer have aBasicValue (for non-scripted) and aScriptedValue (for scripted) refactor: inlined LevelMap.placeNonsprite refactor: merged all ByteString classes into one refactor: map files don't include "Empty" tile in the definitions for each layer map editor: Triggers | Add map triggers (scriptless only) optimize: precomputed references to GobsForLayers in MapLayerDefinition refactor: TextFieldGrid -> WTextFieldGrid refactor: StandardDialog -> WStandardDialog, etc. gui: WStandardDialog can store an "enter" action for all the fields in the grid refactor: ResizableWidget -> SizedWidget, eliminated widget-resizing functionality refactor: moved background color functionality from WContainer to WComposite refactor: WTextFieldGrid extends WComposite rather than WContainer refactor: WComposite passes key events step-by-step through the WComposite hierarchy #Build 22 (2009/09/28) !internal release! internal: updated FlowWLayout's comments and indentation refactor: moved all dialogs out of EditMapPanel refactor: MapNameDialog is "NameDialog" and be used both for maps and scenarios map editor: New Scenario selects the name only and opens the edit dialog) map editor: Main: Scenario Properties refactor: there is now only one resizing dialog Main: Copy Scenario, Rename Scenario optimize: CanonicalUtil.produceCanonicalLowerCaseName uses an array to map characters game: playing the game loads the J Edgar Hoover Fortress map refactor: moved UserData and UserDataVault to cg.rbi.game refactor: moved game-only part of RBICommand to cg.rbi.game refactor: old RBICommand->ApplicationCommand refactor: RBIMusic.init is now included in the static initializer refactor: CGLookAndFeel.loadValuesFromDatFile -> CGLookAndFeel.loadValuesFromVauFile optimize: map editor doesn't check level music or sounds optimize: only creates EditMapPanel for map editor and the game's panels for the game refactor: merged GameDataConstants & RBIArtConstants -> cg.rbi.constants.GameDataConstants refactor: GobVault.init is now included in the static initializer refactor: moved tilesets to tilesets\default refactor: combined GobVault.loadLevelImages and GobVault.loadUniversalImages bug fix: corrected Linux save directory (still untested) refactor: FileUtil uses cg.util Arrays rather than java.io ArrayLists map editor: empty map/scenario names are forbidden updated art: replaced all potential Sandra Davis art with junk (to avoid copyright problem) #Build 21 (2009/09/18) vau files: writing them from VauObjects, reading/writing is done from VauFile class bug fix: null Widgets in GridWLayout don't cause an exception fileformats.txt now contains all the file formats used by the game thus far splash screen: reduced the amount of progress for each increment refactor: moved WPSplashScreenView to cg.widget.composite map editor: scenario name is displayed gui: TextFieldGrid map editor: Main: New Scenario, Open Scenario, Save Scenario map editor: New Map dialog selects the name only and then open up the resize dialog #Build 20 (2009/09/16) refactor: GameObjectArray -> GobArray, TileVault -> TilesForLayer refactor: Stored all tiles and sprites in GobVault bug fix: transparency is included for the whole decal layer, not just after the empty tile map editor: renamed "object" layers to "sprite" layers refactor: deleted GobsForLayer.getTileNames refactor: combined GameObjectLayer and LayerArrayUtil (from LevelMap) optimization: converted MapLayerDefinition's layer flags to a simple type variable bug fix: creating a new map uses canonical map name internal: RPGGraphics2D.drawScreen checks for a null LevelMap internal: map file format is moved from addThis.txt to mapfileformat.txt corrected buy game url (which still goes to a 404 page) refactor: cleaned up duplicated code in EditMapPanel Map Editor: displays name of current map text lists: text never starts 1 pixel to the left of the selection color Map Editor: Map: Open, Rename, Save, Save Copy #Build 19 (2009/09/07) bug fix: map editor scroll bar no longer covers up bottom row of tiles map editor: spaced out left panel map editor: new map dialog, updated resize map dialog internal: ScrollableWidget.NO_SLIDER is used map editor: tile selection list slider is set to the top when the layer is changed map editor: tracks what maps exist in the current scenario gui: sliders now round off invalid slider percentages bug fix: resizing map to 1000, 1000 doesn't show an area far beyond the map bug fix: reducing the size of the map never causes NullException (when the old screen position was greater than the new map size, this would occur) internal: AdvancedInputStream/AdvancedOutputStream can read/write arrays of Strings refactor: ObjectVault -> SpriteVault #Build 18 (2009/08/28) updated art: dirt, floor 1, grass new art: metal floor tiles roof: box garden, bridge, sky light roof tiles allow transparency objects: air conditioner, bathroom fixture, lawn chair, satellite dish, sofa objects: underground wall refactor: moved EditMapPanel and WPEditMapView to cg.rbi.editor maximum map size is 500 bug fix: map resizing actually works refactor: deleted ArrayUtil.copy2DArray map editor: added screen coordinates label refactor: a slider's orientation is stored in WSlider, not ColoredScrollBarRenderer refactor: WScrollPane uses an AbsoluteWLayout rather than laying out its own widgets refactor: WLayouts are now part of WComposite, not WContainer bug fix: slider labels don't get cut off on options screen map editor: uses scroll bars rather than scrolling at the edge of the screen bug fix: screen not scrolling properly over menu is now a non-issue #Build 17 (2009/08/18) !internal release! setup: added AppId map editor: centered tile variation arrows vertically "ground" tiles directory is now "floor" tiles directory refactor: the tile vaults create their arrays with an init method refactor: LevelMap only uses 1 class for layers, just placing the right types in each layer added 2nd "floor" on top of roof refactor: one ErrorDialog is used for all ErrorDialogs in the gui refactor: ErrorDialog.HideButtonAction -> HideWidgetAction map editor: resize map, moved "New" to "Map" menu, renamed "File" to "Main" gui: standard text fields now use a cursor of standard 3-pixel width refactor: UniversalTextFieldCursorAnimation -> UniversalTextCursorAnimation refactor: Widget.drawTo -> Widget.renderWidget gui: the cursor only appears in one text field at a time separated roof and floor layers roof: Solar Panels refactor: simplified EditMapPanel's code "horizontal" walls are 48x96 #Build 16 (2009/08/13) !internal release! animation loading errors don't output the stack trace All tiles are loaded from separate files like lettered animations floor layer: split dirt and grass tiles into 3 types each decal layer: combined different decals in 3 types, added weed sprite layer: combined cars, chairs, and tables into 3 objects with variations updated artwork.txt refactor: ObjectVault creates its array with an init method #Build 15 (2009/08/12) internal: restored ResourceLoader.getAnimationFromLetteredFiles refactor: TiledErrorList -> RBITileErrorList refactor: split TileArray into GameObjectArray and TileArray map editor: different kinds of dirt (etc.) tiles are now identical for fill mode map editor: fill mode is only done on a full click refactor: TileVault -> FloorTileVault, SpriteVault -> ObjectVault refactor: Sprites use getImageToDraw method like Tiles do gui: WDataless supports Justification refactor: AbsoluteWLayout.determineCoordinate -> determineAbsoluteCoordinate refactor: OrthoVault values are set by an RBIArtConstants method internal: added SpriteArray class refactor: EditMapPanel uses cleaner code for creating layers bug fix: sprite layer display errors because of tile variation selector #Build 14 (2009/08/10) !internal release! refactor: moved cg.error classes into cg.io refactor: deleted CurrentLevelPlayerData (leftover from Kiki's Candyland) refactor: combined BasicGameOptions into RBIOptions refactor: cleaned out LPC errors from RBIErrorList refactor: moved RBIOptions, UserData, UserDataVault to cg.rbi Map Editor: has separate screen resolution from main game refactor: whether the application is the game or the map editor is stored in a singleton updated art: grass image View: Layer 0, Layer 1, ... refactor: DecalTile -> Tile, etc. map editor: stopped placing random tiles any number of tiles are allowed in a tile file map editor: add variation selector at bottom of tile selector refactor: StandardTiles are Flyweights within the StandardTileArray gui: ListSelectionListener #Build 13 (2009/08/03) refactor: made common superclass for GameContainer and EditMapPanel refactor: AbstractGamePanel.mainViewContainer -> tileDisplayArea, etc. refactor: removed TileDisplayArea parameter from MapScrollingLogic.updateLogic refactor: GuiAccess.CarnivalWindowFocusListener -> GameFrameFocusListener updated art: reduced car size to 2 tiles wide refactor: MapLayer -> MapLayerDefinition refactor: made it easier to add/remove layers of the map refactor: MapLayerDefinition differentiates different types of layers with flags decal layer (48x48 pixels) bug: decal layer isn't displayed refactor: ErrorLog has an output method without stack trace Missing image files don't produce ugly error messages decals: Empty, Footprints, Junk, Rubble #Build 12 (2009/07/24) !internal release! refactor: GameObject -> Sprite, etc. refactor: TextureTile -> TextureTileRenderer refactor: included NullSpriteRenderer as an anonymous class for ObjectVault.EMPTY refactor: GameTile -> GameObject, AbstractGameTile -> AbstractTile refactor: moved determineImageFilename from AbstractGameVault to OrthoVault refactor: eliminated tile texture size variables from OrthoVault Textures: First tile repeats over and over. Other tiles are placed randomly 2-3 tile-wide objects Deleted Objects: Gateway New Objects: Bed, Bookcase, Car 1/2, Mirror, Player Car, Table 1/2 #Build 11 (2009/07/23) refactor: MapEditorTilePlacementMode uses getName instead of toString refactor: SimpleStack constructor takes Arrays, not ImmutableArrays optimize: SimpleStack peek and pop methods are marginally faster refactor: renamed MutableBag's ranged remove method to removeRange library: added SimpleQueue internal: map searching through BFS Map Editor Mode: Delete/Insert Column/Row, Fill refactor: LevelMap doesn't precompute screen borders (prevents map resizing confusion) refactor: LevelMap uses an ObjectLayer or TileLayer instance for each layer updated art: dirt texture refactor: RPGGraphics2D stores minimum texture tile indices in ScreenData #Build 10 (2009/07/18) !internal release! refactor: eliminated unused WTwoLineText.getText method updated art: dirt texture (unfinished) refactor: created cg.rbi.editor package refactor: moved MapLayer to cg.rbi.gamedata refactor: separated GameTile into an interface and an AbstractGameTile class refactor: combined StaticObjectTile with StaticGameObjectRenderer internal: map searching (BFS) updated art: up/down chairs, trash can, dirt texture textures can now have up to one extra tile height for copyright information refactor: GameTile uses a getName method rather toString for the tile selector refactor: empty GameObjects use a NullGameObjectRenderer Map Editor: Display which layer and mode are selected above tile selector Map Editor: Mode: 1 Tile, 3x3 Tiles new textures: gravel road, sidewalk new objects: mail boxes, toilets, trash cans, vending machines #Build 9 (2009/07/12) optimize: RPGGraphics2D precomputes tile positions refactor: simplified RPGGraphics2D drawing map method (have methods for drawing each layer) bug fix: name of the EMPTY tile appears in tile selector refactor: GroundTiles -> TextureTileVault bug fix: capitalized the names of standard objects new objects: Empty, Gateway, Respawn Statue refactor: eliminated small text button factory (and images) optimize: eliminated unused level completion images temp art: corrected title to "RBI" (not "Kiki's Candyland") #Build 8 (2009/07/11) !internal release! Map Editor: is a separate program Map Editor: Displays "Map Editor" on the task bar Map Editor: has menu bar (which isn't displayed until the program is fully loaded) Map Editor: has .exe file and a shortcut after installation refactor: GroundTiles is a vault storing TextureTiles, which extend GameTiles refactor: moved GameObject classes to cg.rbi.tile refactor: deleted old Tileset class Map Editor: added roof artwork to ground layer Map Editor: object and roof layers are selectable refactor: LevelMap.setSize uses ArrayUtil.copy2DArray method to avoid copied code #Build 7 (2009/07/09) refactor: cg.tiled -> cg.rbi.tile bug fix: ByteString.toString recognizes that MutableByteString has capacity > length refactor: Trie uses ImmutableByteString arrays, rather than ByteString arrays map editor: display tiles for current layer refactor: eliminated LevelMap.isTileAt refactor: moved WidgetPanels, cursors, and UniversalTextFieldAnimation to cg.widget refactor: moved ScrollableWidget to cg.widget.misc refactor: ClickMouseReactor tracks 1 click for each button, plus pressed buttons map editor: can place ground tiles refactor: MainViewContainer -> TileDisplayArea refactor: restored single image button renderers map editor: created layer selection row, but didn't add buttons design: planned map save file format #Build 6 (2009/07/07) clean up: WSimpleButton and WButton use WMouseEvent's constants rather than MouseEvent's refactor: moved widget io classes to cg.widget from various packages clean up: moved ColoredWidgetRenderer functionality into ColoredScrollBarRenderer clean up: eliminated unnecessary code in ColoredScrollBarRenderer and ColoredSliderRenderer refactor: combined cg.gui.layout and cg.gui.lookandfeel into cg.widget.lookandfeel refactor: moved cg.gui.widget.model and OpenUrlAction to cg.widget refactor: combined cg.gui.render.animation with cg.gui.render refactor: reorganized widgets, renderers, etc. by widget type refactor: moved common widget packages into cg.widget refactor: deleted single image only buttons, BeepErrorListener, BytePair, DoublePair refactor: moved cg.concurrent and cg.math into cg.util internal: converted tile texture dimension to width and height the game uses the full tile texture, not just the first tile by default, ground layer is filled with grass map editor: moved tile selector to left part of screen bug fix: map editor scrolls only at edge of screen, not at edge of tile selector bug fix: when WComposite MouseReactor methods are overridden, the WMouseEvent is not translated during calls to the super method refactor: WMouseEvent event translation takes the Widget as the parameter and figures out the offset itself #Build 5 (2009/07/06) map editor: placing tiles internal: created single-image ButtonRenderers (untested) ground images are now tiled textures using different ground/roof art is supported by using different art directories map editor: text list is displayed for tile selection (without activating tile selection) #Build 4 (2009/07/02) !internal release! internal: cg.isometric -> cg.tiled internal: deleted ArtConstants internal: RBIImageFilenames -> InterfaceArtConstants internal: stored tile size, etc. in RBIArtConstants internal: IsoVault -> OrthoVault orthogonal view improved map scrolling eliminated 16-bit color modes #Build 3 (2009/07/02) internal: ButtonState -> WButtonState internal: ClickMouseReactor internal: CandylandGuiErrorList -> RBIGuiErrorList optimization: optimized TilePlotter methods slightly internal: moved TilePlotter methods to IsoVault scrolling reduced size of default map internal: eliminated unnecessary game data constants from Kiki's Candyland internal: deleted MouseMap class option: scrolling speed internal: renamed "save" file to "options" file internal: RBISaveFile -> RBIOptionsFile internal: PlayerData -> UserDataVault internal: user data is now stored in a numbered array bug fix: UserSelectionPanel actually works (UserPanelAction was broken) #Build 2 (2009/06/24) !internal release! eliminated all tile sizes except 80x80 internal: tilesets are loaded during initialization, not from the play button internal: optimized tile rendering so that fewer tile coordinates are recomputed internal: created art file for ground tiles internal: tiles are loaded from file again internal: cg.rbi.graphics.GraphicsConstants -> cg.rbi.constants.DisplayModeConstants internal: moved RBIImageFilenames to cg.rbi.constants internal: moved RPGGraphics2D to cg.rbi.gamedata internal: deleted WinLevelContainer min/max/default map positions are half a tile width/height in object tiles are loaded displayed gravestone object each layer has 1 directory of artwork #Build 1 (2009/06/18) !internal release! internal: UniversalTiles -> Tileset internal: eliminated everything about the top of the ground (from Kiki's Candyland) internal: added generics to RandomUtil.getElement(Object[]) isometric tiles (generated algorithmically) internal: PlatformerGraphics2D -> RPGGraphics2D internal: eliminated LevelCompletionList draws a sprite #Build 0 (2009/06/11) converted Kiki's Candyland build 10 to RBI build 0 eliminated KC's features internal: combined UtilConstants and MutableBag internal: removed Shuffler (methods were already copied to ArrayUtil)