Легионеры отчаянно отбивались от наседавших пунийцев, но карфагеняне бились настолько храбро и умело, что заставили противника отступать всё дальше и дальше. Римляне, идущие во втором эшелоне, оставили осадную технику и поспешили на помощь товарищам, но и этих сил оказалось недостаточно. Ливийская пехота наращивала натиск, легионеров отбросили к самому лагерю, и карфагеняне стали разрушать брошенную врагом осадную технику. Сципион не ожидал столь массированной атаки и оказался застигнут врасплох. Узость перешейка, где развернулось сражение, не позволяла римскому полководцу использовать численное преимущество и охватить противника с флангов. Поэтому Публий Корнелий был вынужден отправить гастатов в лобовую атаку.
Массы людей сошлись в ожесточенной рукопашной схватке на узком перешейке. Легионеры шли в бой плечом к плечу, наступали тесными рядами и старались оттеснить пунийцев обратно в город. Но ливийцы не отступали и продолжали храбро сражаться, отражая круглыми щитами удары римских мечей и копий. Так и не добившись успеха, Сципион отозвал гастатов и ввел в бой принципов. Истомленные продолжительным боем карфагеняне дрогнули и начали отступать под натиском свежих сил врага.
Сколь стремительной была атака ливийцев, столь стремительным было и их отступление. Потеряв немало воинов, они покатились обратно к городским воротам, преследуемые римлянами. Стоя на холме, Публий Корнелий было возрадовался, что сейчас его воины ворвутся в город на плечах бегущего неприятеля, однако со стен ударили метательные машины, полетели тысячи стрел и дротиков. Ряды легионеров смешались, их продвижение вперед застопорилось, а затем и вовсе остановилось. Карфагеняне этим воспользовались и беспрепятственно ушли в город, унося с собой многочисленных раненых. Уцелевших воинов Магон распределил по стенам и башням, поскольку в ближайшие минуты ожидал римсккю атаку на городские укрепления. Всё шло не так, как он запланировал, поскольку гарнизон уже понес чудовищные потери, а день ещё только начинался. Если что и вселяло в командующего некий оптимизм, так это уничтожение римских метательных машин. Теперь при атаке на укрепления Нового Карфагена римские легионеры могли использовать только штурмовые лестницы. Но это видел и Сципион. Полководец распорядился принести из лагеря ещё лестниц, ободрил войска и отправил легионы на приступ.
Римляне быстро достигли городских стен и начали стремительно карабкаться наверх. И здесь выяснилось, что Публий допустил серьезную ошибку в планировании операции, поскольку непреодолимым препятствием для римлян стала высота стен Нового Карфагена. Лестницы из-за своей длины оказались недостаточно прочными, и когда множество легионеров стало по ним подниматься, хрупкие конструкции начали разваливаться. Десятки римлян полетели вниз с чудовищной высоты и разбились насмерть. Ливийцы выжидали, когда на лестнице окажется как можно больше людей, а затем сбрасывали сверху бревна и тяжелые камни. В других местах легионерам всё-таки удалось достигнуть зубцов крепостной стены, но здесь у многих началось головокружение, и карфагеняне без особого труда сбрасывали растерявшихся врагов на землю. Всё подножие крепостных стен и башен было усеяно телами легионеров и обломками лестниц, но римляне не прекращали натиска и в азарте боя продолжали лезть наверх.
Одновременно началась атака со стороны моря. Но организована она была настолько бестолково, что римляне не достигли на этом участке фронта никакого успеха. Отряды морской пехоты высаживались на берег в суматохе и беспорядке, легионеры, не соблюдая строя, бежали к стенам, поскольку каждый хотел первым ворваться в город. Вместо того чтобы скоординировать свои действия, командиры манипул только мешали друг другу. Римляне то приставляли штурмовые лестницы к стенам, то вдруг неожиданно оттаскивали их назад, неся существенный урон от летевших сверху метательных снарядов. Потери были большие, но продвижения вперед не было.
Сципион лично возглавил штурмовую колонну легионеров. Командующий встал поблизости от городских ворот и отсюда руководил боем, посылая манипулы на участки, где мог обозначиться успех. Трое телохранителей прикрывали полководца большими щитами, отражая летевшие сверху стрелы, копья и дротики. Выпущенные из пращей камни как град стучали по крепким римским щитам, но Публий оставался на месте, одним своим видом воодушевляя идущих в атаку легионеров. Со своей позиции он хорошо видел все перипетии сражения, ободрял храбрецов и упрекал оробевших. Но римляне потеряли множество бойцов, воины устали от бесплодных попыток закрепиться на гребне стены, и Сципион приказал трубить отступление. Под ливнем стрел и камней легионы отступили на исходные позиции.
Всё пространство между городскими стенами и римским лагерем было завалено тысячами мертвых тел и обломками осадной техники, повсюду слышались крики раненых и умирающих воинов. Магон с высоты башни окинул взглядом поле боя, показал на него своим командирам и сказал: «Город не взять ни лестницами, ни осадой: укрепления надежны, и у карфагенских полководцев будет время прийти на помощь городу» (XXVI, 45). Успешно отразив римскую атаку, командующий вновь обрел уверенность в себе и, несмотря на большие потери среди гарнизона, был убежден в благополучном исходе осады. Зато Сципион впервые усомнился в том, что штурм увенчается успехом.
Но ещё ничего не было решено. Время близилось к полудню, скоро в лагуне должен был начаться отлив, поэтому римский полководец дал своим воинам время отдохнуть и приготовиться ко второй атаке. Раненых и наиболее истомленных сражением легионеров по приказу Публия отправили в лагерь, а оттуда прибыли свежие войска с большим количеством штурмовых лестниц. Сципион решил достичь победы комбинированным ударом – со стороны суши, со стороны моря и со стороны лагуны. Он предполагал, что противник не успеет быстро и оперативно отреагировать на возникшие угрозы, благодаря чему римлянам удастся прорваться в город. И как только Публию донесли, что начался отлив, он вновь отправил легионы на штурм неприступной твердыни Нового Карфагена. Рев римских боевых труб огласил окрестности, и легионеры с лестницами на плечах устремились к стенам и башням города. Загрохотали метательные машины карфагенян, полетели стрелы, камни и дротики. Сраженные римляне один за другим повалились на землю, но это не остановило стремительного натиска, и легионеры по лестницам полезли на стены. Сципион некоторое время наблюдал за тем, как развивается атака, и когда убедился, что всё идет как надо, доверил руководство войсками легатам, а сам погнал коня на берег лагуны.
Там командующего ждал отряд из пяти сотен отборных легионеров. Публий осадил коня перед строем, указал рукой на обмелевшую лагуну и обратился к бойцам: «Теперь время, воины! Теперь мне помощником явился бог! Идите к этой части стены! Море уступило нам место! Несите лестницы! Я иду впереди вас!» (App. VI, 21). С этим словами он спрыгнул с коня на землю и первым взялся за лежавшую на земле штурмовую лестницу. Сципион понимал всё значение предстоящей атаки и поэтому решил лично вести своих людей на штурм крепости.
Римляне двинулись через болото, в которое превратилась обмелевшая лагуна. Воины брели по пояс в воде, и хотя временами она доходила всего лишь до колен, идти было трудно, поскольку ноги легионеров проваливались в вязкий ил. Резкие порывы северного ветра, выгоняющие из лагуны воду в открытое море, словно нарочно старались сбить римлян с ног и опрокинуть в волны. Но идущий впереди Публий Корнелий ободрял своих воинов, напоминая им о помощи Нептуна и близкой победе. И чем ближе были стены Нового Карфагена, тем увереннее становились легионеры.
А на перешейке бушевало сражение. Римляне, закрепив на спине щиты, непрерывным потоком взбирались на укрепления, но карфагеняне, заняв позиции на выдвинутых за линию стен башнях, поражали легионеров с боков стрелами и дротиками. Одновременно началась атака на городские ворота. Легионеры построились «черепахой», подошли к огромной каменной арке и стали топорами крушить тяжелые створы. Сверху бросали большие камни и обломки колонн, метали копья и дротики, лили кипящее масло и сыпали раскаленный песок. У легионеров закладывало уши от грохота ударяющихся о поверхность щитов камней, немели руки от этих сильных ударов. Но воины крепко держали щиты над головами, надежно прикрывая ломавших ворота товарищей.
В это время отряд Сципиона приблизился к Новому Карфагену со стороны лагуны. Стоявшие на стене карфагеняне заметили их не сразу, поскольку всё своё внимание обратили в сторону города, откуда доносился непрекращающийся грохот битвы. А когда обнаружили приближающегося со стороны лагуны врага, натянули луки и открыли стрельбу. Воздух загудел от множества стрел и дротиков, но римлян было уже не остановить. Сципион первым добежал до стены и вместе с легионерами установил лестницу, но едва командующий поставил ногу на ступеньку, как был моментально окружен подбежавшими телохранителями. Публия с трудом удержали и насилу уговорили не подвергать себя опасности. Римские воины быстро вскарабкались по лестницам наверх и вступили на гребне стены в схватку пунийцами. Со стороны лагуны на городских укреплениях метательных машин не было, и это в значительной степени облегчило римлянам выполнение боевой задачи.
По стенам и башням разлилась рукопашная схватка, легионеры и ливийцы рубились на мечах, кололи друг друга копьями, сбрасывали вниз ударами щитов. Бой был скоротечным, но жестоким, римляне понесли большие потери, но и карфагеняне полегли все. Оставив позади груды мертвых тел, легионеры разбежались по крепостной стене, убивая всех встречных пунийцев. Сципион поднялся на захваченную башню, окинул взглядом город и отправил пару сотен воинов к воротам, чтобы нанести противнику удар с тыла. Легионеры спустились со стен и бегом устремились в сторону ворот. Попадавшиеся на улицах одинокие прохожие в ужасе шарахались в разные стороны при виде громыхающей калигами по камням мостовой колонны римских воинов. У воротной арки толпились карфагенские воины, подпиравшие бревнами расшатанные створы, они даже не обернулись на шум за спиной. Легионеры забросали их копьями, раскидали в стороны бревна и стали сбивать засовы, громко переговариваясь с товарищами по ту сторону ворот. Через несколько минут створы со скрипом распахнулись, и лавина римлян хлынула на улицы города. Новый Карфаген пал.