Kurt
8a08d32dff
Simplify pkm constructors
...
remove Identifier param. 99% of the time, identifier is not provided,
resulting in a useless call
end result:
provide 'create new' and 'create from' constructors
2019-03-16 18:41:56 -07:00
Kurt
13a6d16cb9
Relocate checksum/dexform logic
2019-03-16 12:01:21 -07:00
Benjamin Sinkula
e4d59b8b98
Add PlayerNames and MatchDate to BV7
2019-03-15 14:35:55 -05:00
Kurt
e8a5a55323
Add union/berry crush stat ids
2019-03-09 10:26:43 -08:00
Kurt
61bf82e2bd
Add gs event flags
...
https://projectpokemon.org/home/forums/topic/49717-pkhex-flag-editing/?tab=comments#comment-240804
via pret repo; looks like 2000 event flags, and 0x100 event
consts/work-vals (byte)
add more rebattle toggles
2019-03-05 23:06:05 -08:00
Kurt
17f954b4e8
Xmldoc
...
Reorder to match parameter order
add more xmldoc
2019-02-23 14:57:35 -08:00
Kurt
a339cc9289
Extract pouch manipulation logic
...
add overloads for API syntactic sugar
make ItemConverter internal again
2019-02-22 22:48:34 -08:00
Kurt
df94afa711
Misc updates
...
extract some enums to core, use Enum.GetNames to do string fetch
make stamp listbox taller
clean up Display*ID setters
2019-02-21 21:54:41 -08:00
Kurt
fa4318ae2f
Add gen3 record editing
...
in misc edits window
2019-02-19 20:46:58 -08:00
Kurt
7c3e5aa83c
Make RandomGender a method instead of property
...
See pkNX for similar change; the functionality is really *method*
2019-02-17 22:13:40 -08:00
Kurt
258f0f0ad4
Minor refactoring
...
clean up some gc logic, no functional changes
2019-02-17 10:42:43 -08:00
Kurt
d1f6a5a3ff
Misc clean
...
no functional change
2019-02-15 11:46:46 -08:00
Kurt
e96ef76dcd
Add xmldoc
...
no code changes
2019-02-09 20:24:38 -08:00
Kurt
9a93b20515
Minor rework
...
use hashset instead of new[] every call
precompute empty arr
allow criteria input for better gen requests
2019-02-09 20:07:15 -08:00
Kurt
ec1d3069a5
Remove SaveFile dependency for wallpaper data fetch
...
reusability++
2019-02-09 20:05:32 -08:00
Kurt
383d4b7700
"" -> string.Empty
...
be explicit that the string is empty rather than possibly missing
disallow encrypted export for BK4 (they're not encrypted), removes type
check
simplify replaceall in showdownset (don't call ReplaceAll 4x, just get
valid chars and rebuild)
simplify get ribbon sprite name (precompute ToLower and appended values
2019-02-07 21:40:20 -08:00
Kurt
29253ed636
More cleaning
2019-02-03 20:28:03 -08:00
PMArkive
5cb93be681
add legendary pokemon to wormhole slots ( #2252 )
...
changed slot numbering from 0-4 to 1-15
fixed drapion's pokedex number in wormhole slot table
2019-01-27 10:40:19 -08:00
Kurt
0b5429ebbc
Relocate wormhole edit logic to separate class
...
#2250
make arrays static (only spin up one copy ever)
2019-01-25 19:58:00 -08:00
Kurt
8652677a79
Misc tweaks
...
showdownset: contains char instead of string
gameinfo: static readonly array instead of redefining new on update
legality: order of operation / value reuse / simplification / comments
pkx: compare char instead of single character string
header/footer: move assignment into method as an out instead of ref
2019-01-20 21:55:28 -08:00
Kurt
c591d2a69d
Misc updates
...
condense some logic
2019-01-11 17:44:51 -08:00
Kurt
9a4f12c279
Misc updates
...
rearrange pkm version groups for clear break between
twins/siblings/family
clear pokelist for sav7b on non-exportable saves (prevents b1s1 from
showing markings)
rename horohoro (pgo) to non romaji lol, hide daycare/party tabs on
nonexportable save
remove some unnecessary operations
rewrite getallcontrolsoftype to remove ToList() and make generic
2019-01-05 15:40:25 -08:00
Kurt
8c05b9f391
add g3 hall of fame r/w
...
no GUI
var sav3 = new SAV3(File.ReadAllBytes(path));
var hof = HallFame3Entry.GetEntries(sav3);
hof.Dump();
2019-01-02 18:15:29 -08:00
Kurt
4fcee0ae7a
Move wr7 to mysterygift folder
2018-12-29 23:34:34 -08:00
Kurt
e7531dca30
Add wr7->pkm
...
Not sure if one of the 'level' fields is a move ID instead. Pound=1,
Level=1
Maybe a Chansey record would shed more light.
2018-12-29 23:33:36 -08:00
Kurt
03ad20dd16
Improve card title/filename logic
...
mystery gift editor still fails to generate a description (heldItem < 0
-> exception), the fallback behavior is fine I guess.
2018-12-29 22:15:40 -08:00
Kurt
f5e3358aaf
Split up WR7 to separate files
...
settled on the class name; looks like it'll be roughly readable as a
mystery gift so inherit some properties. maybe can get r/w in the
mystery gift editor :)
2018-12-29 22:09:27 -08:00
Kurt
71dc944cbd
Add wb7 gift record rw
...
another block documented ;)
https://projectpokemon.org/docs/gen-7/lets-go-pikachu-eevee-wonder-card-album-r109/
names subject to change
2018-12-29 21:24:38 -08:00
Kurt
d7a501c168
Relocate some logic to interfaces
2018-12-18 17:15:35 -08:00
Kurt
8a98a89f6e
Add height/weight and float->scalar
...
pgo transfer logic disassembly
FF 83 02 D1 FC 6F 04 A9 FA 67 05 A9 F8 5F 06 A9
2018-12-06 21:03:33 -08:00
Kurt
71fab815bf
Provide more slot information
...
remove lockedslots, store & save all teamslots for sav7
differentiate locked slots from overwrite protected slots by emitting an
enum containing info about the slot
locked = can't be replaced, period.
starter/battleteam = can't be pasted over by bulk-pastes
can eventually show more specific sprite layers to denote party
indexes/team#/starter
2018-12-04 22:59:28 -08:00
Kurt
5750eabcc8
Add user protection for moved starters
...
Closes #2191
2018-12-02 11:48:44 -08:00
Kurt
f6508bec5b
Add dex size record editing via pokedex editor
...
Closes #2186
2018-11-29 21:40:20 -08:00
Kurt
35a85670b3
Set height/weight dex values
...
Closes #2167
Based off sub_71001D16A0 with shortcut modifications:
* code marks new entries for evolution processing later using the low
bit (hence the << 1); in save files I can't see any bits set, but I
can't see anywhere in the code that DOESNT set this bit. Thus the
assumption of post-processing.
As noted in gameplay, a new capture doesn't set Min and Max; it only
sets it if it is above the usual sizing values.
Megas apparently don't set until seen in battle, so don't worry about
setting the other forme based indexes.
2018-11-27 22:05:36 -08:00
Kurt
ab4c3fc7ac
Add go park slot delete (&all)
...
Closes #2179
2018-11-23 12:15:25 -08:00
Kurt
17b3732a7d
Rework filename / nickname checks
...
Closes #2178
2018-11-23 10:31:55 -08:00
Kurt
f27816e622
Add party pointer sort
...
Pulls party members (and follower index if not already in party?) to the
first slot(s) in the (current/all) box.
2018-11-22 23:02:57 -08:00
Kurt
6c0ad30b9a
Add gp1-pb7 conversion
...
Add drop to pkmeditor & drop to saveditor
2018-11-21 20:48:55 -08:00
Kurt
9cf46d5bcb
Add CP and Date to GP1 properties
...
thanks theslayer
2018-11-21 15:25:50 -08:00
Kurt
34f8a71ad0
Always writeback pointer data
...
User sort isn't tracked, and reorganizes pointers. Set it back always,
no harm as values should always be sensical.
Closes #2171
2018-11-18 20:32:55 -08:00
Kurt
b818aff48a
Remove evo tree sanitization
...
Evo data doesn't provide evolution values for these, fortunately.
2018-11-18 15:25:03 -08:00
Kurt
a1cc1a95c2
Fix species fetch, add altform
...
Thanks theSLAYER!
2018-11-18 13:54:47 -08:00
Kurt
5652e76728
Split go entities and go storage, rename classes
2018-11-15 17:36:29 -08:00
Kurt
644fa4e929
Call slot compression
...
Doesn't work correctly (data shifted down still persists)
2018-11-14 22:20:59 -08:00
Kurt
1feecef874
Add go park summarizer
2018-11-14 22:02:01 -08:00
Kurt
fc44022836
Add gopkm block/abstraction
2018-11-14 19:34:21 -08:00
Kurt
7abe0c8a9e
Add candy pouch type
...
reusing free space icon hides the give all button; just add another
sprite.
2018-11-13 20:46:48 -08:00
Kurt
1f985d8112
Remove unnecessary/incorrect flags
...
copypaste from sm lol uops
2018-11-13 20:46:03 -08:00
Kurt
13e1debe3e
Add sav7b object & detection util
2018-11-13 19:18:29 -08:00
Kurt
5f456d705c
Add misc setup objects
2018-11-13 19:16:14 -08:00
Kurt
025a290bc9
Update saveblock template for stored offset fetch
2018-11-13 19:15:27 -08:00
Kurt
486445897e
Add 7b inventory r/w object
2018-11-13 19:15:11 -08:00
Kurt
707f7b5893
Fix displayed dex index for g7
...
off by 1 starting with formes
2018-11-13 19:14:42 -08:00
Kurt
49c4043e19
Update dex abstractions, add gg dex
2018-11-13 19:14:23 -08:00
Kurt
fe989d48fe
Misc prep updates
...
Update comments / xmldoc
Add a savefile storage compressor (ie array[] with empty interstitials
-> list); return true if the compression moved anything (repopulate
views), and the count of occupied slots in the list.
Add saveblock base class; I haven't really liked how SAV6/7 do all the
logic; I'll still expose properties that will then point to a saveblock.
Cuts down clutter.
Add template Dex manipulator, with gen6/7 implementations
Speculate sequential gp/ge gameversion IDs
2018-11-01 15:38:09 -07:00
Kurt
8f9cc6cd7e
Fix xmldoc ampersands
2018-10-31 13:52:09 -07:00
Kurt
13bcc4bdc7
Add more enum values
...
pr video stuff is meh, anyone can contribute that
2018-09-25 16:33:11 -07:00
Kurt
a7f02bf27b
Enumerate some trainer appearance values
...
thanks @sora10pls for gathering resources
2018-09-24 21:20:55 -07:00
Kurt
4ac1cccaa1
Move fashion to another folder
...
incoming enums
2018-09-24 19:44:12 -07:00
Kurt
b280ffcfef
style updates
...
should be pretty much it
2018-09-14 22:37:47 -07:00
Kurt
87b270dd17
add more gen7 record labels
2018-09-13 22:06:44 -07:00
Kurt
189fa5f7b3
Add button to give all seals + illegal ones
...
#2112
2018-09-04 15:26:16 -07:00
Kurt
cf3aba4f84
Add gen4 seal data get/set
...
closes #2112
adds methods to give/remove all, and get/set to retrieve array or
individual.
2018-09-04 15:12:35 -07:00
Kurt
9dae7dad67
Misc updates
...
move encountertype datasource providing to core
fix rerolling EC not updating characteristic
remove some repeat logic calls
relocate geolocation name fetch to separate class, add tests to ensure
functionality, add languageID->country/region fetch method
2018-08-25 17:04:01 -07:00
Kurt
a200dc85c7
Add bvid util
2018-08-18 20:10:34 -07:00
Kurt
b526d4657b
rework tile flip check flow, remove goto
2018-08-17 16:22:54 -07:00
Kurt
e366f9a93d
Misc tweaks
...
only have one empty forme array object
rename method for clarity
show version ID for hidden savefile program window titles
2018-08-15 21:15:06 -07:00
Kurt
d3ec969187
Style updates
...
split pcd/pgt
add more xmldoc
2018-08-09 21:53:39 -07:00
Kurt
6b62dd29ee
Update xy fashion edits
...
different for each gender
2018-08-08 21:27:14 -07:00
Kurt
975759e53c
Update str<->val base32 encoder
...
simpler
2018-08-07 16:32:31 -07:00
Kurt
98f21a12dd
Relocate gen6 trainer stat records to core
...
use trainerstat editor control in gen6 editor
fill in some details from the disassembly via setrecord usages
still slightly fuzzy on some:
fureai (based on usum idb name, similar logic)
soaring sky counts
looks like there's some other usages of the fields which were outside
the stat range, throwing an exception when loading to NumericUpDown,
added bypass logic
Thanks Holla!
2018-08-06 21:27:31 -07:00
Kurt
37e5c9fc69
Add record details for gen6
...
pulled from exefs data
2018-08-06 16:52:43 -07:00
Kurt
48a61a00a2
Relocate record stat id's to core
...
can potentially add localization by changing the method of fetching
2018-08-06 16:17:32 -07:00
Kurt
0296f98777
Add offset table for sav1
...
calling Japanese ? X : Y on every single access is too excessive, just
compute one layout for each type whenever the first sav1 requires it.
could probably reduce the amount of properties by reusing others + shift
value; offsets are different due to string lengths being different
2018-08-05 20:27:25 -07:00
Kurt
84185dc6c9
misc improvements
...
add records class for managing info for trainer records
add more b2w2 block docs
2018-08-05 12:39:06 -07:00
Kurt
3fd21db51e
Style & function extracting
2018-07-29 16:39:15 -07:00
Kurt
0de335d52b
Misc reorg
2018-07-29 14:04:16 -07:00
Kurt
b16015e8e5
Split InventoryPouch to inheriting classes
2018-07-29 13:55:07 -07:00
Kurt
d916be1020
Style updates
2018-07-29 13:27:48 -07:00
Kurt
c8563a3737
Respacening
...
Style guidelines, handle a bunch of files
no functional change
2018-07-26 19:34:27 -07:00
Kurt
9551d4e707
Relocate logic to core
...
probable/possible lgpe uses similar dex stuff, so best I totally
understand it (assuming quirks will be present)
2018-07-26 18:01:16 -07:00
Kurt
1c49b0681d
Extract dex logic
2018-07-21 11:46:38 -07:00
Kurt
97701787a6
Add sav2 daycare view
...
tfw they store full egg data there too -- show that in the sidebar
Tested on C & GS (english), assumedly works fine for other languages
(based on the disassembly?)
2018-07-08 15:46:37 -07:00
Kurt
f04bc214ec
Use OT class calc (mod 5)
...
remove setter as it's derived from TID's low byte
2018-07-08 09:54:17 -07:00
Kurt
f592be75d1
Add gen3 secret base classes
...
don't plan on using them at this time, just an implementation if anyone
wants to play with it
2018-07-08 00:26:31 -07:00
Kurt
b745d59552
Rearranging
...
group gen3 structures to their own folder
2018-07-07 21:47:29 -07:00
Kurt
0b1ae2ec67
Add pokeblock3 interaction
...
no gui but can use core with a rse save file
2018-07-07 21:31:41 -07:00
Kurt
4dcac24f34
Add roamer3 active/level editing
2018-07-07 21:31:07 -07:00
Kurt
990eb73f8a
Misc simplifications
...
recordmax is simplified
2018-07-07 15:38:11 -07:00
Kurt
e46aed4b0b
Relocate bean logic to core
2018-07-07 15:37:47 -07:00
Kurt
e915cd170b
Extract trainer stat to interface / usercontrol
2018-07-07 11:48:03 -07:00
Kurt
2e02ec9719
Refactoring
...
Move some logic out of saveditor/subs
2018-07-07 11:20:05 -07:00
Kurt
c6765fd26b
Remove ORAS arg
...
...
2018-06-10 14:07:36 -07:00
Kurt
19cb2cda2e
Remove MAX giveRegular for ORAS
...
level 3 is the legitimate max
2018-06-10 12:27:53 -07:00
Kurt
75f4318335
Split S/MAX from base 1-3 levels
...
ORAS can unlock MAX & Full Recovery flags, add special handling for that
2018-06-10 11:28:20 -07:00
Kurt
29c610870e
Rename opower6
...
match type
2018-06-10 11:03:14 -07:00
Kurt
26f45d44d0
Rework OPower editor
...
https://projectpokemon.org/home/forums/topic/45683-pkhex-made-odd-number-of-zygarde-cells-usm/?do=findComment&comment=232476
Thanks @sora10pls for documenting what each flag does
2018-06-09 21:04:34 -07:00
Kurt
5475da05c3
entree forest updates
...
clamp species list based on savefile
fix form control index set
remove slot from list (avoid duplicates, there's 530 slots and both
games have more than that available).
Closes #1974
2018-05-28 12:49:41 -07:00
Kurt
4b8cb9b8fb
Add entree forest editor & randomizer
...
ezpz
(clear trailing spaces from entree forest comments)
2018-05-28 08:26:52 -07:00
Kurt
730709b33b
Add entree forest abstractions
...
make cryptarray public
2018-05-27 14:19:19 -07:00
Kurt
99005d8fc0
Refactoring
...
more discards & simplifications
2018-05-12 12:28:48 -07:00
Kurt
5a3c8f4147
Remove trailing whitespace
2018-05-12 08:41:29 -07:00
Kurt
5d8ccf12d4
Fix kor playtime read
...
Closes #1888
Thanks @Bl4ckSh4rk !
2018-04-06 17:15:34 -07:00
Kurt
1122a3f21e
Shift kor gs pokedex bitflag region
...
-0x20 yields a match for seen/caught
https://projectpokemon.org/home/forums/topic/44692-i-have-a-question-about-gen2-of-pkhex/
Thanks BLACKBIRD!
2018-04-05 17:00:55 -07:00
Kurt
c229d5cef4
Add RS & FRLG mail offsets
...
was only emerald prior
Thansk @Bl4ckSh4rk !
https://projectpokemon.org/home/forums/topic/44433-bug-rubysapphire-mailbox/?do=findComment&comment=228885
2018-03-23 23:06:51 -07:00
Kurt
88ce27f26b
Add R/S roamer data offset
...
is different from emerald
Thanks TetsuyaGR!
https://projectpokemon.org/home/forums/topic/44407-bug-rubysapphire-roamer-bug/
(use concatall in encounters4)
2018-03-18 08:37:40 -07:00
Kurt
d20f14504e
Refactoring
...
pull out BlockInfo logic, standardize common block checking
reduces array allocations
2018-02-19 11:33:37 -08:00
Kurt
f8bf3e400b
Misc tweaks
...
Add bulkstorage SaveFile template
remove unused using
un-virtual box property (don't override behavior)
Split new-USUM island names (unused)
Remove island names from valid egg locations (thanks Davil !)
https://projectpokemon.org/home/forums/topic/43874-bug-met-location/?tab=comments#comment-227684
2018-02-15 17:05:45 -08:00
Kurt
06733d6e34
Refactoring
...
Split up c-gear skin bitmap, move generic handling to core
2018-01-13 21:31:02 -08:00
Kurt
a1f2f8708a
Refactoring
...
pass identifier on cloning pkm
remove unnecessary ref for passing Data (not modifying array reference)
const some magic numbers
2017-12-27 16:36:24 -08:00
Kurt
3445b46526
Remove unnecessary array cloning
...
new objects would always clone the input array; only clone on object
cloning (keep the original array reference on initial creation from
bytes)
2017-12-26 21:38:19 -08:00
Kurt
278f7cad25
Add pwt record get/set
...
thanks @sora10pls
2017-12-14 12:34:03 -08:00
Kurt
3d7b2a2b29
Misc tweaks
...
RNG frame mismatch -> fishy (for now)
fix xmldoc copypaste
clean up some resharper warnings
2017-12-04 16:26:26 -08:00
Kurt
a5dbdf91bd
Misc tweaks
...
detect antishiny cxd
remove unused using
don't set caught for seenAll (gen7 dex)
2017-12-04 13:18:28 -08:00
pokecal
0f52f94222
fix MailBoxEditor
...
add Mail5, almost same as Mail4.
2017-12-04 00:00:14 +09:00
Kurt
2d3203fc1a
Refactoring
...
extract out Mail classes to core
2017-12-02 19:12:04 -08:00
Kurt
4a898b0829
Leave empty item slots for gen7+
...
game depends on an existing value to check for if the item is truly
"New"
Closes #1670
Don't clear count=0 slots for gen7+
For sorting, put all the count=0 at the near top (any feedback on how
this actually works?)
2017-11-29 19:47:27 -08:00
Kurt
f13cc289a7
Move eventflag offset fetch to SAV2Offsets obj
2017-11-27 16:46:14 -08:00
Kurt
b30cc933e5
Extract festafacility from gui code
...
move to core project as a structure/class
2017-11-26 08:47:25 -08:00
Michael Scire
b1641772e6
Refactor Memecrypto API, Add Memecrypto Tests
...
Refactors the Memecrypto API to improve generalized usage.
Adds unit tests that verify memecrypto works, so that future changes
don't potentially break the code.
2017-11-06 03:24:48 -08:00
Kurt
2d6b6f7095
Simplify gen7 checksum operations
...
don't spit out a new byte array for each block, just check with same
array
unrelated: allow pk2's to be selected from file->open when a sav7 is
open
2017-11-04 15:04:21 -07:00
Kurt
69cf1eaa9c
add more pkhex.core xml documentation
...
adds a bunch of documentation useful for those unfamiliar with the core
library
2017-10-23 23:12:58 -07:00
Kurt
f5b22d7873
Update 17.10.17
...
Update event binaries with latest from the Event Gallery
2017-10-17 23:59:14 -07:00
Kurt
c3c4336d43
Add gen3 roamer editor
...
Thanks BlackShark!
2017-10-10 18:48:14 -07:00
Kurt
79ede6a212
Add gen3 roamer r/w
2017-10-09 21:00:36 -07:00
Kurt
1e377c2963
interpolation++
...
no functional change (assumed)
2017-09-29 22:58:25 -07:00
Kurt
ce4e5f739e
Fix korean Gold/Silver saving
...
closes #1496
2017-09-29 19:13:03 -07:00
Kurt
532cee406a
Add gen1 overworld respawner
2017-09-25 23:06:16 -07:00
SciresM
4272ad56ae
We know what Key 9 is for (Cap Pikachu).
...
Refactor for Memecrypto API incoming in the next few days.
Gonna add a public overload that takes in a memekey, to facilitate Local Wireless memecrypto.
2017-09-25 17:51:17 -07:00
Kurt
6611e874c3
more usum prep
...
species added requires the 'latest personal table' reference to be
USUM's; the other referencs for .SM are fine as there's no possibility
to have a species ID high enough for it to matter.
2017-09-18 22:36:06 -07:00
Kurt
7efd771bf4
Misc refactoring
...
add docs, move some data fetching to more appropriate class
remove old XP memecrypto support handling, was previously removed due to
net standard/core split
refactor memecrypto to handle multiple save sizes (USUM won't be the
same size save file); placeholder -1 for USUM size
2017-09-16 11:38:58 -07:00
Kurt
7d8a0e0287
Update kor offsets & r/w operations
...
Closes #1451 , was caused by empty party writebacks (was reading from
wrong offset
dex caught/owned offset was listed as 0x28AE in the thread, is at 0x2AAE
instead (-0x20 from seen)
should have correct offsets and handling now :)
2017-09-12 19:47:37 -07:00
Kurt
add2fef7a7
Add gen2 korean handling
...
hypothetical for now, feel free to submit PRs to fix anything that
breaks / was incorrect in the implementation
2017-09-10 19:56:21 -07:00
Kurt
ebecb21b2e
Fix cxd strategymemo/shadowinfo export
...
Closes #1347
Closes #1296
2017-08-06 17:20:04 -07:00
Kurt
80196f75ef
Refactoring
...
split Core.PKX into smaller classes, only StringConverter is exposed for
outside namespaces
2017-07-31 23:03:51 -07:00
Kurt
45c891e64f
Add inventory sorting by index number
...
Closes #1312
2017-07-06 17:24:40 -07:00
Kurt
e373db99c1
Fix honeytree group get
...
byte 6 sets 0/1/2/3, which is used for the editor
byte 5 says which sub-table to use (0/1/2) if there is something on the
tree.
Closes #1283
2017-06-29 09:09:59 -07:00
Kurt
3f38b123a3
Refactoring
...
mostly renaming things, includes a little bit of added sugar and
splitting methods to simplify the codebase.
all methods are now PascalCase
2017-06-17 18:37:19 -07:00
Kurt
a70a4d5e3f
Switch to c# 7 get/set expressions
...
Add gen5 battle box locked flags
no functional change otherwise, just shorter
2017-05-12 20:32:43 -07:00
Evan Dixon
52c4fbbe97
Converted PKHeX.Core to .Net Standard
...
Refactored and rearranged things as needed to allow the change
2017-05-11 23:34:18 -05:00