scrawl
37a6d7da76
WindowManager refactoring
10 years ago
dteviot
e197f5318b
fixing MSVC 2013 warning C4244: & C4305
...
conversion from 'const float' to 'int', possible loss of data
conversion from 'double' to 'int', possible loss of data
conversion from 'float' to 'int', possible loss of data
10 years ago
dteviot
f2ac939e61
reverted mShouldRepeat back to unsigned char.
...
As recommended by Scrawl.
10 years ago
dteviot
45b6538820
fixed MSVC 2013 warning C4800
...
forcing value to bool 'true' or 'false'
10 years ago
Marc Zinnschlag
e9d6e4f6df
Merge remote-tracking branch 'ace/include-cleanup'
10 years ago
Alexander "Ace" Olofsson
d3128a12b6
Remove a large include form mwbase/windowmanager.hpp
10 years ago
MiroslavR
1d9e973573
Add training progress bar, implement jail screen, tweak wait dialog ( Fixes #1714 )
10 years ago
scrawl
955505c167
Remove unused function
10 years ago
scrawl
0c6e2170db
Include cleanup
10 years ago
scrawl
c093e284d9
Delegate cleanup
10 years ago
scrawl
d1b5956a98
Fix crash on exit
10 years ago
scrawl
9bcc84ceec
Add option to stretch menu backgrounds/cutscenes to the whole screen
10 years ago
scrawl
c883a73d30
Several warning fixes
10 years ago
scrawl
f9cf31fcd5
ESSImport: convert custom map markers, not working for interiors yet
10 years ago
scrawl
c3f3f8b3d0
Use only Cell records for saving progress bar ( Fixes #2259 )
10 years ago
scrawl
f9227beedd
Add warning when loading a savegame that depends on non-existing content files ( Fixes #2261 )
10 years ago
scrawl
579f5d232f
Move interactive messageBox to separate function
10 years ago
scrawl
5b9d10f851
Reduce includes in MWGui
10 years ago
scrawl
eecea4131f
Reduce MyGUI includes
10 years ago
scrawl
4b704f665f
Reduce includes, move DragAndDrop to separate file
10 years ago
scrawl
928b9ee41b
Fix missing GUI mode update when showing soulgem dialog
10 years ago
scrawl
f931ba2efc
Fix some static analysis issues (coverity)
10 years ago
scrawl
935cccf974
Implement weapon/spell cycling hotkeys ( Fixes #1024 )
10 years ago
scrawl
79237d16a7
Refactor spell window to use model/view and remove duplicated code in QuickKeysMenu
...
This should also improve window resizing performance, the widgets are now just resized instead of recreated.
10 years ago
scrawl
03da21f088
Remove redundant GUI element showing during loading screens
10 years ago
scrawl
e69cf11029
Hide tooltips during loading screens
10 years ago
scrawl
cf5fc60e86
Make ToggleMenus affect tooltips ( Fixes #1989 )
10 years ago
MiroslavR
6e1a11f322
Queue screen fade operations invoked by scripts
10 years ago
scrawl
e2bad395e5
Leak fix
10 years ago
scrawl
eb1c24ffe6
Refactor video player engine to get rid of MWSound dependencies
...
- Split video player to separate source files.
- Move video player engine sources to extern/ (repository will be set up on github soon).
- Audio is handled in a MovieAudioFactory, implemented by the user (here in MWSound subsystem).
- Handle conversion of unsupported channel layouts via ffmpeg's swresample.
10 years ago
MiroslavR
8456741eaa
Fix blindness and create a separate fader for it
10 years ago
MiroslavR
8dd95fd77e
Construct hit fader with correct texture right away to prevent mygui warning
10 years ago
MiroslavR
2162a9e1b9
Fall back to player_hit_01.dds if bm_player_hit_01.dds is not available
10 years ago
MiroslavR
0ae604990e
Implement continuous damage indication ( Fixes #1970 )
10 years ago
MiroslavR
d1dc9951d4
Do not display werewolf overlay in third person
10 years ago
MiroslavR
e1799cbcf4
Fix a typo in condition
10 years ago
MiroslavR
de2cb8926a
Feature #1697 : Queue fade operations, implement hit fader & werewolf overlay
10 years ago
scrawl
7d36a202a8
Implement cell loading threshold ( Fixes #1874 )
...
The cell loading threshold (default: 1024 units) prevents exterior cell loading until the player has travelled part-way into the next cell. This gets rid of excessive cell loadings when walking along an exterior cell border.
Lower the maximum allowed view distance in options menu to accomodate. Change setting name so that old settings files are upgraded.
10 years ago
scrawl
ff0b4e0583
Add debug window (F10), displays Bullet's profiler output
10 years ago
scrawl
7252cb63a6
Fix cppcheck issues
10 years ago
scrawl
0bc840aadd
Add NumericEditBox widget
10 years ago
scrawl
6b65502557
Add properties for new widget classes to MyGUI plugin
10 years ago
scrawl
1afcc7adb5
Add imported font colors from openmw.cfg to MyGUI plugin
10 years ago
scrawl
e42cb8020e
Change all skins to get font colors from fallback settings ( Fixes #704 )
10 years ago
scrawl
9c0649c11d
Add basic framework to retrieve font colors from fallback settings (Feature #704 )
10 years ago
Marc Zinnschlag
9b7f61b4ba
Merge remote-tracking branch 'scrawl/myguiplugin'
10 years ago
scrawl
bd96764229
Mark code that will be obsolete when upgrading to MyGUI 3.2.2
10 years ago
scrawl
f82224497a
Compatibility fix for MyGUI git
10 years ago
scrawl
2b5adb325b
Remove a useless method
10 years ago
Ragora
282e7abd16
Map Arrow Correction; now rotate global map arrow to whatever the local map arrow orientation is
10 years ago
scrawl
c6bcd75058
Add various custom widgets used in OpenMW to the MyGUI plugin
10 years ago
scrawl
ee3b1e800c
Add FontLoader and transparent BG texture to the MyGUI plugin
10 years ago
scrawl
7fa3100993
Refactor TradeWindow balance buttons to use ControllerRepeatClick
10 years ago
MiroslavR
57f7ef1db4
GUI: update/clear force-hidden window status
10 years ago
scrawl
4f92044d71
Allow user-created markers on local map ( Fixes #1571 )
11 years ago
scrawl
17dc01ec44
Require MyGUI version 3.2.1 and remove legacy code ( Fixes #1528 )
11 years ago
scrawl
dcddd9a07c
Use MyGUI clipboard events for MyGUI 3.2.1+ ( Fixes #1846 )
...
Note that only <= 3.2.0 and >= 3.2.1 are supported, any SVN version between them might still exhibit duplicate text pasting.
11 years ago
scrawl
63cb91db2e
Add --export-fonts command line option
11 years ago
scrawl
6cb9382bf0
Adjust screen-sized widgets automatically using Stretch align
11 years ago
scrawl
715d357f24
Use a controller to move Drag&Drop widget with the mouse cursor
11 years ago
scrawl
a18cec7c8e
Use a MyGUI widget to render the screen fader ( Fixes #1741 , Fixes #1719 )
11 years ago
scrawl
60499eff83
Hotfix for message boxes locking up the game
11 years ago
scrawl
4b3e12bfb4
Fix pinned widgets receiving mouse clicks in gamemode ( Fixes #1686 )
11 years ago
MiroslavR
0f2305ae43
Clear selected spell when window manager is cleared
11 years ago
scrawl
9a26cf22e6
Implement toggleMenus
11 years ago
scrawl
9e6d21d95b
Clear message boxes in windowmanager cleanup ( Fixes #1496 )
11 years ago
scrawl
3788fb042e
Implement MenuTest script instruction ( Fixes #1454 )
11 years ago
scrawl
e0d6670ac4
Move video skip detection to WindowManager
...
Fixes a bug where skipping using Esc would not work if a mouse button had been pressed previously
11 years ago
Marc Zinnschlag
0668019c86
Merge remote-tracking branch 'scrawl/master'
11 years ago
scrawl
6db936bb3a
Refactor item icon code into ItemWidget ( Fixes #1391 )
...
- Removed duplicate code
- Fixed missing magic backgrounds during item drag&drop
- Change background texture used for HUD icons
11 years ago
scrawl
cefa20bfb9
Fix not reacting to quit request while video is playing
11 years ago
slothlife
281d3b4c95
Fix for dereferencing past end of mGuiModes.
11 years ago
Marc Zinnschlag
be88168e91
Merge remote-tracking branch 'scrawl/master'
11 years ago
scrawl
3b3b53d665
Support animated main menus (menu_background.bik)
...
Closes #1362
11 years ago
Digmaster
2b3b11d848
Give access to the main menu when at a choice in dialogue
11 years ago
Digmaster
ee7b5fa5c2
Fixed crash when Esc-ing out of Save "are you sure" dialog.
11 years ago
Digmaster
e0356cf89d
Added support to close modal windows with Esc
11 years ago
Digmaster
e3e51324a4
Esc button exits all non-modal GUI windows
11 years ago
scrawl
039398c8ae
Basic RefData and CellRef change tracking
...
Wrapped item charge handling in getItemHealth function
11 years ago
Emanuel Guevel
1e4a854433
Remove static method MWWorld::Class::get(&Ptr)
...
It was just adding a level of indirection to Ptr.getClass().
All the call were replaced by that instead. The number of lines changed
is important, but the change itself is trivial, so everything should be
fine. :)
11 years ago
scrawl
220ab86eca
Simplify new game movie player
11 years ago
scrawl
90ec19c3ac
Remove unneeded MWScrollView
11 years ago
scrawl
028e00c98f
Add missing status report for some toggle commands
11 years ago
scrawl
6cc691115b
Savegame: store most of CreatureStats
11 years ago
scrawl
c98bea2a88
Moved local map update to LocalMap::updatePlayer to fix a brief desync on cell transitions due to sFogOfWarSkip
11 years ago
scrawl
536fc5e192
Fix autosaves
11 years ago
scrawl
6381b1e938
Fixes #1309 : Do not allow saving while dialogs are opened, just like vanilla
...
This limitation could be removed post-1.0 by serializing the state of open windows.
11 years ago
scrawl
17bb8d7f9a
Fixes #1252 : Add item/magic keybindings to savegame
11 years ago
scrawl
27a05027f4
Fixes #1172 : Added basic loading/saving progress bar
...
The progress is not particularly accurate. It simply uses the current / total number of records written/read as indication. Cell records are currently the largest by far, but there is a good chance that could be optimized using a change tracking system.
11 years ago
scrawl
e8210c92c6
Fixes #1240 : Don't hardcode drowning time
11 years ago
scrawl
30666f2cce
Fixes #1297 : Store global map markers in savegame
11 years ago
scrawl
5b011e43a7
Fix a crash after loading game
11 years ago
scrawl
f5810b8e1c
Consider aspect ratio for loading screen background
...
More consistent with the main menu.
11 years ago
scrawl
f2cd37edd0
Play company logo movie
11 years ago
scrawl
5906d795c0
Refactored video player (now a MyGUI widget)
11 years ago
scrawl
edb5a54092
Include some more required Ogre headers explicitely.
11 years ago
Marc Zinnschlag
367919200f
moved CellRefList into a separate file
11 years ago
Marc Zinnschlag
7693f712bc
started making CellStore into a proper class; encapsulated mCell member
11 years ago
Emanuel Guevel
8824af30b4
Allow to display message box outside of dialogue window
11 years ago
Emanuel Guevel
a3eea4f6b6
Do not allow spellcasting stance without spell selected
11 years ago
Marc Zinnschlag
1b5301eec0
Merge branch 'savedgame'
...
Conflicts:
apps/openmw/mwbase/mechanicsmanager.hpp
apps/openmw/mwbase/soundmanager.hpp
apps/openmw/mwgui/mapwindow.hpp
apps/openmw/mwmechanics/actors.cpp
apps/openmw/mwmechanics/mechanicsmanagerimp.hpp
apps/openmw/mwsound/soundmanagerimp.hpp
components/esm/loadcell.cpp
11 years ago
scrawl
365ae15532
Drag&Drop: auto-hide windows that can't be drop targets on mouseover
11 years ago
scrawl
e0de76a6f7
Save/load global map
11 years ago
scrawl
f09328ca84
Clear global map overlay when starting/loading a game
11 years ago
scrawl
03cf383be7
Merge branch 'master' of https://github.com/zinnschlag/openmw into savedgame
...
Conflicts:
apps/openmw/mwgui/referenceinterface.cpp
apps/openmw/mwmechanics/actors.cpp
apps/openmw/mwmechanics/mechanicsmanagerimp.cpp
apps/openmw/mwmechanics/mechanicsmanagerimp.hpp
apps/openmw/mwscript/cellextensions.cpp
apps/openmw/mwworld/cells.cpp
apps/openmw/mwworld/cells.hpp
apps/openmw/mwworld/cellstore.cpp
apps/openmw/mwworld/store.cpp
apps/openmw/mwworld/worldimp.cpp
11 years ago
Marc Zinnschlag
9ebe66e693
improved cleanup; failed loads will now drop back into the main menu instead of crashing
11 years ago
scrawl
d01f89b153
Rewrite some awful code
11 years ago
scrawl
2744cde40f
Use a few additional GMSTs
11 years ago
scrawl
62774fcc4a
Merge branch 'master' into HEAD
...
Conflicts:
apps/openmw/mwbase/world.hpp
apps/openmw/mwinput/inputmanagerimp.cpp
apps/openmw/mwmechanics/actors.cpp
apps/openmw/mwworld/worldimp.cpp
apps/openmw/mwworld/worldimp.hpp
components/esm/loadtes3.cpp
11 years ago
scrawl
32ff3b530c
Change all instances of skill/attribute values to use an appropriate typedef.
11 years ago
Marc Zinnschlag
e1355be47c
Merge remote-tracking branch 'lgro/valgrind_warnings'
11 years ago
Marc Zinnschlag
c3482b6f24
Merge remote-tracking branch 'scrawl/master'
...
Conflicts:
apps/openmw/mwmechanics/spellcasting.cpp
11 years ago
scrawl
c86760e3cd
Remember the last known exterior position of the player in case we fail to map the interior to a world position.
11 years ago
scrawl
3604b9d171
Closes #566 : In interior cells, update global map position marker using the first exterior teleport door
11 years ago
Alexander "Ace" Olofsson
8381cad5a4
Don't try to set a cursor before one exists
11 years ago
Lukasz Gromanowski
cb04f43384
Fixes for "Conditional jump or move depends on uninitialised value(s)"
...
and memleaks reported by valgrind.
Signed-off-by: Lukasz Gromanowski <lgromanowski@gmail.com>
11 years ago
scrawl
a3017e16d4
Don't allow changing the spell that is being cast mid-animation
11 years ago
Emanuel Guevel
357ecd92b2
Do not display negative stat values
...
Display zero instead of negative values.
Also remove useless for loops and some unused attributes.
11 years ago
Marc Zinnschlag
030c733e2d
Merge branch 'master' into savedgame
...
Conflicts:
apps/openmw/mwmechanics/actors.cpp
apps/openmw/mwworld/worldimp.cpp
files/settings-default.cfg
11 years ago
scrawl
f695deb29d
Remember window positions
11 years ago
Marc Zinnschlag
e818d43bc3
removed an outdated typedef and some dead code
11 years ago
Marc Zinnschlag
71436b1160
changed interface for global variable access
11 years ago
scrawl
03c4b680ca
Fix changePointer
11 years ago
Marc Zinnschlag
e6dc927f11
removed duplicates of the cell name function
11 years ago
scrawl
7f735c2c4c
Release and show the cursor when focus lost
11 years ago
scrawl
5a4bd9b202
Remove software cursor option, hw cursors seem to be working well enough
11 years ago
scrawl
cab535dd69
Implement magic item recharging via soulgem use
11 years ago
scrawl
992a8e9c36
Refactor NpcAnimation: get rid of delayed update (no longer required), make sure that the Animation is set up *before* the inventory store is accessed anywhere (which now triggers auto equip and animation update). Allows better tracking of magic VFX for permanent enchantments in InventoryStore.
11 years ago
Jordan Ayers
3fbf918751
Chargen Review Dialog: Init fix.
...
Load the starting Health/Magicka/Fatigue from the player stats when
creating the Review Dialog, and remove the extra copy of these stats.
In some cases, the old stat values were never updated from 0/0.
11 years ago
Lukasz Gromanowski
5ce1f50fab
Cleanup in MWGui::WindowManager constructor initialzation list.
...
Corrected order of initialization list, and added missing
member field initializations - without this openmw crashes when
installer is interrupted and there are no valid data path
in openmw.cfg, as reported by BrotherBrick in:
https://forum.openmw.org/viewtopic.php?f=20&p=19501#p19499
Signed-off-by: Lukasz Gromanowski <lgromanowski@gmail.com>
11 years ago
scrawl
5918b84666
Don't crash on resize events during load
12 years ago
scrawl
d3d6dfbde8
Refactored loading screen
...
- Add loading progress for data files, global map, terrain
- Refactored and improved cell loading progress
12 years ago
scrawl
0545622f5a
Fix werewolf state not getting completely reset when starting a new game
12 years ago
Emanuel Guevel
997f37700d
Display HUD icons for hidden windows
12 years ago
Emanuel Guevel
c27c33f542
Fix pinned windows hiding
...
They were always displayed in console mode and in game (even if they
were force hidden).
12 years ago
Chris Robinson
5968165de0
Merge remote-tracking branch 'zini/master' into werewolf
...
Conflicts:
apps/openmw/mwgui/windowmanagerimp.cpp
12 years ago
Marc Zinnschlag
e9521dc8f1
Merge remote-tracking branch 'potatoesmaster/pinning'
12 years ago
Chris Robinson
2bac4566c0
Merge remote-tracking branch 'PotatoesMaster/werewolf' into werewolf
...
Conflicts:
apps/openmw/mwmechanics/actors.cpp
apps/openmw/mwscript/statsextensions.cpp
12 years ago
Emanuel Guevel
b2e5e8dd0d
Saner inventory window pinning/hiding
...
Hide inventory window pin button in container, companion and barter mode.
Restore the pinned inventory window position when exiting these modes.
Allow toggling windows visibility in inventory mode only.
12 years ago
PLkolek
8f4506f5b6
Implemented drowning.
...
Currently no visual effects on losing health, the breathing sound doesn't change (we don't have one),
the breath bar doesn't turn red when no breath left and it doesn't pulse from black to red.
12 years ago
Emanuel Guevel
d054366460
Permit to force hiding GUI windows
12 years ago
Emanuel Guevel
8f8362d2c4
Expose sneak indicator widget through WindowManager
12 years ago
Marc Zinnschlag
ca94d1a2fb
Merge remote-tracking branch 'swick/inventorypos'
...
Conflicts:
apps/openmw/mwgui/inventorywindow.cpp
12 years ago
Sebastian Wick
7ed763262f
GUI mode dependent position
12 years ago
Marc Zinnschlag
3642562959
Merge remote-tracking branch 'scrawl/master'
12 years ago
scrawl
3961c276b8
Added enemy health meter
12 years ago
Sebastian Wick
40d3efc671
use cancel methid
12 years ago
Sebastian Wick
7b40e57ba1
Allow the 'Activate' key to close the countdialog window; cleanups
12 years ago
scrawl
6164e5bae6
Restored window resizing
12 years ago
scrawl
8407e2b3aa
Fixes the console sometimes receiving text after it was closed
12 years ago
scrawl
91f6d87126
Fix an uninitialized variable
12 years ago
scrawl
72600a16cf
Fix chargen race menu bug, updating a render target from within MyGUI's ControllerManager update is not a good idea
12 years ago
Sebastian Wick
b43f41c2bd
use a mygui controller for scrollbar repeat
12 years ago
Sebastian Wick
e3d8bdbafe
autorepeat scrollbar
12 years ago
scrawl
b16bc69479
Removed the no longer needed --debug switch
12 years ago
scrawl
4fd7891d2c
Fix a message box issue
12 years ago
scrawl
03682184c6
Enable SDL_TEXTINPUT events only when a text input widget currently has key focus
12 years ago
scrawl
f1ff9b69b3
Mouse grab and relative input need to be disabled when the mouse leaves the window; Disabled resolution switching / window resizing for now due to several glitches
12 years ago
scrawl
0880805559
Minor cleanup
12 years ago
scrawl
918a1655bb
Restored HW cursor rotation and resolution/fullscreen switching
12 years ago
scrawl
495aeb5d3b
Merge branch 'master' into HEAD
...
Conflicts:
CMakeLists.txt
apps/openmw/engine.cpp
apps/openmw/mwgui/cursorreplace.cpp
apps/openmw/mwgui/cursorreplace.hpp
apps/openmw/mwgui/windowmanagerimp.cpp
apps/openmw/mwgui/windowmanagerimp.hpp
apps/openmw/mwinput/inputmanagerimp.cpp
libs/openengine/ogre/renderer.cpp
12 years ago
scrawl
daab4f55a3
Use Morrowind's fonts
12 years ago
scrawl
c41f119ba6
Added new game button
12 years ago
Marc Zinnschlag
e14cb6853f
Merge remote-tracking branch 'scrawl/containerui'
12 years ago
scrawl
0c4a963132
Container UI rewrite
12 years ago
kpp
24d619d6b4
Changes the logic of WindowManager::messageBox()
...
Fixes removeItem
Fixes addItem
12 years ago
scrawl
c6edb0288a
Remove unused file
12 years ago
scrawl
78e6dab9d2
Dialogue history rewrite WIP
12 years ago
scrawl
1f58edb9db
Merge branch 'master' of https://github.com/zinnschlag/openmw into journal
12 years ago
Glorf
57f22c77c0
Bugfix #732 part 1
12 years ago
scrawl
2a42556aa5
Merge branch 'master' into HEAD
12 years ago
Marc Zinnschlag
93868c8bca
Merge remote-tracking branch 'scrawl/master'
12 years ago
Glorf
6222b3f52a
Bugfix #744
12 years ago
scrawl
6c5ea1ea7a
Fix incorrect weapon health meter for fully repaired weapons, fix exception when equipping lockpicks or probes
12 years ago
Nathan Jeffords
7db6447a00
dropped the I infront of the journal view model interfaces
12 years ago
Nathan Jeffords
36a6806faf
drop the leading 'I' from the book page control interfaces
12 years ago
Nathan Jeffords
718af692c9
reworked journal to match bethesda's implemenation
12 years ago
Nathan Jeffords
55ca037411
Created a MyGUI widget to present a page of formatted text.
12 years ago
Nathan Jeffords
8dad04eef1
hid JournalWindow behind IJournalWindow interface, and put its entire
...
implementation, class definition and all, into journalwindow.cpp
12 years ago
Britt Mathis
7eee86ab66
No more using namespace
12 years ago
Britt Mathis
60fadaeaf0
Cleaned up includes in implementation files
12 years ago
Britt Mathis
f7383905b7
Finally eliminated calls to MWBase::WindowManager in constructors
12 years ago
Britt Mathis
ce9bc6d9ba
MwGui windowManager calls fixed to use MWBase::Environment::get().getWindowManager, filenames in MwGui now comply with naming conventions
12 years ago
scrawl
43cdbd033d
Display remaining item health / enchantment charge in HUD icons, display remaining enchanment charge in tooltips
12 years ago
scrawl
05a5cb3ae4
Improved responsiveness of the inventory window when resizing.
12 years ago
scrawl
b0199c703c
Companion UI
12 years ago
scrawl
51204f098e
Added soulgem dialog; made interactive message boxes not close the previous UI
12 years ago
scrawl
a2ca679beb
Added PC repair feature
12 years ago
scrawl
20774f8f81
Added merchant repair feature
12 years ago
Glorf
a07c910d0b
Feature #535 : Console object selection improvements
12 years ago
scrawl
4c588cbab6
Levelup dialog is now dynamic; added level descriptions
12 years ago
Sebastian Wick
0ae48c1f83
fix for Bug #509
12 years ago
scrawl
e34685b8a3
Fix manually changed mouse cursor
12 years ago
Marc Zinnschlag
dc3edc6024
Merge branch 'vartype'
12 years ago
Marc Zinnschlag
ba4907fbaf
use new Variant type for GMSTs
12 years ago
scrawl
5341bf9504
Merge branch 'master' of git://github.com/zinnschlag/openmw into graphics
12 years ago
Marc Zinnschlag
3e97943e06
Merge remote-tracking branch 'scrawl/includes'
12 years ago
scrawl
9a84f6744f
Fix headers including whole MyGUI.h, forward declare where appropriate, and fix some deprecated types (WidgetPtr)
12 years ago
scrawl
cf87708c1f
Magic effect icons for spells
12 years ago
scrawl
0f6fd80294
Merge branch 'master' of git://github.com/zinnschlag/openmw into graphics
...
Conflicts:
apps/openmw/mwgui/windowmanagerimp.cpp
apps/openmw/mwrender/npcanimation.cpp
files/mygui/openmw_settings_window.layout
12 years ago