Под Великими Луками в середине декабря для штурма города были сосредоточены 257-я, 357-я, 7-я (эстонская) стрелковые дивизии 3-й ударной армии Калининского фронта. Еще две эстонские стрелковые дивизии из состава 8-го эстонского стрелкового корпуса (командир генерал-майор Л.А. Пэри) находились в резерве армии. Командующим армией был генерал К.Н. Галицкий.
Для уничтожения великолукского гарнизона советское командование решило нанести два удара. Главный с северо-запада и запада с целью расколоть силы противника на части должны были наносить 257-я и 357-я стрелковые дивизии. Вспомогательный – с юга – один полк 7-й стрелковой дивизии. Штурм было решено начать 12 декабря. Для штурма 257-й стрелковой дивизии придавалось 10 танков Т-34, минометный полк и две батареи пушечного артиллерийского полка (всего 154 орудия и миномета калибра 76 мм и выше). 357-й стрелковый полк получал на усиление 12 танков Т-34 и 3 танка КВ, три артиллерийских дивизиона (202 орудия и миномета). 7-я стрелковая дивизия имела на своем вооружении 179 орудий и минометов. О количестве личного состава советских войск, участвовавших в штурме Великих Лук, судить сложно. Но известно, что только 7-я стрелковая дивизия насчитывала в своем составе около 10 тысяч человек, а весь 8-й эстонский стрелковый корпус – 37,3 тысяч человек.
Кроме того, для штурма города была развернута армейская артиллерийская группа в составе двух пушечных артиллерийских дивизионов (18 орудий) и девяти дивизионов «катюш». Всего же артиллерийская группировка войск, предназначенных для захвата города, насчитывала 566 орудий и минометов.
Таким образом, при штурме Великих Лук советские войска превосходили немецкие по личному составу примерно в 5–6 раз, по танкам в 2,5 раза, по количеству орудий и минометов – не менее чем в 5 раз. Наступать, по теории военного искусства, при таком соотношении сил и средств было вполне возможно.
Перед началом наступления пехоты и танков было решено в течение 2 часов и 15 минут провести артиллерийскую подготовку и бомбовый удар авиацией с воздуха. Наступление войск поддерживать штурмовой авиацией. Наступление вести штурмовыми группами, в состав которых должны были входить танки.
Но планы советского командования из-за сплошного тумана пришлось изменить и перенести начало наступления на 13 декабря. Но и утро 13 декабря также выдалось туманным. Но на этот раз наступление решили не откладывать.
В 12 часов начался заключительный мощный огневой налет всей артиллерии, после чего она перенесла огонь в глубину обороны противника. В атаку двинулись танки, каждый из которых тащил за собой прицеп с десантом (тяжелые сани с устроенными на них двойными деревянными щитами, между которыми плотно были набиты камни и песок). В санях за щитами, которые защищали от пуль, осколков снарядов и мин, прятались пехотинцы и пулеметчики. За танками двинулись вперед штурмовые отряды, затем главные силы атакующих батальонов.
Сначала атакующие двигались быстро. Но вскоре, в связи с усилившимся ответным огнем противника, продвижение замедлилось. Тут же выяснилось, что в результате проведенной артиллерийской подготовки не удалось полностью разрушить оборонительные сооружения немцев, состоявшие их проволочных заграждений, минных полей, рвов и эскарпов, дзотов и блиндажей. Часть из них приходилось брать штурмом уже после подхода штурмовых групп.
Когда наступающие достигли города и завязали уличные бои, темпы продвижения советских войск еще более уменьшились. Кроме штурмовых отрядов пришлось вводить в бой и стрелковые роты. Бой шел на каждой улице, практически за каждый дом. Немцам удалось подбить несколько танков. Местами они даже переходили в контратаки, усиленные танками. Выбитые из зданий, немцы тут же занимали оборону в траншеях, которыми они заранее изрыли весь город и которые служили для них укрытиями и ходами сообщения. Было немало случаев, когда одни и те же объекты по несколько раз переходили из рук в руки. Вспыхивали рукопашные схватки, в ход шли штыки и ручные гранаты.